2

我遇到了PHP 5.3.0版本中包含的 glob:// 流包装器的问题。我正在使用以下 PHP 版本:

带有 Suhosin-Patch (cli) 的 PHP 5.3.1-0.dotdeb.1(构建时间:2009 年 12 月 5 日 20:08:29) 版权所有 (c) 1997-2009 The PHP Group Zend Engine v2.3.0,版权所有 (c) 1998 -2009 Zend 科技

当我尝试从 PHP.net 网站执行以下示例时:

<?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 文件名].php 的统计失败

在谷歌上搜索这个错误时,我发现一年前有人遇到了同样的问题,但看起来他们已经解决了。

所以...我的问题是:有人在使用 glob:// 包装器吗?难道我做错了什么?有同样问题的人吗?

注意:我已经知道我可以用其他不同的方式做同样的事情,但我想测试 glob:// 流包装器:)

4

3 回答 3

2

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

于 2010-02-17T12:33:08.093 回答
2

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

他们正在努力解决它;请参阅错误报告 #51068

谢谢大家的答案 :)

于 2010-02-18T09:16:29.323 回答
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);
}

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

于 2010-02-17T13:55:40.077 回答