我必须列出目录中的所有文件和文件夹:
$images = array();
$dirs = array();
$dir = new DirectoryIterator($upload_dir_real);
foreach ($dir as $file) {
if ($file->isDot()) {
continue;
}
if ($file->isDir()) {
// dir
$scanned_dirs[] = $file->getPath();
continue;
} else {
// file
//echo $file->getFilename() . "<br>\n";//DEBUG
$realfile = $file->getFilename() . "<br>\n";
$realpath = $file->getPathname();
echo realpath($realfile);//DEBUG
$file->getFilename();
$images[] = realpath( $realpath );
}
}
这工作正常(没有错误),但当然只计算了根,所以我尝试了递归:
$images = array();
$dirs = array();
$dir = new RecursiveDirectoryIterator($upload_dir_real);
foreach ($dir as $file) {
if ($file->isDot()) {
continue;
}
if ($file->isDir()) {
// dir
$scanned_dirs[] = $file->getsubPath();
continue;
} else {
// file
//echo $file->getFilename() . "<br>\n"; //DEBUG
$realfile = $file->getsubFilename() . "<br>\n";
$realpath = $file->getsubPathname();
echo realpath($realfile);//DEBUG
$file->getFilename();
$images[] = realpath( $realpath );
}
}
基本上,我改变了getPath();
with getsubPath()
(和等价的)。问题是它给了我一个错误:
Fatal error: Call to undefined method SplFileInfo::isDot() in blah blah path
所以我搜索了一段时间,发现了这个:
这基本上是同样的问题,但是当我尝试时,我得到了这个错误:
Fatal error: Class 'FilesystemIterator' not found in in blah blah path
问题:
1 - 为什么其他接受的答案中描述的方法对我不起作用?2 - 在同一个答案中,以下代码是什么:
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator(
$pathToFolder,
FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_SELF));
这实际上调用RecursiveIteratorIterator
了两次?我的意思是,如果它是递归的,它就不能递归两次:-)
2b -FilesystemIterator
即使PHP手册声明(据我所知)它是构建递归迭代器的一部分,为什么找不到?
(这些问题是因为我想更好地理解,而不仅仅是复制和粘贴答案)。
3 - 有没有更好的方法来列出跨平台的所有文件夹和文件?