マルチスレッド書き込みに対応したPHPファイルの書き込み方法:
Phpコード
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; }
flock(int $handle, int $operation) 関数で操作するハンドルは、開いているファイルポインタである必要があります。
operation は次の値のいずれかになります:
共有ロック (プログラムの読み取り) を取得するには、operation を LOCK_SH に設定します (PHP 4.0.1 より前のバージョンでは 1 に設定)。
排他ロックを取得するには(プログラムの書き込み)、operationをLOCK_EXに設定します(PHP 4.0.1より前のバージョンでは2に設定)。
ロック (共有または排他) を解放するには、操作を LOCK_UN に設定します (PHP 4.0.1 より前のバージョンでは 3 に設定)。
ロック時に flock() をブロックしたくない場合は、操作に LOCK_NB を追加します (PHP 4.0.1 より前のバージョンでは 4 に設定)。