假设有一个目录,其中有许多子目录。现在我如何扫描所有子目录以找到一个名为abc.php的文件,并在找到该文件的任何地方删除该文件。
我试着做这样的事情 -
$oAllSubDirectories = scandir(getcwd());
foreach ($oAllSubDirectories as $oSubDirectory)
{
//Delete code here
}
但是此代码不检查子目录中的目录。知道我该怎么做吗?
通常,您将代码放在一个函数中并使其递归:当它遇到一个目录时,它会调用自身以处理其内容。像这样的东西:
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
}
}
}
在这种特殊情况下,您不需要这样做,因为 PHP 提供了RecursiveDirectoryIterator
自动执行此操作的现成工具:
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(getcdw()));
while($it->valid()) {
if ($it->getFilename() == 'abc.php') {
unlink($it->getPathname());
}
$it->next();
}