GlobIterator没有找到文件php 5.3.7+错误

时间:2014-03-11 08:26:47

标签: php

我尝试做

<?php
$i = new \GlobIterator('/test/file*.gz');
echo $i->count();

使用文件* .gz可能不存在。当没有找到文件时我得到了这个错误

  

致命错误:未捕获异常'LogicException',消息'未调用父构造函数:对象处于无效状态'在/ in / qHHhR中:3   堆栈跟踪:   0 / in / qHHhR(3):SplFileInfo-&gt; _bad_state_ex()

正如您在http://3v4l.org/qHHhR所见,它不仅仅是5.3.7 +

PHP错误或我做错了什么?

3 个答案:

答案 0 :(得分:0)

好吧,因为CBroe说这是一个php bug。

解决方案(在https://bugs.php.net/bug.php?id=55701上找到)是这样做的:

// Next works as expected: no xml files found = no output
foreach (new GlobIterator($path_to_files . '/*.xml') as $fileinfo) {
    echo $fileinfo->getFilename() . "\n";
}

$it = new GlobIterator($path_to_files . '/*.xml');
// Expected result: count = 0
// Instead next line will crash php if no xml files are found
if ($it->count()) {
    // do something...
}

答案 1 :(得分:0)

另一种看起来更干净的方法:

try {
  $count = $i->count();
} catch ( \LogicException $e) {
  $count = 0;
}

答案 2 :(得分:0)

使用iterator_to_array

的另一种方法
count(iterator_to_array($i))
// return 0