★ wanayoo — archive 1999 http://fr.php.net/manual/nl/ref.filesystem.phpNouvelle recherche | Portail wanayoo
PHP  
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
search for in the  
<fileprobasename>
view the version of this page
Last updated: Fri, 26 Nov 2004

XXXI. Bestands-systeem functies

Afhankelijkheden

Deze functies zijn beschikbaar als onderdeel van de standarad module die altijd beschikbaar is.

Installatie

Er zijn geen handelingen nodig m.b.t. tot installatie voor deze functies, deze maken deel uit van de kern van PHP.

Configuratie tijdens scriptuitvoer

Het gedrag van deze functies wordt beïnvloed vanuit php.ini.

Tabel 1. Bestands-systeem en stream configuratie opties

NaamStandaard waardeVeranderbaar
allow_url_fopen"1"PHP_INI_ALL
user_agentNULLPHP_INI_ALL
default_socket_timeout"60"PHP_INI_ALL
fromNULL??
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.

Waarschuwing

Op Windows versie voor PHP 4.3.0, ondersteunen de volgende functies geen externe bestands toegang: include(), include_once(), require(), require_once() en de imagecreatefromXXX functie in de Referentie XLII, Image Functions extensie.

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.

Voorgedefineerde constanten

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.

GLOB_BRACE (integer)

GLOB_ONLYDIR (integer)

GLOB_MARK (integer)

GLOB_NOSORT (integer)

GLOB_NOCHECK (integer)

GLOB_NOESCAPE (integer)

PATHINFO_DIRNAME (integer)

PATHINFO_BASENAME (integer)

PATHINFO_EXTENSION (integer)

FILE_USE_INCLUDE_PATH (integer)

FILE_APPEND (integer)

FILE_IGNORE_NEW_LINES (integer)

FILE_SKIP_EMPTY_LINES (integer)

Zie ook

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 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");
  
// Erasing file on server
$fs = fopen("ftp://login:password@gorodok.net/path/file.extension", "w");
  
// Opening file for writing
   // You can't open file 4 writing without 'killfile' function because there must be no such file on server for fopen write mode via FTP/

// Here we write what we need
  
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
/**
 * Return the relative path between two paths / Retourne le chemin relatif entre 2 chemins
 *
 * If $path2 is empty, get the current directory (getcwd).
 * @return string
 */
function relativePath($path1, $path2='')
{
   if (
$path2 == '') {
      
$path2 = $path1;
      
$path1 = getcwd();
   }

  
//Remove starting, ending, and double / in paths
  
$path1 = trim($path1,'/');
  
$path2 = trim($path2,'/');
   while (
substr_count($path1, '//')) $path1 = str_replace('//', '/', $path1);
   while (
substr_count($path2, '//')) $path2 = str_replace('//', '/', $path2);

  
//create arrays
  
$arr1 = explode('/', $path1);
   if (
$arr1 == array('')) $arr1 = array();
  
$arr2 = explode('/', $path2);
   if (
$arr2 == array('')) $arr2 = array();
  
$size1 = count($arr1);
  
$size2 = count($arr2);

  
//now the hard part :-p
  
$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){
                      
//echo "<br>$filext:$curr_key";
                      
$curr_file_size = $file_sizearr[$curr_key];
                       if(
filesize($curpath.$file)>$curr_file_size){
                          
$file_sizearr[$curr_key]= intval(filesize($curpath.$file));
                       }   
                   }
                  
                          
//echo"<br> $file : ".fsize($curpath.$file);
              
}
           }
          
       }
//while ends
      
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

<fileprobasename>
 Last updated: Fri, 26 Nov 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2004 The PHP Group
All rights reserved.
This mirror generously provided by: nexen.net
Last updated: Sat Nov 27 05:15:21 2004 CET