2010-01-18 60 views
1

我寫的是使用來自標準PHP庫(SPL)的FilterIterator類的腳本,我得到不同的behabours翻過PHP 5.x版本:(這裏accept()函數:PHP中的DirectoryIterator + FilterIterator行爲不一致?

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在所有文件上。怎麼了dat?

回答

2

好像這實際上是OK!調用看似空的DirectoryIterator對象的方法。我遇到的問題在其他地方,並且與克隆這些對象有關。似乎深度PHP 5.3的克隆,而5.2並不是所有的引用都會在每次迭代中被殺死(或類似的東西)。它是一個醜陋的,沒有記錄的混亂:PHP糟透了!

0

從PHP.net:

  • 注:自PHP 5.3.0的這個擴展可以不再被禁止,因此始終可用。

也許是你的PHP 5.2.5配置在某種程度上是不完整/錯了嗎?你有錯誤日誌水平設置爲顯示警告?如果不是,調整並再次運行代碼,看看它扔任何警告...

+0

是的,我看到了,但類存在的事實意味着__必須正確安裝,否?所以我猜測版本之間的實現必須有某種改變。 另外,它的共享主機,所以我不能控制它。我希望在「平均」服務器上調試腳本以使其更加健壯。 – CpILL 2010-01-18 18:44:33

+0

aslo,我有 php_flag display_errors在我的.htaccess文件上 。沒有錯誤出現:< – CpILL 2010-01-18 18:46:28

+0

是的,這真的很奇怪......也許別人可以參與進來。 – 2010-01-18 19:20:30