我尝试做
<?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错误或我做错了什么?
答案 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)
count(iterator_to_array($i))
// return 0