Before and After: Recursive Directory Iteration
The previous iterator examples handle only a flat list of items, but frequently your lists contain other lists. For instance, a directory can have other directories inside it, those child directories can contain additional directories, and so on.
Solve this problem with a recursive iterator, an iterator that works with multilevel lists. The following examples demonstrate directory iteration for subdirectories.
PHP 4: Recursively Reading Files in a Directory
In PHP 4, the easiest way to process all the files in a directory and its children is to call a function recursively:
function iterate_dir($path) {
$files = array( );
if (is_dir($path) & is_readable($path)) {
$dir = dir($path);
while (false != = ($file = $dir->read( ))) {
// skip . and ..
if (('.' = = $file) || ('..' = = $file)) {
continue;
}
if (is_dir("$path/$file")) {
$files = array_merge($files, iterate_dir("$path/$file"));
} else {
array_push($files, $file);
}
}
$dir->close( );
}
return $files;
}
$files = iterate_dir('/www/www.example.com');
foreach ($files as $file) {
print "$file\n";
}
email.html
logo.gif
php.gif
auth.inc
user.inc
index.html
search.htmlThis function loops through every file in the current directory. If
the file is a directory, the function recursively calls itself and
passes the subdirectory name as the argument. These results are then
merged back into a master list of files stored in the
$files array. When a file is not a directory, it’s added to the list ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access