1

多数のサブディレクトリがあるディレクトリがあるとします。すべてのサブディレクトリをスキャンして、たとえばabc.phpという名前のファイルを見つけ、見つかった場所でこのファイルを削除するにはどうすればよいでしょうか。

私はこのようなことをしてみました -

$oAllSubDirectories = scandir(getcwd());
foreach ($oAllSubDirectories as $oSubDirectory)
{
  //Delete code here
}

ただし、このコードはサブディレクトリ内のディレクトリをチェックしません。どうすればこれを行うことができますか?

4

1 に答える 1

3

一般に、コードを関数内に配置して再帰的にします。ディレクトリに遭遇すると、その内容を処理するために自分自身を呼び出します。このようなもの:

function processDirectoryTree($path) {
    foreach (scandir($path) as $file) {
        $thisPath = $path.DIRECTORY_SEPARATOR.$file;
        if (is_dir($thisPath) && trim($thisPath, '.') !== '') {
            // it's a directory, call ourself recursively
            processDirectoryTree($thisPath);
        }
        else {
            // it's a file, do whatever you want with it
        }
    }
}

RecursiveDirectoryIteratorこの特定のケースでは、これを行う必要はありません。これは、PHPがこれを自動的に行う既製のものを提供しているためです。

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(getcdw()));
while($it->valid()) {
    if ($it->getFilename() == 'abc.php') {
        unlink($it->getPathname());
    }
    $it->next();
}
于 2013-02-12T09:29:08.960 に答える