19.8. Processing All Files in a Directory19.8.1. ProblemYou want to iterate over all files in a directory. For example, you want to create a select box in a form that lists all the files in a directory. 19.8.2. SolutionGet a directory handle with opendir( ) and then retrieve each filename with readdir( ): $d = opendir('/tmp') or die($php_errormsg); while (false !== ($f = readdir($d))) { print "$f\n"; } closedir($d); 19.8.3. DiscussionThe code in the solution tests the return value of readdir( ) with the nonidentity operator (!==) so that the code works properly with filenames that evaluate to false, such as a file named 0. The function readdir( ) returns each entry in a directory, whether it is a file, directory, or something else (such as a link or a socket). This includes the metaentries "." (current directory) and ".." (parent directory). To just return files, use the is_file( ) function as well: print '<select name="files">'; $d = opendir('/usr/local/upload') or die($php_errormsg); while (false !== ($f = readdir($d))) { if (is_file("/usr/local/upload/$f")) { print '<option> ' . $f . '</option>'; } } closedir($d); print '</select>'; Because readdir( ) returns only the filename of each directory entry, not a full pathname, you have to prepend the directory name to $f before you pass it to is_file( ). PHP also has an object-oriented interface to directory information. The dir( ) function returns an object on which you can call read( ), rewind( ), and close( ) methods, which act like the readdir( ), rewinddir( ), and closedir( ) functions. There's also a $path property that contains the full path of the opened directory. Here's how to iterate through files with the object-oriented interface: print '<select name="files">'; $d = dir('/usr/local/upload') or die($php_errormsg); while (false !== ($f = $d->read())) { if (is_file($d->path.'/'.$f)) { print '<option> ' . $f . '</option>'; } } $d->close(); In this example, $d->path is /usr/local/upload. 19.8.4. See AlsoDocumentation on opendir( ) at http://www.php.net/opendir, readdir( ) at http://www.php.net/readdir, and the directory class at http://www.php.net/class.dir. Copyright © 2003 O'Reilly & Associates. All rights reserved. |
|