$fichier->eof() retourne toujours false lors de l'utilisation de PHP SplFileObject
-
13-12-2019 - |
Question
Pourquoi mon script PHP en suspens?
$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
Si je supprime la dernière ligne (iterator_count(...
) et de le remplacer par ceci:
$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)
// ...
L' $fileObject->eof()
renvoie toujours false si je reçois une boucle infinie.
Pourquoi ces choses se produire?J'ai besoin d'obtenir un nombre de lignes.
La solution
Par ce que je vois dans votre code, vous ouvrez le fichier avec le mode a
à cette ligne:
$fileObject = $fileInfo->openFile('a');
Lorsque vous faites cela, son écriture seule:
$fileObject->eof()
besoin de lire le fichier, vous devez ouvrir le fichier avec a+
pour permettre la lecture/écriture:
$fileObject = $fileInfo->openFile('a+');
Ps:soit avec a
ou a+
, le pointeur va à la fin du fichier.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow