我编写了一个使用来自标准 PHP 库 (SPL) 的 FilterIterator 类的脚本,并且在 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 权限。数据怎么了?

有帮助吗?

解决方案

好像这实际上是OK!呼吁看似空DirectoryIterator方法的对象的作品。我遇到的问题是在其他地方,并与克隆这些对象做。似乎PHP 5.3克隆深而5.2不这么所有引用被打死在每次迭代(或类似的东西)。它的丑陋,未记载的混乱:PHP吮吸

其他提示

来自 PHP.net:

  • 笔记:从 PHP 5.3.0 开始,此扩展无法再被禁用,因此始终可用。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top