Thread [PHP] mehrfaches Schreiben in eine Logdatei bei mehreren gleichzeitigen Zugriffen? (9 answers)
Opened by Gast at 2008-10-28 14:23

Gast Gast
 2008-11-08 02:26
#116094 #116094
Gast+2008-10-28 17:54:38--
Schon mal davon gehört, dass beim Schreiben auch die Datei gesperrt werden muss, damit nicht zwei Prozesse gleichzeitig das Log zerhauen?

Vielen dank für den Linkhinweis.

Nein, ich wusste davon nichts, habe es nur vermutet, allerdings ohne Beweis.

Nun weiss ich zwar immernoch nichts genaues, habe aber auf der Seite in den Codebeispielen die ein Beispiel (Klasse: SafeWriter) für verzögertes Schreiben im Falle einer gesperrten Datei gefunden.
Da ich Klassenprogrammierung nicht kenne habe ich eine normale Funktion daraus gemacht, eingebunden und schreibe nun so das log:

Code: (dl )
writeLog("log-datei.log","a+", $datum."\n".$APO."\n");


Die Funktion sieht so aus:
[php]<?php
// suggested mode 'a' for writing to the end of the file
function writeLog($path, $mode, $data)
{
$fp = fopen($path, $mode);
$retries = 0;
$max_retries = 30;
if (!$fp) {
// failure
return false;
}
// keep trying to get a lock as long as possible
do {
if ($retries > 0) {
usleep(rand(1, 10000));
}
$retries += 1;
} while (!flock($fp, LOCK_EX) and $retries <= $max_retries);
// couldn't get the lock, give up
if ($retries == $max_retries) {
// failure
return false;
}
// got the lock, write the data
fwrite($fp, "$data");
// release the lock
flock($fp, LOCK_UN);
fclose($fp);
// success
return true;
}
?>[/php]
Sehe ich das richtig, das, falls das Script (innerhalb der index.php) von 2 Browsern gleichzeitig aufgerufen wird und eine Instanz die log-datei sperrt, die andere Instanz des Scriptes einfach solange wartet, bis es die log-datei entsprerrt vorfindet und dann schreibt?

//Modedit GwenDragon: PHP-Code in PHP-Boardtags gestellt

View full thread [PHP] mehrfaches Schreiben in eine Logdatei bei mehreren gleichzeitigen Zugriffen?