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: Sun, 02 May 2004

XXX. Filesystem functions

Introduzione

Requisiti

Non sono richieste librerie esterne per compilare questo modulo, ma se si desidera avere il supporto per LFS (file di grandi dimensioni) su Linux, occorre avere una versione recente di glibc e occorre compilare il PHP con i seguenti parametri: -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64.

Installazione

Non è necessaria nessuna installazione per usare queste funzioni, esse fanno parte del core di PHP.

Configurazione di Runtime

Il comportamento di queste funzioni è influenzato dalle impostazioni di php.ini.

Tabella 1. Opzioni di configurazione per Filesystem e Streams

NomeDefaultModificabile
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

Breve descrizione dei parametri di configurazione.

allow_url_fopen boolean

Questa opzione abilita i wrapper URL per fopen, in modo da potere accedere ad oggetti URL come file. Per default sono forniti wrapper per accedere a file remoti usando il protocollo ftp o http, alcune estensioni, tipo zlib, possono registrarne altri.

Nota: Questa opzione è stata aggiunta subito dopo il rilascio di PHP 4.0.3. Per le versioni fino a 4.0.3 compresa si può disabilitare questa opzione solo al momento della compila utilizzando il parametro di configurazione --disable-url-fopen-wrapper.

Attenzione

Nelle versioni precedenti alla 4.3.0 per i sistemi Windows, le suguenti funzioni non supportano l'accesso a file remoti: include(), include_once(), require(), require_once() e le funzioni imagecreatefromXXX nel modulo Riferimento XLI, Funzioni per le immagini.

user_agent string

Definisce un agente utente il PHP.

default_socket_timeout integer

Timeout di default (in secondi) per gli stream sui socket.

Nota: Questa opzione di configurazione è stata inserita in PHP 4.3.0

from="joe@example.com" string

Imposta la password per l'ftp anonimo (il tuo indirizzo di posta elettronica).

auto_detect_line_endings boolean

Quando è attivato, il PHP esamina i dati letti da fgets() e file() per vedere se si sta utilizzando le convezioni di Unix, MS-Dos o Macintosh.

Questo permette al PHP di operare con sistemi Macintosh, ma, per default, l'opzione è impostata a Off, poichè vi è una piccola penalizzazione di velocità nel cercare di individuare il tipo di EOL per la prima riga; e anche perchè in alcuni casi si è sperimentato che l'utilizzo del carriage-returns come separatore nei sistemi Unix ha generato comportamenti non compatibili con il passato.

Nota: Questa opzione è stata introdotta in PHP 4.3.0

Tipi di risorse

Costanti predefinite

Queste costanti sono definite da questa estensione e sono disponibili solo se l'estensione è stata compilata nel PHP o se è stata caricata dinamicamente a runtime.

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)

Vedere anche

Vedere anche le sezioni Directory e Esecuzione di programmi.

Per avere un elenco e le spiegazioni sui vari wrapper URL che possono essere utilizzati sui file remoti, vedere Appendice J.

Sommario
basename -- Restituisce il nome del file dal percorso indicato
chgrp -- Cambia il gruppo del file
chmod -- Cambia le impostazioni del file
chown -- Cambia il proprietario del file
clearstatcache -- Libera la cache dello stato di un file
copy -- Copia un file
delete -- Vedere unlink() oppure unset()
dirname -- Restituisce il nome della directory dal percorso indicato
disk_free_space -- Restituisce lo spazio disponibile nella directory
disk_total_space -- Restituisce lo spazio totale di una directory
diskfreespace -- Alias di disk_free_space()
fclose -- Chiude un puntatore a file aperto
feof -- Verifica se è stata raggiunta la fine del file su un puntatore a file
fflush -- Invia l'output in un file
fgetc -- Prende un carattere da un puntatore a file
fgetcsv -- Prende una riga da un puntatore a file e l'analizza in cerca di campi CSV
fgets -- Prende una riga da un puntatore a file
fgetss -- Prende una riga da un puntatore a file ed elimina i tag HTML
file_exists -- Controlla se un file o directory esiste
file_get_contents -- Legge un file all'interno di una stringa
file_put_contents -- Write a string to a file
file -- Legge l'intero file in un vettore
fileatime -- Prende l'ora dell'ultimo accesso al file
filectime -- Prende l'ora in cui l'inode del file è stato modificato
filegroup -- Restituisce il gruppo di un file
fileinode -- Restituisce il numero di inode del file
filemtime -- Restituisce l'ora delle modifiche al file
fileowner -- Restituisce il proprietario del file
fileperms -- Restituisce i permessi del file
filesize -- Restituisce la dimensione del file
filetype -- Restituisce il tipo di file
flock -- Sistema di bloccaggio file
fnmatch -- Match filename against a pattern
fopen -- Apre un file o un URL
fpassthru -- Invia tutti i dati rimanenti su un puntartore a file
fputs -- Alias di fwrite()
fread -- Legge un file salvaguardando la corrispondenza binaria
fscanf -- Analizza l'input da un file secondo un determinato formato
fseek -- Sposta un puntatore sul file
fstat -- Restituisce le informazioni riguardanti un file attraverso un puntatore al file aperto
ftell -- Comunica la posizione di lettura/scrittura del puntatore al file
ftruncate -- Tronca un file alla lunghezza data
fwrite -- Scrive un file salvaguardando la corrispondenza binaria
glob -- Find pathnames matching a pattern
is_dir -- Dice se la stringa corrisponde ad una directory
is_executable -- Dice se il file indicato è eseguibile
is_file -- Dice se il file è un file regolare
is_link -- Dice se il file è un link simbolico
is_readable -- Dice se un file è leggibile
is_uploaded_file -- Dice se un file fù caricato via HTTP POST.
is_writable -- Dice se un file è scrivibile
is_writeable -- Alias di is_writable()
link -- Crea un hard link
linkinfo -- Restituisce informazioni su un collegamento
lstat -- Da informazioni su un file o un link simbolico
mkdir -- Crea una directory
move_uploaded_file -- Muove un file caricato in una nuova posizione
parse_ini_file -- Legge il file di configurazione
pathinfo -- Restituisce informazioni su un percorso di file
pclose -- Chiude un puntatore ad un file di processo
popen -- Apre un puntatore ad un file di processo
readfile -- Invia un file
readlink -- Restituisce il target di un link simbolico
realpath -- Restituisce un percorso assoluto regolare
rename -- Rinomina un file
rewind -- Riavvolge la posizione di un puntatore a file
rmdir -- Rimuove una directory
set_file_buffer -- Alias di stream_set_write_buffer()
stat -- Da informazioni su un file
symlink -- Crea un link simbolico
tempnam -- Crea un nome di file unico
tmpfile -- Crea un file temporaneo
touch -- Imposta l'ora di modifica di un file
umask -- Cambia l'umask corrente
unlink -- Cancella un file


add a note add a note User Contributed Notes
Filesystem functions
Storm Reaver
13-Apr-2004 01: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 06: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 10: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
22-Aug-2003 11: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 04: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 08: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 04: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 04: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 11: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 02: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 02: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 01: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 05: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: Sun, 02 May 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2004 The PHP Group
All rights reserved.
This mirror generously provided by: Italia OnLine S.p.a.
Last updated: Fri May 21 04:11:23 2004 CEST