PHP Doku:: Liest einen Eintrag aus einem Verzeichnis-Handle - function.readdir.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzDateisystemrelevante ErweiterungenVerzeichnis-FunktionenVerzeichnis-Funktionenreaddir

Ein Service von Reinhard Neidl - Webprogrammierung.

Verzeichnis-Funktionen

<<opendir

rewinddir>>

readdir

(PHP 4, PHP 5)

readdirLiest einen Eintrag aus einem Verzeichnis-Handle

Beschreibung

string readdir ([ resource $dir_handle ] )

Gibt den Dateinamen des nächsten Files des Verzeichnisses zurück. Die Dateinamen werden in der Reihenfolge zurück gegeben, in der sie innerhalb des Filesystems angelegt wurden.

Parameter-Liste

dir_handle

Das Verzeichnis-Handle resource, das zuvor mit opendir() geöffnet wurde. Wenn das Verzeichnis-Handle nicht angegeben ist, wird dasjenige verwendet, das auf das zuletzt mittels opendir() geöffnete Verzeichnis zeigt.

Rückgabewerte

Gibt bei Erfolg den Dateinamen zurück. Im Fehlerfall wird FALSE zurückgegeben.

Warnung

Diese Funktion kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, wie zum Beispiel 0 oder "", der von einem einfachen if-Statement als FALSE ausgewertet wird. Weitere Informationen entnehmen Sie bitte dem Abschnitt über die boolschen Typen. Benutzen Sie deshalb den === Operator, um den Rückgabewert dieser Funktion zu überprüfen.

Beispiele

Beispiel #1 Alle Dateien eines Verzeichnisses auflisten

Bitte beachten Sie die Art und Weise, in der die Rückgabewerte von readdir() in untenstehenden Beispielen geprüft werden. Wir testen explizit, ob der Rückgabewert identisch (also inhaltlich und typgleich -- siehe Kapitel Vergleichs-Operatoren für weitere Informationen) zu FALSE ist, andernfalls würde jeder Verzeichnis-Eintrag, dessen Name als FALSE ausgewertet wird, das Durchlaufen der Schleife beenden (z.B. ein Verzeichnis namens "0").

<?php

if ($handle opendir('/path/to/files')) {
    echo 
"Directory handle: $handle\n";
    echo 
"Files:\n";

    
/* Das ist der korrekte Weg, ein Verzeichnis zu durchlaufen. */
    
while (false !== ($file readdir($handle))) {
        echo 
"$file\n";
    }

    
/* Dies ist der FALSCHE Weg, ein Verzeichnis zu durchlaufen. */
    
while ($file readdir($handle)) {
        echo 
"$file\n";
    }

    
closedir($handle);
}
?>

Beispiel #2 Listet alle Dateien des aktuellen Verzeichnisses auf und blendet dabei . und .. aus.

<?php
if ($handle opendir('.')) {
    while (
false !== ($file readdir($handle))) {
        if (
$file != "." && $file != "..") {
            echo 
"$file\n";
        }
    }
    
closedir($handle);
}
?>

Siehe auch

  • is_dir() - Prüft, ob der angegebene Dateiname ein Verzeichnis ist
  • glob() - Findet Dateinamen, die mit einem Muster übereinstimmen
  • opendir() - Öffnen eines Verzeichnis-Handles
  • scandir() - Listet Dateien und Verzeichnisse innerhalb eines angegebenen Pfades auf


21 BenutzerBeiträge:
- Beiträge aktualisieren...
tomfc at uninova dot pt
6.01.2011 18:11
an example, just for fun, including and playing a random file within a webpage:

<?php
/**
* get the number of files within a given dir
*/
function fileCounter($dir){
   
$counter = 0;
    if (
$handle = opendir($dir)) {
     
//echo "Directory handle: $handle\n";
      //echo "Files:\n";
      /* This is the correct way to loop over the directory. */
     
while (false !== ($file = readdir($handle))) {
         
//echo "<BR>".$counter." - $file";
         
$counter++;
      }
     
closedir($handle);
    }
   
$counter -= 1; // in order to exclude '.' and '..', as well as start the counter on 1
   
return $counter;
}
/**
* get the filename in a giver dir, starting the first file with the index 1
*/
function fileNameByIndex($dir, $fileIndex){
   
$counter = 0;
    if (
$handle = opendir($dir)) {
      while (
false !== ($file = readdir($handle))) {
         
$counter++;
          if(
$counter - 2 == $fileIndex)
              return
$file;
      }
     
closedir($handle);
    }
    return
"";
}
$nFiles = fileCounter("sounds");
$rndIndex = rand(1, $nFiles);
$fileName = fileNameByIndex("sounds", $rndIndex);

$player_obj = "<embed type='application/x-mplayer2' pluginspage='http://www.microsoft.com/Windows/MediaPlayer/' name='mediaplayer1' ShowStatusBar='false' EnableContextMenu='false' autostart='true' width='1' height='1' loop='false' src='sounds/$fileName' />";
echo
$player_obj;

?>
Qwerp
12.11.2010 7:42
Here's a handy function you can use to list the files in the directory you specify, their type (dir or file) and whether they are hidden.
You could modify it to do other things too.

<?php
function listDirs($where){
echo
"<table border=\"1\"><tr><td><b>Name</b></td><td><b>Type</b></td>";
echo
"<td><b>Invisible (Hidden)?</b></td></tr>";
   
$itemHandler=opendir($where);
   
$i=0;
    while((
$item=readdir($itemHandler)) !== false){
        if(
substr($item, 0, 1)!="."){
            if(
is_dir($item)){
                echo
"<tr><td>$item</td><td>Directory</td><td>No</td></tr>";
            }else{
                echo
"<tr><td>$item</td><td>File</td><td>No</td></tr>";
            }
           
$i++;
        }else{
            if(
is_dir($item)){
                echo
"<tr><td>$item</td><td>Directory</td><td>Yes</td></tr>";
            }else{
                echo
"<tr><td>$item</td><td>File</td><td>Yes</td></tr>";
            }
           
$i++;
        }
       }
echo
"</table>";
}
?>
Then call it like this.
<?php
listDirs
(DIR);
?>
Example:
<?php
listDirs
("/tests/directorylisting");
?>

You get a table like this.

Name    Type    Invisible (Hidden)?
.    Directory    Yes
..    Directory    Yes
.DS_Store    File    Yes
.localized    File    Yes
index.php    File    No
OOOLS    Directory    No
QwerpWiki.php    File    No
frasq at frasq dot org
1.11.2010 16:46
A variation on listing all the files in a directory recursively. The code illustrates a basic technique : the use of an auxiliary function. It avoids building temporary lists which are merged on the way back. Note that the array which collects the information must be passed by reference.

<?php
function listdir($dir='.') {
    if (!
is_dir($dir)) {
        return
false;
    }
   
   
$files = array();
   
listdiraux($dir, $files);

    return
$files;
}

function
listdiraux($dir, &$files) {
   
$handle = opendir($dir);
    while ((
$file = readdir($handle)) !== false) {
        if (
$file == '.' || $file == '..') {
            continue;
        }
       
$filepath = $dir == '.' ? $file : $dir . '/' . $file;
        if (
is_link($filepath))
            continue;
        if (
is_file($filepath))
           
$files[] = $filepath;
        else if (
is_dir($filepath))
           
listdiraux($filepath, $files);
    }
   
closedir($handle);
}

$files = listdir('.');
sort($files, SORT_LOCALE_STRING);

foreach (
$files as $f) {
    echo 
$f, "\n";
}
?>
gherson at snet dot net
2.03.2010 1:15
readdir_recursive() is a recursive readdir() that returns filespecs not filenames.

<?php

define
('SEEK', 'the grail');
define('ORIGIN', "C:\\Documents and Settings\\myname\\My Documents");
$hits = array();
$handles = array(ORIGIN=>opendir(ORIGIN)); // Associate handle with its (absolute) path.
////\\\\ "$handles" is special to
//                 \\\\\\\\\////////
while ($filespec = readdir_recursive($handles)) {
   
$out = array();
   
$cmd = "c:\\cygwin\\bin\\strings '$filespec' | c:\\cygwin\\bin\\grep -li ".SEEK;
   
$lastLine = exec($cmd, $out, $status);
   
// echo "out is ". implode(' ', $out) .", lastLine is $lastLine, status is $status\n";

   
if (strstr(' '. implode(' ', $out), '(standard input)')) { // Hit.
      
$hits[] = $filespec;
    }
}

echo
"'".SEEK."' found in files: <br/>\n". implode("<br/>\n", $hits);

/**
 * Return unique filespecs under given directory tree until all found.
 *
 * To use: while ($filespec = readdir_recursive(array($dir="\\path\\to\\folder" => opendir($dir)))) { ...
 *
 * @param mixed $seed Array(<path>=><resource>) on 1st call | false during recursion.
 * @return mixed $filespec String | false
 */
function readdir_recursive($seed = false)
{
    global
$handles; // ("global" instead of "static" because with latter,
    // assignments go out of scope when function executions end (via return $filespec;).)
   
    // $seed is only true (ie, includes a directory path specified by the user)
    // when readdir_recursive() is executing for the 1st time.
   
if ($seed) {
       
$handles = $seed;
    }
   
assert('is_array($handles)');

    if (empty(
$handles)) {
        return
false; // All done.
   
}

   
// Advance the current($handles) handle to a new file or folder.
   
$file = readdir(current($handles));
   
$filespec = key($handles) ."\\". $file;
    if (
false===$file) { // End of current($handles) directory reached.

        // The current element, an exhausted handle, is the last element.
       
array_pop($handles); // Discard exhausted handle. (This also sets array pointer to array beginning.)
       
end($handles);
       
// echo "\nUp to element ". key($handles) .'=>'. current($handles) ."\n";

       
return readdir_recursive(); // Resume finding files in a higher level directory.

   
} elseif (is_file($filespec)) {
        return
$filespec;

    } else {
// $file is a directory: Recurse.
       
if ($file!=='.' && $file!=='..') { // Non-pointer directory reached.
            // Add this subdirectory to the list that must be traversed.
           
$handles[$filespec] = opendir($filespec);
           
next($handles); // Prepare to proceed to the appended subdirectory.
       
}
        return
readdir_recursive();
    }
}
yasirlayth at live dot com
4.01.2010 14:36
this simple function will index the directories and sub-directories of a given dir

<?php
function get_dirs($dir){
    global
$dirs;
    if (!isset(
$dirs)){$dirs = '';}
    if(
substr($dir,-1) !== '\\'){$dir .= '\\';}
    if (
$handle = opendir($dir)){
        while (
false !== ($file = readdir($handle))){
            if (
filetype($dir.$file) === 'dir' && $file != "." && $file != ".."){
               
clearstatcache();
               
$dirs .= $file . "\n";
               
get_dirs($dir . $file);
            }
        }
       
closedir($handle);
    }
    return
$dirs;
}
?>
DaveRandom
17.05.2009 16:39
A very flexible function to recursively list all files in a directory with the option to perform a custom set of actions on those files and/or include extra information about them in the returned data.

 ----------

 SYNTAX:
   $array = process_dir ( $dir , $recursive = FALSE )
        $dir  (STRING)   =  Directory to process
  $recursive  (BOOLEAN)  =  [Optional] Recursive if set to TRUE

 RETURN VALUES:
  The function returns an indexed array, one entry for every file. Each entry is an associative array, containing the basic information 'filename' (name of file) and 'dirpath' (directory component of path to file), and any additional keys you configure. Returns FALSE on failure.

 ----------

  To allow you to configure another key, the entry for each file is stored in an array, "$entry" for each iteration. You can easily return any additional data for a given file using $entry['keyname'] = ... (Note that this data can be any variable type - string, bool, float, resource etc)

  There is a string variable "$path" available, which contains the full path of the current file, relative to the initial "$dir" supplied at function call. This data is also available in it's constituent parts, "$dir" and "$file". Actions for each file can be constructed on the basis of these variables. The variables "$list", "$handle" and "$recursive" should not be used within your code.

 ----------

 Simply insert you code into the sections indicated by the comments below and your away!

 The following example returns filename, filepath, and file modified time (in a human-readable string) for all items, filesize for all files but not directories, and a resource stream for all files with 'log' in the filename (but not *.log files).

<?php

 
function process_dir($dir,$recursive = FALSE) {
    if (
is_dir($dir)) {
      for (
$list = array(),$handle = opendir($dir); (FALSE !== ($file = readdir($handle)));) {
        if ((
$file != '.' && $file != '..') && (file_exists($path = $dir.'/'.$file))) {
          if (
is_dir($path) && ($recursive)) {
           
$list = array_merge($list, process_dir($path, TRUE));
          } else {
           
$entry = array('filename' => $file, 'dirpath' => $dir);

 
//---------------------------------------------------------//
 //                     - SECTION 1 -                       //
 //          Actions to be performed on ALL ITEMS           //
 //-----------------    Begin Editable    ------------------//

 
$entry['modtime'] = filemtime($path);

 
//-----------------     End Editable     ------------------//
           
do if (!is_dir($path)) {
 
//---------------------------------------------------------//
 //                     - SECTION 2 -                       //
 //         Actions to be performed on FILES ONLY           //
 //-----------------    Begin Editable    ------------------//

 
$entry['size'] = filesize($path);
  if (
strstr(pathinfo($path,PATHINFO_BASENAME),'log')) {
    if (!
$entry['handle'] = fopen($path,r)) $entry['handle'] = "FAIL";
  }
 
 
//-----------------     End Editable     ------------------//
             
break;
            } else {
 
//---------------------------------------------------------//
 //                     - SECTION 3 -                       //
 //       Actions to be performed on DIRECTORIES ONLY       //
 //-----------------    Begin Editable    ------------------//

 //-----------------     End Editable     ------------------//
             
break;
            } while (
FALSE);
           
$list[] = $entry;
          }
        }
      }
     
closedir($handle);
      return
$list;
    } else return
FALSE;
  }
   
 
$result = process_dir('C:/webserver/Apache2/httpdocs/processdir',TRUE);

 
// Output each opened file and then close
 
foreach ($result as $file) {
    if (
is_resource($file['handle'])) {
        echo
"\n\nFILE (" . $file['dirpath'].'/'.$file['filename'] . "):\n\n" . fread($file['handle'], filesize($file['dirpath'].'/'.$file['filename']));
       
fclose($file['handle']);
    }
  }

?>
HeadRoom
8.05.2009 21:08
Thought I would include what I wrote to get a random image from a directory.

<?php
$image_dir
= 'images';
$count = 0;
if (
$handle = opendir($image_dir)) {
   
$retval = array();
    while (
false !== ($file = readdir($handle))) {
        if ((
$file <> ".") && ($file <> "..")) {
       
$retval[$count] = $file;
       
$count = $count + 1;
            }
    }

   
closedir($handle);
}
shuffle($retval);
$current_image = $retval[0];
?>

[NOTE BY danbrown AT php DOT net: Contains a bugfix/typofix inspired by 'ffd8' on 19-JUN-09.]
hanan dot ali dot shaikh at gmail dot com
15.03.2009 8:37
This function is used to display random image i.e. at header position of a site. It reads the whole directory and then randomly print the image. I think it may be useful for someone.

<?php
if ($handle = opendir('images/')) {
  
$dir_array = array();
    while (
false !== ($file = readdir($handle))) {
        if(
$file!="." && $file!=".."){
           
$dir_array[] = $file;
        }
    }
    echo
$dir_array[rand(0,count($dir_array)-1)];
   
closedir($handle);
}
?>
ianatvirante.com
11.02.2009 18:45
I  couldn't easily find a way to recursively search and list all the files and directories in a directory. So here's a stab at it for anyone else who's looking.

<?php
//define the path as relative
$path = "path to directory";
$webpath ="the url you want to place before your filename/";
//using the opendir function
$dir_handle = @opendir($path) or die("Unable to open $path");

echo
"Directory Listing of $path<br/>";

list_dir($dir_handle,$path);

function
list_dir($dir_handle,$path)
{
   
// print_r ($dir_handle);
   
echo "<ol>";
   
//running the while loop
   
while (false !== ($file = readdir($dir_handle))) {
       
$dir =$path.'/'.$file;
        if(
is_dir($dir) && $file != '.' && $file !='..' )
        {
           
$handle = @opendir($dir) or die("undable to open file $file");
            echo
"<li><a href='$webpath.$file'>$file</a></li>";
           
list_dir($handle, $dir);
        }elseif(
$file != '.' && $file !='..')
        {
               echo
"<li><a href='$webpath.$file'>$file</a></li>";
        }
    }
   
    echo
"</ol>";

   
//closing the directory
   
closedir($dir_handle);
   
}
?>
hotrungdungit at gmail dot com
18.12.2008 17:59
Below will return an array of file names and folders in directory

<?php
function ReadFolderDirectory($dir = "root_dir/here")
    {
       
$listDir = array();
        if(
$handler = opendir($dir)) {
            while ((
$sub = readdir($handler)) !== FALSE) {
                if (
$sub != "." && $sub != ".." && $sub != "Thumb.db") {
                    if(
is_file($dir."/".$sub)) {
                       
$listDir[] = $sub;
                    }elseif(
is_dir($dir."/".$sub)){
                       
$listDir[$sub] = $this->ReadFolderDirectory($dir."/".$sub);
                    }
                }
            }   
           
closedir($handler);
        }
        return
$listDir;   
    }
?>
MetaNull
11.07.2008 8:20
A simple directory browser... that handles the windows charset in filenames (it should work for every iso-8859-1 characters).
<?php
 $basepath
= realpath("./pub/");  // Root directory
 
$path = realpath($basepath.$_GET["path"]);  // Requested  path
$relativepath = "./".substr_replace( $path, "", 0, strlen( $basepath ) );
 if(
"/" == substr( $relativepath, -1 )) {  // Remove the trailing slash
 
$relativepath = substr( $relativepath, 0, -1 );
 }

$dh = opendir( $path );
  while(
false !== ($file = readdir( $dh ))) {
   if(
"." == $file) {continue;}
  
// converts the filename to utf8
  
$file_utf8 = iconv( "iso-8859-1", "utf-8", $file );
  
// encode the path ('path' part: already utf8; 'filename' part: still iso-8859-1)
  
$link = str_replace( "%2F", "/", rawurlencode( "{$relativepath}/" )) . rawurlencode( utf8_decode( "{$file_utf8}" ));
   if(
is_dir( "{$path}/{$file}" )) {
    echo
"<a href=\"?path={$link}&amp;\">{$file_utf8}</a><br/>"
  
} else {
    echo
"<a href=\"{$link}&amp;\">{$file_utf8}</a><br/>"
  
}
  }
 }
 
?>
Kim Christensen
5.05.2008 17:14
Handy little function that returns the number of files (not directories) that exists under a directory.
Choose if you want the function to recurse through sub-directories with the second parameter -
the default mode (false) is just to count the files directly under the supplied path.

<?php

 
/**
   * Return the number of files that resides under a directory.
   *
   * @return integer
   * @param    string (required)   The directory you want to start in
   * @param    boolean (optional)  Recursive counting. Default to FALSE.
   * @param    integer (optional)  Initial value of file count
   */ 

 
function num_files($dir, $recursive=false, $counter=0) {
    static
$counter;
    if(
is_dir($dir)) {
      if(
$dh = opendir($dir)) {
        while((
$file = readdir($dh)) !== false) {
          if(
$file != "." && $file != "..") {
             
$counter = (is_dir($dir."/".$file)) ? num_files($dir."/".$file, $recursive, $counter) : $counter+1;
          }
        }
       
closedir($dh);
      }
    }
    return
$counter;
  }

 
// Usage:
 
$nfiles = num_files("/home/kchr", true); // count all files that resides under /home/kchr, including subdirs
 
$nfiles = num_files("/tmp"); // count the files directly under /tmp

?>
info at agentur-obermaier dot de
15.04.2008 13:13
This is a nice quick full dir read - sorry for my bad english ;)

<?php
function ReadDirs($dir,$em){
    if (
$handle = opendir($dir)) {
    while (
false !== ($file = readdir($handle))) {
        if (
$file != "." && $file != ".." && $file != "Thumb.db") {
            if(
is_dir($dir.$file)){
                echo
$em."&raquo; ".$file.'<br>';
               
ReadDirs($dir.$file."/",$em."&nbsp;&nbsp;");
            }
        }
    }
   
closedir($handle);
    }
}
?>
dbzfanatic_1 at hotmail dot com
18.03.2008 18:03
Here's an easy way to output the contents as a list of download links.

<?php
$count
= 0;
if (
$handle = opendir('.')) {
    while (
false !== ($file = readdir($handle))) {
        if (
$file != "." && $file != "..") {$count++;
            print(
"<a href=\"".$file."\">".$file."</a><br />\n");
        }
    }
echo
'<br /><br /><a href="..">Return</a>';
   
closedir($handle);
}
?>

and simply use $count to list the overall number of files.
skysama at googles_email dot com
12.09.2007 19:23
Yet another view files by extension

/* NOTE:
 *  /a-d = do not include directories
 *  /b   = show files in bare mode ( no dates or filesize )
 */

<?php
$dir
= '.\\img\\';    // reminder: escape your slashes
$filetype = "*.png";
$filelist = shell_exec( "dir {$dir}{$filetype} /a-d /b" );
$file_arr = explode( "\n", $filelist );
array_pop( $file_arr ); // last line is always blank
print_r( $file_arr );
?>
nullbyte at hotmail dot com
20.08.2007 9:06
I haven't tested this yet, but it seems like it'll do just fine if you need files of a certain extension:

<?php
$dh
= opendir($options['inputDir']);
$files = array();
while ((
$filename = readdir($dh)) !== false)
{
    if (
substr($filename, strrpos($filename, '.')) == $options['inputExt'])
    {
       
$files[] = $filename;
    }
}
closedir($dh);
?>
johan dot mickelin at gmail dot com
1.06.2007 4:52
If you want to list only a certain filetype, this case only jpg and gif files in an image directory

<?php
$dir
= opendir ("../images");
        while (
false !== ($file = readdir($dir))) {
                if (
strpos($file, '.gif',1)||strpos($file, '.jpg',1) ) {
                    echo
"$file <br />";
                }
        }
?>
schursin at gmail[deleteme] dot com
28.05.2007 3:42
code:

<?php

       
function permission($filename)
        {
           
$perms = fileperms($filename);

            if     ((
$perms & 0xC000) == 0xC000) { $info = 's'; }
            elseif ((
$perms & 0xA000) == 0xA000) { $info = 'l'; }
            elseif ((
$perms & 0x8000) == 0x8000) { $info = '-'; }
            elseif ((
$perms & 0x6000) == 0x6000) { $info = 'b'; }
            elseif ((
$perms & 0x4000) == 0x4000) { $info = 'd'; }
            elseif ((
$perms & 0x2000) == 0x2000) { $info = 'c'; }
            elseif ((
$perms & 0x1000) == 0x1000) { $info = 'p'; }
            else                                 {
$info = 'u'; }

           
// владелец
           
$info .= (($perms & 0x0100) ? 'r' : '-');
           
$info .= (($perms & 0x0080) ? 'w' : '-');
           
$info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-'));

           
// группа
           
$info .= (($perms & 0x0020) ? 'r' : '-');
           
$info .= (($perms & 0x0010) ? 'w' : '-');
           
$info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-'));

           
// все
           
$info .= (($perms & 0x0004) ? 'r' : '-');
           
$info .= (($perms & 0x0002) ? 'w' : '-');
           
$info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-'));

            return
$info;
        }

        function
dir_list($dir)
        {
            if (
$dir[strlen($dir)-1] != '/') $dir .= '/';

            if (!
is_dir($dir)) return array();

           
$dir_handle  = opendir($dir);
           
$dir_objects = array();
            while (
$object = readdir($dir_handle))
                if (!
in_array($object, array('.','..')))
                {
                   
$filename    = $dir . $object;
                   
$file_object = array(
                                           
'name' => $object,
                                           
'size' => filesize($filename),
                                           
'perm' => permission($filename),
                                           
'type' => filetype($filename),
                                           
'time' => date("d F Y H:i:s", filemtime($filename))
                                        );
                   
$dir_objects[] = $file_object;
                }

            return
$dir_objects;
        }

?>

call:

<?php

        print_r
(dir_list('/path/to/you/dir/'));

?>

output sample:

Array
(
    [0] => Array
        (
            [name] => api
            [size] => 0
            [perm] => drwxrwxrwx
            [type] => dir
            [time] => 28 May 2007 01:55:02
        )

    [1] => Array
        (
            [name] => classes
            [size] => 0
            [perm] => drwxrwxrwx
            [type] => dir
            [time] => 26 May 2007 00:56:44
        )

    [2] => Array
        (
            [name] => config.inc.php
            [size] => 143
            [perm] => -rw-rw-rw-
            [type] => file
            [time] => 26 May 2007 13:13:19
        )

    [3] => Array
        (
            [name] => index.php
            [size] => 131
            [perm] => -rw-rw-rw-
            [type] => file
            [time] => 26 May 2007 22:15:18
        )

    [4] => Array
        (
            [name] => modules
            [size] => 0
            [perm] => drwxrwxrwx
            [type] => dir
            [time] => 28 May 2007 00:47:40
        )

    [5] => Array
        (
            [name] => temp
            [size] => 0
            [perm] => drwxrwxrwx
            [type] => dir
            [time] => 28 May 2007 04:49:33
        )

)
(Qube#php@Efnet)
15.05.2007 17:36
<?php

// Sample function to recursively return all files within a directory.
// http://www.pgregg.com/projects/php/code/recursive_readdir.phps

Function listdir($start_dir='.') {

 
$files = array();
  if (
is_dir($start_dir)) {
   
$fh = opendir($start_dir);
    while ((
$file = readdir($fh)) !== false) {
     
# loop through the files, skipping . and .., and recursing if necessary
     
if (strcmp($file, '.')==0 || strcmp($file, '..')==0) continue;
     
$filepath = $start_dir . '/' . $file;
      if (
is_dir($filepath) )
       
$files = array_merge($files, listdir($filepath));
      else
       
array_push($files, $filepath);
    }
   
closedir($fh);
  } else {
   
# false if the function was called with an invalid non-directory argument
   
$files = false;
  }

  return
$files;

}

$files = listdir('.');
print_r($files);
?>
(Qube#php@Efnet)
14.05.2007 11:41
Here is an updated version of preg_find() [which has been linked from the glob() man page for years] - this function should provide most of what you want back from reading files, directories, different sorting methods, recursion, and perhaps most powerful of all the ability to pattern match with a PCRE regex.

You can get preg_find here: http://www.pgregg.com/projects/php/preg_find/preg_find.php.txt
or if you prefer colourful .phps format: http://www.pgregg.com/projects/php/preg_find/preg_find.phps
or scoll down to the end of this note.

I wrote several examples on how to use it on my blog at: http://www.pgregg.com/forums/viewtopic.php?tid=73

simple glob() type replacement:
$files = preg_find('/./', $dir);

recursive?
$files = preg_find('/./', $dir, PREG_FIND_RECURSIVE);

pattern match? find all .php files:
$files = preg_find('/\.php$/D', $dir, PREG_FIND_RECURSIVE);

sorted alphabetically?
$files = preg_find('/\.php$/D', $dir, PREG_FIND_RECURSIVE|PREG_FIND_SORTKEYS);

sorted in by filesize, in descending order?
$files = preg_find('/./', $dir,
  PREG_FIND_RECURSIVE|PREG_FIND_RETURNASSOC |PREG_FIND_SORTFILESIZE|PREG_FIND_SORTDESC);
$files=array_keys($files);

sorted by date modified?
$files = preg_find('/./', $dir,
  PREG_FIND_RECURSIVE|PREG_FIND_RETURNASSOC |PREG_FIND_SORTMODIFIED);
$files=array_keys($files);

Ok, the PHP note says my note is too long, so please click on one of the above links to get it.
phpwizard-at-pech-dot-cz
4.07.2002 22:22
It should work, but it'll be better to read section 13.1.3 Cache-control Mechanisms of RFC 2616 available at http://rfc.net/rfc2616.html before you start with confusing proxies on the way from you and the client.

Reading it is the best way to learn how proxies work, what should you do to modify cache-related headers of your documents and what you should never do again. :-)

And of course not reading RFCs is the best way to never learn how internet works and the best way to behave like Microsoft corp.

Have a nice day!
Jirka Pech



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)