противоречивое поведение DirectoryIterator+FilterIterator в PHP?

StackOverflow https://stackoverflow.com/questions/2087648

  •  21-09-2019
  •  | 
  •  

Вопрос

Я написал сценарий, использующий класс FilterIterator из стандартной библиотеки PHP (SPL), и в версиях PHP 5.x я получаю разные варианты поведения :( Здесь функция Accept():

public function accept()
{   
$current = $this->current();
print_r($current);      

    return true;
}   

и вот его вывод для PHP 5.3.1:

DirectoryIterator Object
(
    [pathName:SplFileInfo:private] => /Users/alex/Sites/dev/php/fscms/content/.
    [fileName:SplFileInfo:private] => .
    [glob:DirectoryIterator:private] => 
    [subPathName:RecursiveDirectoryIterator:private] => 
)
DirectoryIterator Object
(
    [pathName:SplFileInfo:private] => /Users/alex/Sites/dev/php/fscms/content/..
    [fileName:SplFileInfo:private] => ..
    [glob:DirectoryIterator:private] => 
    [subPathName:RecursiveDirectoryIterator:private] => 
)
DirectoryIterator Object
(
    [pathName:SplFileInfo:private] => /Users/alex/Sites/dev/php/fscms/content/.DS_Store
    [fileName:SplFileInfo:private] => .DS_Store
    [glob:DirectoryIterator:private] => 
    [subPathName:RecursiveDirectoryIterator:private] => 
)

и вот что я получаю с тем же кодом в PHP 5.2.5

DirectoryIterator Object
(
)
DirectoryIterator Object
(
)
DirectoryIterator Object
(
)

Последний имеет разрешение 755 на все файлы.Что с этим?

Это было полезно?

Решение

Кажется, это действительно нормально!Вызов методов для, казалось бы, пустых объектов DirectoryIterator работает.Проблемы, с которыми я столкнулся, были в другом месте и были связаны с клонированием этих объектов.Кажется, PHP 5.3 клонирует глубоко, а 5.2 - нет, поэтому все ссылки уничтожаются на каждой итерации (или что-то в этом роде).Это уродливый, недокументированный беспорядок:PHP отстой!

Другие советы

Из PHP.net:

  • Примечание:Начиная с PHP 5.3.0 это расширение больше нельзя отключить, поэтому оно всегда доступно.

Возможно, ваша конфигурация PHP 5.2.5 в чем-то неполная/неправильная?Установлен ли у вас уровень журнала ошибок для отображения предупреждений?Если нет, настройте его и запустите код еще раз, чтобы увидеть, выдает ли он какие-либо предупреждения...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top