Domanda

Perché il mio script PHP è appeso?

$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 elimino l'ultima riga (iterator_count(...) e lo sostituisci con questo:

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

Il $fileObject->eof() restituisce sempre falso in modo da ottenere un ciclo infinito.

Perché queste cose stanno accadendo?Ho bisogno di ottenere un conteggio della linea.

È stato utile?

Soluzione

Con ciò che vedo nel tuo codice, stai aprendo il file con la modalità a a questa riga:

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

Quando lo fai, è solo la sua scrittura:

$fileObject->eof() deve leggere il file, è necessario aprire il file con a+ per consentire la lettura / scrittura:

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


.

PS: con a o a+, il puntatore va alla fine del file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top