$ file-> eof()在使用PHP的SplFileObject时总是返回false

时间:2012-07-29 01:32:50

标签: 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_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,所以我得到一个无限循环。

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

1 个答案:

答案 0 :(得分:2)

根据我在代码中看到的内容,您在此行打开文件a

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

当你这样做时,它只写:

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

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

Ps:无论是a还是a+,指针都会移到文件的末尾。