【发布时间】:2012-07-29 02:28:11
【问题描述】:
为什么我的 PHP 脚本挂了?
$path = tempnam(sys_get_temp_dir(), '').'.txt';
$fileInfo = new \SplFileInfo($path);
$fileObject = $fileInfo->openFile('a');
$fileObject->fwrite("test line\n");
$fileObject2 = $fileInfo->openFile('r');
var_dump(file_exists($path)); // bool(true)
var_dump(file_get_contents($path)); // string(10) "test line
// "
var_dump(iterator_count($fileObject2)); // Hangs on this
如果我删除最后一行 (iterator_count(...) 并将其替换为:
$i = 0;
$fileObject2->rewind();
while (!$fileObject2->eof()) {
var_dump($fileObject2->eof());
var_dump($i++);
$fileObject2->next();
}
// Output:
// bool(false)
// int(0)
// bool(false)
// int(1)
// bool(false)
// int(2)
// bool(false)
// int(3)
// bool(false)
// int(4)
// ...
$fileObject->eof() 总是返回 false,所以我得到一个无限循环。
为什么会发生这些事情?我需要计算行数。
【问题讨论】:
-
“测试行”是@你的文件的唯一行?
-
@Zuul 代码完全没有任何依赖关系。您可以按原样运行它。它会在您的临时目录中创建一个文件。
标签: php fwrite eof splfileobject