使用 PHP 的 SplFileObject 时 $file->eof() 总是返回 false
-
13-12-2019 - |
题
为什么我的 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+
, ,指针指向文件末尾。
不隶属于 StackOverflow