PHP lets you list, traverse, and manage directories using both simple functions and the DirectoryIterator / RecursiveDirectoryIterator classes from the SPL.
PHP
Intermediate
8 min read
Directory Operations
Example
<?php
$dir = '/var/data';
// Simple listing with scandir
$entries = scandir($dir);
foreach ($entries as $entry) {
if ($entry === '.' || $entry === '..') continue;
$fullPath = $dir . DIRECTORY_SEPARATOR . $entry;
echo (is_dir($fullPath) ? '[DIR] ' : '[FILE]') . " $entry
";
}
// DirectoryIterator (SPL)
$iterator = new DirectoryIterator($dir);
foreach ($iterator as $item) {
if ($item->isDot()) continue;
printf("%-6s %s (%d bytes)
",
$item->getType(),
$item->getFilename(),
$item->isFile() ? $item->getSize() : 0
);
}
// Recursive listing with RecursiveDirectoryIterator
$rit = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($rit as $path => $info) {
$indent = str_repeat(' ', $rit->getDepth());
echo $indent . $info->getFilename() . "
";
}
// Glob — find files matching a pattern
$phpFiles = glob($dir . '/*.php');
$images = glob($dir . '/images/*.{jpg,png,gif}', GLOB_BRACE);
foreach ($phpFiles as $file) {
echo basename($file) . "
";
}
Pro Tip
Tip: Use RecursiveDirectoryIterator combined with RecursiveCallbackFilterIterator to traverse deep directory trees while filtering on the fly — far more memory-efficient than loading all paths into an array first.