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.

Était-ce utile?

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
scroll top