Pergunta

Por que meu script PHP está travado?

$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

Se eu excluir a última linha (iterator_count(...) e substitua-o por isto:

$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)
// ...

O $fileObject->eof() sempre retorna falso, então recebo um loop infinito.

Por que essas coisas estão acontecendo?Preciso obter uma contagem de linhas.

Foi útil?

Solução

Pelo que vejo no seu código, você está abrindo o arquivo com mode a nesta linha:

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

Quando você faz isso, é apenas escrito:

$fileObject->eof() precisa ler o arquivo, você deve abrir o arquivo com a+ para permitir leitura/gravação:

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

Ps:quer com a ou a+, o ponteiro vai para o final do arquivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top