我遇到了PHP 5.3.0版本中包含的glob://流包装器的问题。我正在使用以下PHP版本:
PHP 5.3.1-0.dotdeb.1 with Suhosin-Patch(cli)(建于12月5日 2009 20:08:29)版权所有(c) 1997-2009 PHP Group Zend Engine v2.3.0,版权所有(c)1998-2009 Zend 技术
当我尝试从PHP.net网站执行以下example时:
<?php
// Loop over all *.php files in ext/spl/examples/ directory
// and print the filename and its size
$it = new DirectoryIterator("glob://*.php");
foreach($it as $f) {
printf("%s: %.1FK\n", $f->getFilename(), $f->getSize()/1024);
}
?>
请注意,我从原始示例中删除了该文件夹,只留下了php扩展名
我收到PHP错误,并显示以下消息:
SplFileInfo :: getSize():[第一个php文件名]的stat失败.php
在谷歌搜索此错误时,我发现有人在一年前有same problem,但看起来他们已经修好了。
所以...我的问题是:任何人都在使用glob://包装器?难道我做错了什么?有同样问题的人吗?
注意:我已经知道我可以用其他不同的方式做同样的事情,但我想测试一下glob:// stream wrapper:)
答案 0 :(得分:2)
错误信息非常清楚。它正在根目录中查找“/00.php”(注意斜杠)。我想你需要getPathName(http://www.php.net/manual/en/directoryiterator.getpathname.php)而不是getFileName
答案 1 :(得分:2)
答案 2 :(得分:0)
我发现了这个问题:glob://看起来只是接受完整路径或相对路径而不接受当前路径。
例如,要检索我需要使用的当前路径:
$it = new DirectoryIterator("glob:///home/pedro/public_html/*");
foreach($it as $f) {
printf("%s: %.1FK<br />", $f->getFilename(), $f->getSize()/1024);
}
但我无法使用glob:// *查询来获取所有当前文件夹文件和文件夹。
但是我可以使用相对路径进行子文件夹搜索:
$it = new DirectoryIterator("glob://subfolder/*");
foreach($it as $f) {
printf("%s: %.1FK<br />", $f->getFilename(), $f->getSize()/1024);
}
我希望这可以帮助任何人尝试使用这个新的包装器。