スキップしてメイン コンテンツに移動

PHPで空のディレクトリを再帰的にすべてたたどるプログラム

PHPで指定したディレクトリにある全ディレクトリ内の空ディレクトリをすべてたどるプログラムを書いてみました。
書いた動機としては、あるディレクトリ内にあるディレクトリをすべて削除したかったためです。
symbolic linkはファイルとして扱っているので無視されます。

<?php

// $callbackの引数の$fileに、空ディレクトリの\SplFileInfoが渡されて呼ばれます。
function visitEmptyDirectoryRecursively($path, callable $callback)
{
    $files = new \DirectoryIterator($path);
    $containsOnlyDirectory = true;
    /* @var $file \SplFileInfo */
    foreach($files as $file)
    {
        if($file->isDot())
        {
            continue;
        }
        else if($file->isDir())
        {
            if(visitEmptyDirectoryRecursively($file->getRealPath(), $callback))
            {
                $callback($file);
            }
            else
            {
                $containsOnlyDirectory = false;
            }
        }
        else
        {
            $containsOnlyDirectory = false;
        }
    }
    return $containsOnlyDirectory;
}

// 空ディレクトリをすべて削除する場合は、下記のようにして使います。
// permissionの関係でディレクトリを消すことができないなどのエラー処理が必要な場合は、
// 処理を書き加える必要があります。
visitEmptyDirectoryRecursively(function(\SplFileInfo $file){
  rmdir($file->getPathname());
});

コメント