PHP 5.3.1 glob://异常

时间:2010-02-17 11:54:39

标签: php glob

我遇到了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:)

3 个答案:

答案 0 :(得分:2)

错误信息非常清楚。它正在根目录中查找“/00.php”(注意斜杠)。我想你需要getPathName(http://www.php.net/manual/en/directoryiterator.getpathname.php)而不是getFileName

答案 1 :(得分:2)

我将此错误发送给PHP Bugs,他们确认这是当前的PHP 5.3.1错误。

他们正试图修复它;见Bug report #51068

谢谢大家的回答:)

答案 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);
}

我希望这可以帮助任何人尝试使用这个新的包装器。