$ file-> EOF () Restituzione sempre false quando si utilizza PHP's SPLFileObject
-
13-12-2019 - |
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.
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