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;
}