【问题标题】:inconsistent DirectoryIterator+FilterIterator behaviour in PHP?PHP 中不一致的 DirectoryIterator+FilterIterator 行为?
【发布时间】:2010-01-18 16:48:12
【问题描述】:

我编写了一个使用来自标准 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 权限。怎么了?

【问题讨论】:

    标签: php spl


    【解决方案1】:

    好像这样其实没问题!在看似空的 DirectoryIterator 对象上调用方法有效。我遇到的问题在其他地方,与克隆这些对象有关。似乎 PHP 5.3 克隆很深,而 5.2 没有,所以所有引用在每次迭代(或类似的东西)时都会被杀死。这是一个丑陋的、没有记录的混乱:PHP 糟透了!

    【讨论】:

      【解决方案2】:

      来自 PHP.net:

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

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

      【讨论】:

      • 是的,我看到了,但是 Class 存在的事实意味着它必须正确安装,不是吗?所以我猜测版本之间的实现必须有某种变化。此外,它在共享主机上,所以我无法控制它。我希望在“普通”服务器中调试脚本以使其更加健壮。
      • aslo,我的 .htaccess 文件上有 php_flag display_errors。没有错误出现:
      • 是的,这真的很奇怪......也许其他人可以插话。
      • 是的,它好像看到了文件夹内容,但没有实例化它找到的对象属性:-?
      猜你喜欢
      • 2012-09-09
      • 2011-01-10
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 2021-02-19
      • 2019-07-15
      • 2015-01-28
      • 1970-01-01
      相关资源
      最近更新 更多