|
|
 |
XXXI. Bestands-systeem functiesDeze functies zijn beschikbaar als onderdeel van
de standarad module die altijd beschikbaar is. Er zijn geen handelingen nodig m.b.t. tot installatie
voor deze functies, deze maken deel uit van de kern van PHP.
Het gedrag van deze functies wordt beïnvloed vanuit php.ini.
Tabel 1. Bestands-systeem en stream configuratie opties | Naam | Standaard waarde | Veranderbaar |
|---|
| allow_url_fopen | "1" | PHP_INI_ALL | | user_agent | NULL | PHP_INI_ALL | | default_socket_timeout | "60" | PHP_INI_ALL | | from | NULL | ?? | | auto_detect_line_endings | "Off" | PHP_INI_ALL |
Here's a short explanation of
the configuration directives.
- allow_url_fopen
boolean
Deze optie activeert de URL-uitgeruste fopen wrappers die het mogelijk
maken om URL objekten zoals bestanden te openen. Standaard wrappers
zijn geleverd om toegang te krijgen tot externe bestanden
die gebruik maken van ftp of http protocol. Sommige extensies zoals
zlib kunnen als extra wrapper
geregistreerd worden.
Opmerking:
Deze optie was geintroduceerd onmiddelijk na het uitkomen van versie
4.0.3. Voor versies tot en met 4.0.3 kan je deze functionaliteit alleen
maar uitschakelen tijdens het compilen met de optie
--disable-url-fopen-wrapper.
- user_agent
string
Defineert de user agent die door PHP wordt meegezonden.
- default_socket_timeout
integer
Standaard timeout (in seconden) voor socket gebaseerde streams.
Opmerking:
Deze configuratie optie is geïntroduceerd in PHP 4.3.0.
- from="joe@example.com"
string
Defineert het anonieme ftp wachtwoord (je eigen email adres).
- auto_detect_line_endings
boolean
Als het wordt aangezet, zal PHP de data gelezen via
fgets() en file()
onderzoeken om te kijken of het Unix, MS-Dos of Macintosh
regeleindes gebruikt.
Dit zorgt ervoor dat PHP ook werkt op Macintosh systemen,
maar staat standaard uit, omdat er een hele kleine winst valt
te halen uit het vinden van EOL voor de eerste regel, en ook omdat
mensen die carriage-returns gebruiken om objekten te onderscheiden
onder Unix niet-achterwaardse-compatible problemen kunnen ervaren.
Opmerking:
Deze configuratie optie is geïntroduceerd in PHP 4.3.0.
Deze constanten worden gedefineerd door deze extensie, en
zullen alleen beschikbaar zijn als de extensie met PHP is
meegecompileerd, of als deze dynamisch is geladen vanuit een script.
Voor gerelateerde functies kan je ook kijken bij de secties van Directories
en Programma's uitvoeren.
Voor een lijst en uitleg van verschillende URL wrappers die gebruikt kunnen
worden met externe bestanden, zie ook Aanhangsel L.
- Inhoudsopgave
- basename -- Geeft het bestandsnaam van een pad terug
- chgrp -- Veranderd de groep van een bestand
- chmod -- Veranderd de modus van een bestand
- chown -- Veranderd de eigenaar van een bestand
- clearstatcache -- Leegt de bestands-status cache
- copy -- Kopieert een bestand
- delete -- Zie unlink() of unset()
- dirname -- Geeft de foldernaam van het pad terug
- disk_free_space -- Geeft de beschikbare vrije ruimte in een folder terug
- disk_total_space -- Geeft de totale ruimte van een folder terug
- diskfreespace -- Alternatief voor disk_free_space()
- fclose -- Sluit een open bestands pointer
- feof -- Test op einde-van-bestand van een bestands pointer
- fflush -- Schrijft de output naar een bestand
- fgetc -- Haalt één teken op uit de bestands pointer
- fgetcsv -- Haalt een regel op van de bestands pointer en benoemt hem op CSV velden
- fgets -- Haalt een regel op van de bestands pointer
- fgetss -- Haalt een regel op van de bestands pointer en stript de HTML tags
- file_exists -- Kijkt of een bestand of directorie bestaat
- file_get_contents -- Leest een bestand volledig in een string
- file_put_contents -- Schrijft een string naar een bestand
- file -- Leest het volledige bestand in een array
- fileatime -- Haalt de laatste toegangs tijd op van een bestand
- filectime -- Haalt de 'inode verander' tijd op van een bestand
- filegroup -- Leest de groep van een bestand uit
- fileinode -- Haalt de inode op van een bestand
- filemtime -- Haalt de 'laatst gewijzigd' tijd op van een bestand
- fileowner -- Leest de eigenaar van een bestand uit
- fileperms -- Leest de permissies van een bestand uit
- filesize -- Leest de grootte van een bestand uit
- filetype -- Leest het type van een bestand uit
- flock -- Portable op advies gebaseerde bestands blokkering
- fnmatch -- Controleert het bestandsnaam op een patroon
- fopen -- Opent een bestand of URL
- fpassthru -- Geeft alle overgebleven data weer van een bestands pointer
- fputs -- Alternatief voor fwrite()
- fread -- Binair veilig bestand lezen
- fscanf -- Ontleed de invoer van een bestand volgens een formaat
- fseek -- Zoekt in een bestands pointer
- fstat -- Verzameld de statestieken van een bestand geopend door de bestandspointer
- ftell -- Geeft de positie in een bestand terug
- ftruncate -- Kapt een bestand af tot een gegeven lengte
- fwrite -- Binair veilig bestand schrijven
- glob -- Zoekt padnamen die met een patroon overeen komen
- is_dir -- Zegt of een bestandsnaam een folder is
- is_executable -- Zegt of een bestandsnaam een executable is
- is_file -- Zegt of een bestandsnaam een bestand is
- is_link -- Zegt of een bestandsnaam een symbolic link is
- is_readable -- Zegt of een bestandsnaam gelezen kan worden
- is_uploaded_file -- Zegt of een bestandsnaam geupload is via HTTP POST
- is_writable -- Zegt of een bestandsnaam schrijfbaar is
- is_writeable -- Alternatief voor is_writable()
- link -- Maakt een hard link
- linkinfo -- Haalt informatie over een link op
- lstat -- Geeft informatie over een bestand of een symbolic link
- mkdir -- Maakt een folder aan
- move_uploaded_file -- Verplaatst een geuploade bestand naar een nieuwe lokatie
- parse_ini_file -- Verwerkt een configuratie bestand
- pathinfo -- Geeft informatie over een pad
- pclose -- Sluit proces bestands pointer
- popen -- Opent een proces bestands pointer
- readfile -- Laat de inhoud van een bestand zien
- readlink -- Geeft het doel van een symbolic link weer
- realpath -- Geeft de gebruikelijke absolute padnaam terug
- rename -- Hernoemt een bestand
- rewind -- Spoelt de positie van een bestands pointer terug
- rmdir -- Verwijdert een folder
- set_file_buffer -- Alias van stream_set_write_buffer()
- stat -- Geeft informatie over een bestand
- symlink -- Maakt een symbolic link aan
- tempnam -- Maakt een bestand met een unieke bestandsnaam
- tmpfile -- Maakt een tijdelijke bestand aan
- touch -- Veranderd de laatste toegangs- en laatste wijzig tijd van een bestand
- umask -- Veranderd de huidige umask
- unlink -- Verwijdert een bestand
add a note
User Contributed Notes
Bestands-systeem functies
ben at nullcreations dot net
14-Nov-2004 11:29
Directed at: fankounter at libero dot it
Erm, I think you missed glob() which does what you're doing, only much more efficiently.
see: http://php.net/glob
fankounter at libero dot it
05-Nov-2004 03:31
// ls(dir,pattern) return file list in "dir" folder matching "pattern"
// ls("path","module.php?") search into "path" folder for module.php3, module.php4, ...
// ls("images/","*.jpg") search into "images" folder for JPG images
function ls($__dir="./",$__pattern="*.*")
{
settype($__dir,"string");
settype($__pattern,"string");
$__ls=array();
$__regexp=preg_quote($__pattern,"/");
$__regexp=preg_replace("/[\\x5C][\x2A]/",".*",$__regexp);
$__regexp=preg_replace("/[\\x5C][\x3F]/",".", $__regexp);
if(is_dir($__dir))
if(($__dir_h=@opendir($__dir))!==FALSE)
{
while(($__file=readdir($__dir_h))!==FALSE)
if(preg_match("/^".$__regexp."$/",$__file))
array_push($__ls,$__file);
closedir($__dir_h);
sort($__ls,SORT_STRING);
}
return $__ls;
}
m2pc (at) hotmail.com
07-Oct-2004 06:18
After searching all over the place to find a function to do what I wanted, I wrote the following:
/*
** Returns an array of valid drives on the system (a:, b:, etc.)
*/
function getSystemDrives () {
// Initialize
$aResult = Array ();
// Loop from A-Z and try opening the root dir
for ($letter = 'A'; $letter <= 'Z'; $letter ++) {
if (is_dir ($letter . ":"))
$aResult [] = $letter . ":";
}
// Return results
return ($aResult);
}
It simply returns an array of valid drives as seen from the server (A:, B:, etc.). This obviously is targeted to Win32 installations only.
Storm Reaver
13-Apr-2004 04:48
The way to write files on server where it is not possible (e.g. Gorodok.net)
<?php
function killfile($ftp, $login, $pass, $filename){
$conn_id = ftp_connect($ftp);
$login_result = ftp_login($conn_id, $login, $pass);
if ((!$conn_id) || (!$login_result)) { return false; } else {
$del = ftp_delete($conn_id, $filename);
if (!del) { return false; } else {return true;}
}
ftp_close($conn_id);
}
killfile("gorodok.net", "login", "password", "/path/file.extension");
$fs = fopen("ftp://login:password@gorodok.net/path/file.extension", "w");
fclose($fs);
?>
ken at xzone9 dot com
16-Mar-2004 09:46
The following will work on UNIX (from peeweeks code submitted for "Windows")---
function ls ($curpath) {
$dir = dir($curpath);
echo("<b>$curpath</b>");
echo "<blockquote>";
while ($file = $dir->read()) {
if($file != "." && $file != "..") {
if (is_dir($curpath.$file)) {
ls($curpath.$file."/");
} else {
echo("$file<br>");
}
}
}
$dir->close();
echo "</blockquote>";
return;
}
//Use:
$startpath = "/home/mypath/";
ls($startpath);
http://iubito.free.fr
30-Dec-2003 01:39
Here is a function I wrote to get the relative path between 2 files or directory.
We suppose that paths are wrotten in Unix format (/ instead of windows \\)
<?php
function relativePath($path1, $path2='')
{
if ($path2 == '') {
$path2 = $path1;
$path1 = getcwd();
}
$path1 = trim($path1,'/');
$path2 = trim($path2,'/');
while (substr_count($path1, '//')) $path1 = str_replace('//', '/', $path1);
while (substr_count($path2, '//')) $path2 = str_replace('//', '/', $path2);
$arr1 = explode('/', $path1);
if ($arr1 == array('')) $arr1 = array();
$arr2 = explode('/', $path2);
if ($arr2 == array('')) $arr2 = array();
$size1 = count($arr1);
$size2 = count($arr2);
$path='';
for($i=0; $i<min($size1,$size2); $i++)
{
if ($arr1[$i] == $arr2[$i]) continue;
else $path = '../'.$path.$arr2[$i].'/';
}
if ($size1 > $size2)
for ($i = $size2; $i < $size1; $i++)
$path = '../'.$path;
else if ($size2 > $size1)
for ($i = $size1; $i < $size2; $i++)
$path .= $arr2[$i].'/';
return $path;
}
?>
Enjoy ! :-)
Gregor Mosheh
23-Aug-2003 02:23
This function searches a directory and returns an array of all files whose filename matches the specified regular expression. It's similar in concept to the Unix find program.
function findfile($location='',$fileregex='') {
if (!$location or !is_dir($location) or !$fileregex) {
return false;
}
$matchedfiles = array();
$all = opendir($location);
while ($file = readdir($all)) {
if (is_dir($location.'/'.$file) and $file <> ".." and $file <> ".") {
$subdir_matches = findfile($location.'/'.$file,$fileregex);
$matchedfiles = array_merge($matchedfiles,$subdir_matches);
unset($file);
}
elseif (!is_dir($location.'/'.$file)) {
if (preg_match($fileregex,$file)) {
array_push($matchedfiles,$location.'/'.$file);
}
}
}
closedir($all);
unset($all);
return $matchedfiles;
}
$htmlfiles = findfile('/some/dir','/\.(htm|html)$/');
Gregor Mosheh
17-Jul-2003 07:25
I needed a function to find disk usage for a directory and its subs, so here it is. It's kinda like the Unix du program, except it returns the usage in bytes, not blocks.
function du($location) {
if (!$location or !is_dir($location)) {
return 0;
}
$total = 0;
$all = opendir($location);
while ($file = readdir($all)) {
if (is_dir($location.'/'.$file) and $file <> ".." and $file <> ".") {
$total += du($location.'/'.$file);
unset($file);
}
elseif (!is_dir($location.'/'.$file)) {
$stats = stat($location.'/'.$file);
$total += $stats['size'];
unset($file);
}
}
closedir($all);
unset($all);
return $total;
}
print du('/some/directory');
aggarwal_deep at hotmail dot com
16-Jul-2003 11:43
The following souce is the combination of 3 different function ,does the listing of the whole files in directories or sub-directories of a base directory(given). And find out the maximum file size of given application files. for example it will tell the maximum file size of ppt file that is placed in the directory.
<?
function showExtension($file){
if(is_file($file)){
$fileInfo = pathinfo($file);
$extension=$fileInfo["extension"];
} else {
$extension="";
}
return $extension;
}
function fsize($size) {
$a = array("B", "KB", "MB", "GB", "TB", "PB");
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size,2)." ".$a[$pos];
}
function ls ($curpath) {
$dir = dir($curpath);
$file_namearr = array("ETC","PPT","XLS","DOC","PDF");
echo("<b>$curpath</b>");
echo "<blockquote>";
$file_sizearr = array(1,1,1,1,1);
while ($file = $dir->read()) {
if($file != "." && $file != "..") {
if (is_dir($curpath.$file)) {
ls($curpath.$file."/");
}
else {
$filext= strtoupper(showExtension($curpath.$file));
$curr_key = 0;
$curr_key = array_search($filext,$file_namearr);
if($curr_key){
$curr_file_size = $file_sizearr[$curr_key];
if(filesize($curpath.$file)>$curr_file_size){
$file_sizearr[$curr_key]= intval(filesize($curpath.$file));
}
}
}
}
}for($k=0;$k<5;$k++){
echo"<br>".$file_namearr[$k].":".fsize($file_sizearr[$k]);
}
$dir->close();
echo "</blockquote>";
return;
}
$startpath = "/home6/docmng/";
ls($startpath);
?>
l_domenech at yahoo dot ca
03-Jul-2003 07:25
In the code samples of the user-contributed notes, you'll find functions that sometimes need a slash at the end of a folder path and sometimes don't.
Here's a little function to append a slash at the end of a path if there isn't one already.
function append_slash_if_none($string)
{
if (ereg ("/$", $string))
{
return $string;
}
else
{
return ereg_replace("$", "/", $string);
}
}
(Replace with a backslash if you're on Windows...)
mitra at mitra dot biz
16-May-2003 07:10
Pollard@php.net contributed this in response to a question on setting these variables ...
This option *IS* settable within your PHP scripts.
Example:
<?php
ini_set('auto_detect_line_endings', true);
$contents = file('unknowntype.txt');
ini_set('auto_detect_line_endings', false);
$content2 = file('unixfile.txt');
?>
Note, with PHP 4.3 anytime Mac files are read using fgets or file you'll need to auto_detect_line_endings since \n is otherwise assumed. However, with PHP 5.0, stream_get_line() will allow you to specify what line ending character to read up to.
\\ Read a line from a MAC file
stream_get_line($fp, 4096, "\r");
\\ Read a line from a UNIX file
stream_get_line($fp, 4096, "\n");
\\ Read a line from a DOS file
stream_get_line($fp, 4096, "\r\n");
\\ Read a line up to any filesystem line ending
ini_set('auto_detect_line_endings', true); fgets($fp);
\\ You can also make up your own line ending characters:
\\ Read up to the first instance of ":"
stream_get_line($fp, 4096, ":");
peeweek at altern dot org
09-May-2003 02:06
here is a function that recurses all directories in a Windows Tree then displays for each directory its contents.
function ls ($curpath) {
$dir = dir($curpath);
echo("<b>$curpath</b>");
echo "<blockquote>";
while ($file = $dir->read()) {
if($file != "." && $file != "..") {
if (is_dir($curpath.$file)) {
ls($curpath.$file."\\");
} else {
echo("$file<br>");
}
}
}
$dir->close();
echo "</blockquote>";
return;
}
Use:
$startpath = "D:\\something\\";
ls($startpath);
regis at webstuff dot com dot br
03-Apr-2003 05:49
Here is a useful function if you're having trouble writing raw bytes into a file.
It receives an integer and returns an array containing the ASCII values of the bytes on each index of the array.
function int2bytes($number){
$byte = $number;
$i=0;
do{
$dec_tmp = $byte;
$byte = bcdiv($byte,256,0);
$resto = $dec_tmp - (256 * $byte);
$return[] = $resto;
} while($byte >= 256);
if($byte) $return[] = $byte;
return array_reverse($return);
}
Example:
$arr = int2bytes(75832);
$arr will contain the following values:
Array
(
[0] => 1
[1] => 40
[2] => 56
)
Now, to write this data to the file, just use a fputs() with chr(), just like this:
fputs($fp,chr($arr[0]).chr($arr[1]).chr($arr[2]))
-- Regis
Alex Chacón
13-Mar-2003 05:03
alex.chacon@terra.com
Hi
Here there is a function that recursively print all the directories in a Unix system from initial path in pre-order.
$pathInicial = "/home1/desarrollo/";
recorrerDirectorioTree ($pathInicial);
function recorrer DirectorioTree($pathGeneral)
{
echo $pathGeneral . "\n\n";
chdir($pathGeneral);
$dir = dir(".");
$dir-> rewind();
while ($fileName = $dir->read())
{
if ($fileName != "." && $fileName != "..")
{
if (is_dir($fileName) && !is_link($fileName))
{
echo "$fileName \n";
clearstatcache();
recorrerDirectorioTree($pathGeneral.$fileName. "/");
chdir($pathGeneral);
}
}
}
$dir->close();
return;
}
jdhurn at uberidx dot com
08-Mar-2003 04:18
This is a function I use to determine if a file contains Binary information. I use this for my search engine so that it doesn't try to index files like .zip or .mp3 or any other file that doesn't contain readable information. It makes use of the Character Type Extension if it's loaded, if it's not then it uses Regular Expressions.
function is_binary($link)
{
$tmpStr = '';
@$fp = fopen($link, 'rb');
@$tmpStr = fread($fp, 256);
@fclose($fp);
if($tmpStr != '')
{
$tmpStr = str_replace(chr(10), '', $tmpStr);
$tmpStr = str_replace(chr(13), '', $tmpStr);
$tmpInt = 0;
for($i =0; $i < strlen($tmpStr); $i++)
{
if( extension_loaded('ctype') )
{
if( !ctype_print($tmpStr[$i]) )
$tmpInt++;
}
else
{
if( !eregi("[[:print:]]+", $tmpStr[$i]) )
$tmpInt++;
}
}
if($tmpInt > 5)
return(0);
else
return(1);
}
else
return(0);
}
meheler at canada dot com
07-Mar-2002 08:55
Here is a useful function that checks for the existance of a file in PHP's include_path:
// Searches PHP's include_path variable for the existance of a file
// Returns the filename if it's found, otherwise FALSE.
// Only works on a *nix-based filesystem
// Check like: if (($file = file_exists_path('PEAR.php')) !== FALSE)
function file_exists_path($file) {
// Absolute path specified
if (substr($path,0,1)=='/')
return (file_exists($file))?realpath($file):FALSE;
$paths = explode(':',ini_get('include_path'));
foreach ($paths as $path) {
if (substr($path,-1)!='/') $path = "$path/";
if (file_exists("$path$file"))
return realpath("$path$file");
}
return FALSE;
}
Mike
| |