Felix Riesterer: PHP flock() mit race condition gelöst?

Beitrag lesen

Liebe Selfer,

habe mir was überlegt und möchte eure Meinung wissen. Mein Vorschlag zu obigem Problem:

Man flock()ed nicht die eigentlich zu bearbeitende Datei, sondern legt eine Dummy-Datei auf dem Server ab, die dort auch verbleibt. Wenn diese Datei geflock()ed ist, dann muss das Script warten, bis sie wieder freigegeben wird. Das soll Lesezugriffe à la $f=file() vermeiden, da dadurch in einer race condition möglicherweise Daten verloren gehen könnten. Meine Dummy-Datei heißt "post.lock".

$lockdatei = "post.lock";
$datendatei = "daten.dat";
flock($lockdatei, LOCK_EX);

$gaestebuch = file($datendatei);

// $gaestebuch wird modifiziert

$schreibdatei = fopen($datendatei, "wb");
foreach($gaestebuch as $schreibwert) fputs($schreibdatei, trim($schreibwert)."\r\n");
fclose($datei);

fclose($lock);

Was meint ihr? Habe ich eine mögliche race condition damit etwas entschärft?

Liebe Grüße aus Ellwangen,

Felix Riesterer.