不一致的DirectoryIterator+;PHP中的Filtererator行为?

不一致的DirectoryIterator+;PHP中的Filtererator行为?,php,spl,Php,Spl,我编写了一个脚本,它使用来自标准PHP库(SPL)的FilterEditor类,我得到了不同的behabours accross PHP 5.x版本:(这里是accept()函数: public function accept() { $current = $this->current(); print_r($current); return true; } 下面是PHP 5.3.1的输出: DirectoryIterator Object (

我编写了一个脚本,它使用来自标准PHP库(SPL)的FilterEditor类,我得到了不同的behabours accross 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] => 
)
下面是我在PHP5.2.5下使用相同代码得到的结果

DirectoryIterator Object
(
)
DirectoryIterator Object
(
)
DirectoryIterator Object
(
)
后者对所有文件拥有755权限。dat有什么问题?

来自PHP.net:

  • 注意:从PHP5.3.0开始,此扩展不能再被禁用,因此始终可用

可能您的PHP 5.2.5配置在某种程度上不完整/错误?您是否将错误日志级别设置为显示警告?如果没有,请调整它并再次运行代码,以查看它是否抛出任何警告…

看起来这实际上是正常的!在看似空的DirectoryIterator对象上调用方法有效。我遇到的问题是似乎PHP5.3克隆得很深,而5.2没有,所以每次迭代(或类似的事情)都会删除所有引用。这是一个丑陋的、没有文档记录的混乱:PHP糟透了!

是的,我看到了,但是这个类的存在意味着它必须正确安装,不是吗?所以我猜两个版本之间的实现肯定有某种变化。另外,它是在共享主机上,所以我无法控制它。我希望以“平均”的方式调试脚本服务器使其更健壮。另外,我的.htaccess文件上有php_标志显示_错误。没有出现错误:是的,这真的很奇怪…也许其他人可以插话。是的,它好像看到了文件夹内容,但没有实例化对象属性,因为它找到了:-?