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

StackOverflow https://stackoverflow.com//questions/11705950

  •  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+, указатель переходит в конец файла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top