ディレクトリ内のすべてのファイルとフォルダを一覧表示する必要がありました。
$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
2回呼び出しますか?つまり、再帰的である場合、2回再帰的にすることはできません:-)
2b- FilesystemIterator
PHPのマニュアルに(私の理解では)再帰的イテレータが構築されているものの一部であると記載されていても、どうして見つからないのですか?
(これらの質問は、回答をコピーして貼り付けるだけでなく、理解を深めたいためです)。
3-すべてのフォルダとファイルをクロスプラットフォームで一覧表示するためのより良い方法はありますか?