Подтвердить что ты не робот

Почему 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;            

        }       
}
4b9b3361

Ответ 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, и они вообще не появятся. Обратите внимание, что это также поведение по умолчанию.