在PHP中递归列出子目录很麻烦
我有以下代码片段。我试图列出目录中的所有文件,并让用户可以下载它们。这个脚本可以很好地处理没有子目录的目录,但是如果我想获取子目录中的文件,它就不能工作。它只列出目录名。我不知道为什么is_dir对我不好。。。我对此有点困惑。我相信有更好的方法可以递归列出所有文件,所以我愿意接受任何建议在PHP中递归列出子目录很麻烦,php,recursion,Php,Recursion,我有以下代码片段。我试图列出目录中的所有文件,并让用户可以下载它们。这个脚本可以很好地处理没有子目录的目录,但是如果我想获取子目录中的文件,它就不能工作。它只列出目录名。我不知道为什么is_dir对我不好。。。我对此有点困惑。我相信有更好的方法可以递归列出所有文件,所以我愿意接受任何建议 function getLinks ($folderName, $folderID) { $fileArray = array(); foreach (new DirectoryIterator(<so
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;
}
}
}
函数getLinks($folderName,$folderID){
$fileArray=array();
foreach(新的DirectoryIterator(.$folderName)作为$file){
//如果不是“.”或“.”继续
如果(!$file->isDot()){
如果(is_dir($file)){
$tempArray=getLinks($file.“/”,$folderID);
数组\合并($fileArray,$tempArray);
}否则{
$fileName=$file->getFilename();
$url=getDownloadLink($folderID,$fileName);
$fileArray[]=$url;
}
}
}
您可以使用,而不是使用DirectoryIterator,它提供递归迭代文件结构的功能。文档中的示例:
$path = realpath('/etc');
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object){
echo "$name\n";
}
这将打印所有文件和文件的列表
$path下的目录(包括
$path ifself)。如果要忽略
目录,删除
递归迭代器::SELF_优先
部分
您应该使用RealsivDealTyryTyror,但您可能还需要考虑使用SimFoYY2的组件。它允许简单的即时过滤(按大小、日期、……)。,包括dir或文件,不包括dir或dot文件等。查看文件中的docblock以获取说明。
可能与我正在查找的内容重复!我稍后将修改我的代码并试一试。谢谢!将其替换到我的代码中,效果非常好。但是,isDot不再工作。它给出以下错误:致命的e错误:调用未定义的方法SplFileInfo::isDot()。知道为什么吗?@thomascirca:你可能想看看这个,似乎SPL比其他解决方案慢50%。