$file->;eof()在使用PHP';SplFileObject

$file->;eof()在使用PHP';SplFileObject,php,fwrite,eof,splfileobject,Php,Fwrite,Eof,Splfileobject,为什么我的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_ge

为什么我的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
如果删除最后一行(
迭代器计数(…
),并将其替换为以下内容:

$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+');


Ps:无论是使用
a
还是
a+
,指针都会指向文件的结尾。

即使我在“r”模式下创建了第二个SplFileObject,也会发生这种情况。您已经回答了这个问题,谢谢。我已经为我真正的问题创建了一张新票据: