Почему isDot() терпит неудачу? (PHP)
Я завершаю сегмент кода, в котором перечислены файлы в каталоге. У меня нет проблем с перечислением файлов в каталоге, но по какой-то причине я могу заставить метод 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;
}
}
Ответы
Ответ 1
Это потому, что DirectoryIterator::current()
(метод, вызывающий внутри foreach
-loop) возвращает объект, который сам по себе имеет тип DirectoryIterator
. FileSystemIterator
(что RecursiveDirectoryIterator
extends) возвращает объект SplFileInfo
по умолчанию. Вы можете влиять на то, что возвращается, через флаги
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator(
$pathToFolder,
FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_SELF));
Но в вашем случае вам не нужно тестировать, если элемент является точечным файлом. Просто установите FilesystemIterator::SKIP_DOTS
, и они вообще не появятся. Обратите внимание, что это также поведение по умолчанию.