SyntaxStudy
Sign Up
PHP Intermediate 8 min read

Directory Operations

PHP lets you list, traverse, and manage directories using both simple functions and the DirectoryIterator / RecursiveDirectoryIterator classes from the SPL.

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.