17.Jan 2007
Gleichzeitiger Schreibzugriff auf eine Datei
Das Beschreiben z.B einer Logdatei mit einer in PHP geschriebenen Webanwendung ist nicht ungefährlich: tritt dabei eine race condition auf, kann auch eine mit flock() blockierte Datei leicht zerstoert werden. Die Lösung dieses Problems läuft über eine zusätzliche angelegten Lock-Datei:
function logData( $filename, $data )
{
$lockhandle = fopen( $filename . ".lock", "w" );
if( flock( $lockhandle, LOCK_EX + LOCK_NB ) ) {
$filehandle = fopen( $filename, "a+" );
fwrite( $filehandle, $data );
fclose( $filehandle );
flock( $lockhandle, LOCK_UN );
fclose( $lockhandle );
return true;
}
return false;
}