PHP file writing method, coping with multi-threaded writing:
Php code
function file_write($file_name, $text, $mode='a', $timeout=30){ $handle = fopen($file_name, $mode); while($timeout>0){ if ( flock($handle, LOCK_EX) ) { $timeout--; sleep(1); } } if ( $timeout > 0 ){ fwrite($handle, $text.'\n'); flock($handle, LOCK_UN); fclose($handle); return true; } return false; }
The handle operated by flock(int $handle, int $operation) function must be an open file pointer.
operation can be one of the following values:
To obtain a shared lock (reading program), set operation to LOCK_SH (set to 1 in versions prior to PHP 4.0.1).
To obtain an exclusive lock (writing program), set operation to LOCK_EX (set to 2 in versions prior to PHP 4.0.1).
To release a lock (whether shared or exclusive), set operation to LOCK_UN (set to 3 in versions prior to PHP 4.0.1).
If you don’t want flock() to block when locked, add LOCK_NB to operation (set to 4 in versions before PHP 4.0.1).