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());
});
コメント