使用scandir()查找目录中的文件夹(PHP)

Ben*_*Rae 31 php directory

我正在使用这个代码:

$target = 'extracted/' . $name[0];  
$scan = scandir($target);
Run Code Online (Sandbox Code Playgroud)

扫描用于zip上传的文件夹的目录.我希望能够找到我$target文件夹中的所有文件夹,这样我就可以删除它们及其内容,只留下目录中的$target文件.

一旦我返回了文件夹的内容,我不知道如何区分文件夹和文件以便能够删除文件夹.

另外,我被告知该rmdir()功能无法删除其中包含内容的文件夹,有什么方法吗?

谢谢,本.

tra*_*146 60

要确定您是否有文件夹或文件,请使用这些功能is_dir()is_file()

例如:

$path = 'extracted/' . $name[0];
$results = scandir($path);

foreach ($results as $result) {
    if ($result === '.' or $result === '..') continue;

    if (is_dir($path . '/' . $result)) {
        //code to use if directory
    }
}

  • @Ben McRae:这是因为scandir返回结果"." 和".."作为数组的一部分,在大多数情况下,你想忽略这些结果,这就是为什么我把它作为foreach的一部分包括在内 (3认同)
  • 这很棒,完美无缺!不幸的是,我不明白这部分会做什么'if($ result ==='.'或$ result ==='..')继续;',你能解释一下吗?再次感谢. (2认同)

Dom*_*nic 36

最好使用DirectoryIterator

$path = 'extracted'; // '.' for current
foreach (new DirectoryIterator($path) as $file) {
    if ($file->isDot()) continue;

    if ($file->isDir()) {
        print $file->getFilename() . '<br />';
    }
}
Run Code Online (Sandbox Code Playgroud)


Haw*_*ger 3

首先,rmdir() 无法删除包含内容的文件夹。如果安全模式被禁用,您可以使用以下命令。

exec("rm -rf folder/"); 
Run Code Online (Sandbox Code Playgroud)

另请查看 is_dir()/is_file() 甚至更好的PHP SPL