我有以下代码段。我正在尝试列出目录中的所有文件,并使其可供用户下载。此脚本适用于没有子目录的目录,但如果我想将文件放在子目录中,则它不起作用。它只列出目录名称。我不确定为什么is_dir对我失败了...我对此感到有点困惑。我确信有更好的方法可以递归列出所有文件,所以我愿意接受任何建议!
function getLinks ($folderName, $folderID) {
$fileArray = array();
foreach (new DirectoryIterator(<some base directory> . $folderName) as $file) {
//if its not "." or ".." continue
if (!$file->isDot()) {
if (is_dir($file)) {
$tempArray = getLinks($file . "/", $folderID);
array_merge($fileArray, $tempArray);
} else {
$fileName = $file->getFilename();
$url = getDownloadLink($folderID, $fileName);
$fileArray[] = $url;
}
}
}
答案 0 :(得分:4)
您可以使用RecursiveDirectoryIterator代替使用DirectoryIterator,它提供了递归迭代文件结构的功能。文档示例:
$path = realpath('/etc');
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object){
echo "$name\n";
}
这将打印所有文件的列表 $ path下的目录(包括 $ path ifself)。如果你想省略 目录,删除 RecursiveIteratorIterator :: SELF_FIRST 一部分。
答案 1 :(得分:0)
您应该使用RecursiveDirectoryIterator,但您可能还需要考虑使用Symfony2中的Finder组件。它允许轻松实时过滤(按大小,日期,...),包括目录或文件,不包括目录或点文件等。请查看Finder.php文件中的docblock以获取说明。