Я завершаю сегмент кода, в котором перечислены файлы в каталоге. У меня нет проблем с перечислением файлов в каталоге, но по какой-то причине я могу заставить метод isDot () работать, чтобы убедиться, что файл не является. или ".." . Ниже приведена следующая ошибка:
Fatal error: Call to undefined method SplFileInfo::isDot() in ....
Прежде чем переключиться на использование рекурсивного итератора, я использовал Итератор каталогов, и он работал нормально. Что-то не так с кодом ниже? Он должен работать.
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathToFolder)); //if there is a subdirectory it makes sure the proper extension is passed foreach($files as $name => $file){ if (!$file->isDot()) { //this is where it shuts me down $realfile = str_replace($pathToFolder, "", $file); $url = getDownloadLink($folderID, $realfile); $fileArray[] = $url; } }
Это потому, что DirectoryIterator::current()
(метод, вызывающий внутри foreach
-loop) возвращает объект, который сам по себе является свойством DirectoryIterator
. FileSystemIterator
(который RecursiveDirectoryIterator
расширяет) возвращает объект SplFileInfo
умолчанию. Вы можете влиять на то, что возвращается, через флаги
$files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $pathToFolder, FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_SELF));
Но в вашем случае вам не нужно тестировать, если элемент является точечным файлом. Просто установите FilesystemIterator::SKIP_DOTS
и они вообще не появятся. Обратите внимание, что это также поведение по умолчанию .