$file->eof() всегда возвращает false при использовании PHP SplFileObject
-
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