Frage

Warum hängt mein PHP-Skript?

$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

Wenn ich die letzte Zeile lösche (iterator_count(...) und ersetzen Sie es durch Folgendes:

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

Der $fileObject->eof() Gibt immer false zurück, sodass ich eine Endlosschleife erhalte.

Warum passieren diese Dinge?Ich muss eine Zeilenanzahl ermitteln.

War es hilfreich?

Lösung

Wie ich in Ihrem Code sehe, öffnen Sie die Datei im Modus a in dieser Zeile:

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

Wenn Sie das tun, wird nur Folgendes geschrieben:

$fileObject->eof() Wenn Sie die Datei lesen müssen, sollten Sie die Datei mit öffnen a+ um Lesen/Schreiben zu erlauben:

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

Ps:entweder mit a oder a+, der Zeiger geht zum Ende der Datei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top