Почему isDot () не работает на меня? (PHP) - PullRequest
11 голосов
/ 14 июня 2011

Я завершаю сегмент кода, в котором перечислены файлы в каталоге. У меня нет проблем с перечислением файлов в каталоге, но по какой-то причине я могу заставить метод 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 Ответ

30 голосов
/ 14 июня 2011

Это потому, что DirectoryIterator::current() (метод, то есть вызов внутри foreach -loop) возвращает объект, который сам по себе имеет тип DirectoryIterator.FileSystemIterator (что расширяет RecursiveDirectoryIterator) возвращает объект SplFileInfo по умолчанию.Вы можете повлиять на возвращаемое значение с помощью flags

$files = new RecursiveIteratorIterator(
  new RecursiveDirectoryIterator(
    $pathToFolder,
    FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_SELF));

Но в вашем случае вам не нужно проверять, является ли элемент точечным файлом.Просто установите FilesystemIterator::SKIP_DOTS, и они не появятся вообще.Обратите внимание, что это также поведение по умолчанию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...