不一致的DirectoryIterator+;PHP中的Filtererator行为?
我编写了一个脚本,它使用来自标准PHP库(SPL)的FilterEditor类,我得到了不同的behabours accross PHP 5.x版本:(这里是accept()函数:不一致的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 (
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_标志显示_错误。没有出现错误:是的,这真的很奇怪…也许其他人可以插话。是的,它好像看到了文件夹内容,但没有实例化对象属性,因为它找到了:-?