2010-01-18 2 views
1

я написал скрипт, который использует класс FilterIterator, который приходит от стандартной PHP Library (SPL), и я получаю различные behabours accross версии 5.x PHP :(Здесь функция принимает():непоследовательное поведение DirectoryIterator + FilterIterator в PHP?

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

    return true; 
} 

и Heres его выход для 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 для всех файлов. Что с этим?

ответ

2

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

0

От PHP.net:

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

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

+0

Да, я видел это, но тот факт, что класс существует, означает, что он установлен правильно, нет? Поэтому я предполагаю, что между версиями должно быть какое-то изменение. Кроме того, его на совместном хостинге, поэтому я не контролирую его. Я надеялся отладить скрипт на «среднем» сервере, чтобы сделать его более надежным. – CpILL

+0

aslo, у меня есть php_flag display_errors на на моем .htaccess файле. нет ошибок: < – CpILL

+0

Да, это действительно странно ... Может быть, кто-то еще может прослушивать. –