PHP tutarsız DirectoryIterator + FilterIterator davranış?

2 Cevap php

Ben Standart PHP Kütüphanesi (SPL) gelen FilterIterator sınıfını kullanarak bir senaryo yazdı ve PHP 5.x sürümlerinde genelinde farklı behabours olsun: (Burada () işlevini kabul:

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

    return true;
}   

ve heres PHP için çıkış 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] => 
)

ve heres ne PHP 5.2.5 altında aynı kodla olsun

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

İkincisi tüm dosyalar izni 755 sahiptir. Nedir dat ile?

2 Cevap

Bu aslında ok gibi görünüyor! Görünüşte boş DirectoryIterator yöntemleri çağırmadan eserler nesneleri. Ben olmamdı konular başka olduğunu ve bu nesneleri klonlama ile yapmak zorunda. PHP 5.3 klonlar görünüyor derin 5.2 bütün referanslar her tekrarında (ya da buna benzer bir şey) üzerinde öldürdü alamadım bunu yaparken. Onun çirkin, un-belgelenmiş mess: PHP berbat!

PHP.net Gönderen:

  • Not: PHP 5.3.0 'dan itibaren bu eklenti artık devre dışı bırakılabilir ve bu nedenle her zaman mevcut olabilir.

Muhtemelen PHP 5.2.5 yapılandırma eksik / yanlış bir şekilde mi? Hata günlüğü leve uyarıları görüntülemek için ayarlanmış sen var mı? Değilse, onun herhangi bir uyarı atma görmek için ayarlayabilir ve tekrar kod çalıştırmak ...