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: Thu, 21 Aug 2003

XXIX. Filesystem functions

Introduction

Requirements

No external libraries are needed to build this extension.

Installation

There is no installation needed to use these functions; they are part of the PHP core.

Runtime Configuration

The behaviour of these functions is affected by settings in php.ini.

Table 1. Filesystem and Streams Configuration Options

NameDefaultChangeable
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

This option enables the URL-aware fopen wrappers that enable accessing URL object like files. Default wrappers are provided for the access of remote files using the ftp or http protocol, some extensions like zlib may register additional wrappers.

Note: This option was introduced immediately after the release of version 4.0.3. For versions up to and including 4.0.3 you can only disable this feature at compile time by using the configuration switch --disable-url-fopen-wrapper.

Warning

On Windows versions prior to PHP 4.3.0, the following functions do not support remote file accesing: include(), include_once(), require(), require_once() and the imagecreatefromXXX functions in the Reference XL, Image functions extension.

user_agent string

Define the user agent for PHP to send.

default_socket_timeout integer

Default timeout (in seconds) for socket based streams.

Note: This configuration option was introduced in PHP 4.3.0

from="joe@example.com" string

Define the anonymous ftp password (your email address).

auto_detect_line_endings boolean

When turned on, PHP will examine the data read by fgets() and file() to see if it is using Unix, MS-Dos or Macintosh line-ending conventions.

This enables PHP to interoperate with Macintosh systems, but defaults to Off, as there is a very small performance penalty when detecting the EOL conventions for the first line, and also because people using carriage-returns as item separators under Unix systems would experience non-backwards-compatible behaviour.

Note: This configuration option was introduced in PHP 4.3.0

Resource Types

Predefined Constants

The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at 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)

See Also

For related functions, see also the Directory and Program Execution sections.

For a list and explanation of the various URL wrappers that can be used as remote files, see also Appendix I.

Table of Contents
basename -- Returns filename component of path
chgrp -- Changes file group
chmod -- Changes file mode
chown -- Changes file owner
clearstatcache -- Clears file status cache
copy -- Copies file
delete -- See unlink() or unset()
dirname -- Returns directory name component of path
disk_free_space -- Returns available space in directory
disk_total_space -- Returns the total size of a directory
diskfreespace -- Alias of disk_free_space()
fclose -- Closes an open file pointer
feof -- Tests for end-of-file on a file pointer
fflush -- Flushes the output to a file
fgetc -- Gets character from file pointer
fgetcsv -- Gets line from file pointer and parse for CSV fields
fgets -- Gets line from file pointer
fgetss -- Gets line from file pointer and strip HTML tags
file_exists -- Checks whether a file or directory exists
file_get_contents -- Reads entire file into a string
file_put_contents -- Write a string to a file
file -- Reads entire file into an array
fileatime -- Gets last access time of file
filectime -- Gets inode change time of file
filegroup -- Gets file group
fileinode -- Gets file inode
filemtime -- Gets file modification time
fileowner -- Gets file owner
fileperms -- Gets file permissions
filesize -- Gets file size
filetype -- Gets file type
flock -- Portable advisory file locking
fnmatch -- Match filename against a pattern
fopen -- Opens file or URL
fpassthru -- Output all remaining data on a file pointer
fputs -- Alias of fwrite()
fread -- Binary-safe file read
fscanf -- Parses input from a file according to a format
fseek -- Seeks on a file pointer
fstat -- Gets information about a file using an open file pointer
ftell -- Tells file pointer read/write position
ftruncate -- Truncates a file to a given length
fwrite -- Binary-safe file write
glob -- Find pathnames matching a pattern
is_dir -- Tells whether the filename is a directory
is_executable -- Tells whether the filename is executable
is_file -- Tells whether the filename is a regular file
is_link -- Tells whether the filename is a symbolic link
is_readable -- Tells whether the filename is readable
is_uploaded_file -- Tells whether the file was uploaded via HTTP POST
is_writable -- Tells whether the filename is writable
is_writeable -- Alias of is_writable()
link -- Create a hard link
linkinfo -- Gets information about a link
lstat -- Gives information about a file or symbolic link
mkdir -- Makes directory
move_uploaded_file -- Moves an uploaded file to a new location
parse_ini_file -- Parse a configuration file
pathinfo -- Returns information about a file path
pclose -- Closes process file pointer
popen -- Opens process file pointer
readfile -- Outputs a file
readlink -- Returns the target of a symbolic link
realpath -- Returns canonicalized absolute pathname
rename -- Renames a file
rewind -- Rewind the position of a file pointer
rmdir -- Removes directory
set_file_buffer -- Alias of stream_set_write_buffer()
stat -- Gives information about a file
symlink -- Creates a symbolic link
tempnam -- Create file with unique file name
tmpfile -- Creates a temporary file
touch -- Sets access and modification time of file
umask -- Changes the current umask
unlink -- Deletes a file


add a note add a note User Contributed Notes
Filesystem functions
curlee at mindspring dot com
09-Sep-2003 11:23
Here is quick way to read a dir listing into an array (this is helpfull when you want to walk through a dir file-by-file)

Here is the code:

// Load up array with file names!

$handle = opendir(/path/to/your/dir);

$array_indx = 0;

while (false !== ($file = readdir($handle)))
        {
        $dir_array[$array_indx] = $file;
        $array_indx ++;
        }

foreach ($dir_array as $n)
{

//  put your per-file code here
// example: print "<br>Filename: ".$n."<br>";

}
Gregor Mosheh
23-Aug-2003 07: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 12: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 04: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
04-Jul-2003 12: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 12: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 07: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 10: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鏮
14-Mar-2003 12: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 11: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 03: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: Thu, 21 Aug 2003
show source | credits | sitemap | mirror sites 
Copyright © 2001-2003 The PHP Group
All rights reserved.
This mirror generously provided by: http://php.mirrors.ilisys.com.au/
Last updated: Sat 01 Nov 2003 04:13:36 EST EST