为什么我的 PHP 脚本挂起?

$path = tempnam(sys_get_temp_dir(), '').'.txt';
$fileInfo = new \SplFileInfo($path);
$fileObject = $fileInfo->openFile('a');
$fileObject->fwrite("test line\n");
var_dump(file_exists($path));          // bool(true)
var_dump(file_get_contents($path));    // string(10) "test line
                                       // "
var_dump(iterator_count($fileObject)); // Hangs on this

如果我删除最后一行(iterator_count(...)并将其替换为:

$i = 0;
$fileObject->rewind();
while (!$fileObject->eof()) {
    var_dump($fileObject->eof());
    var_dump($i++);
    $fileObject->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 所以我得到一个无限循环。

为什么会发生这些事情?我需要得到行数。

有帮助吗?

解决方案

根据我在您的代码中看到的情况,您正在使用模式打开文件 a 在这一行:

$fileObject = $fileInfo->openFile('a');

当你这样做时,它只写:

$fileObject->eof() 需要读取文件,您应该使用以下命令打开文件 a+ 允许读/写:

$fileObject = $fileInfo->openFile('a+');

附:要么与 a 或者 a+, ,指针指向文件末尾。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top