Hello,
Ich habe mal 2 Scripte mit Zugriff auf die Datei gleichzeitig laufen lassen.
Es ist schon besser flock() zu verwenden, wenn im Log mehrere Fehlermeldungen verschiedener Prozesse gespeichert werden sollen, also sortiert:
Wie sollen die denn sortiert werden? Es wird beim Filemode 'ab+' immer ein Schreibauftrag nach dem nächsten ausgeführt. Die werden erst beendet, bevor der nächste an die Reihe kommt. Man darf den Schreibauftrag selber dafür selbstverständlich nicht als Schleife ausführen, sondern muss den gesamten Stream in eins in Auftrag geben! Bei mehreren "Zeilen" also erst alle zusammenbauen zu einem Stream und dann erst in Auftrag geben.
$this->getLogPath();
$file = fopen( $this->logPath, 'ab+' );
flock( $file, LOCK_EX );
fwrite( $file, $this->logMessage );
flock( $file, LOCK_UN );
Das LOCK_UN _musst_ Du dir schenken. Durch fclose() wird das File auch entsperrt, und zwar in einem abgeschlossenen Auftrag (atomarisiert).
fclose( $file );
Sonst müsstest Du der Ordnung halber vor dem Entsperren noch ein Flush() auslösen, damit ggf. benutzte Buffer vor dem Entsperren noch in Richtung Datei geleert werden.
Das übernimmt fclose() aber schon und es besteht bei ausschließlicher Benutztung von fclose() nicht die Gefahr, dass man dann doch in der zeitlichen Abfolge der unterschiedlichen Teilprozesse etwas durcheinander bringt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg