PHPでファイルロック(排他制御)をするのは標準の flock 関数が簡単で有効です。
しかし flock関数はサーバーによっては正常動作しない(排他制御が出来ない、またはロックしたままプロセスが死
ぬとロック解除が出来ない)ことがまれにあります。(サーバーによります。)
ですのでPHPスクリプトをアップロードする先のサーバーが flock が正常に動作するか毎回確認しないといけませ
ん。
また flock関数ではロックのトライ時間(タイムアウト時間)を自由に設定することができません。
そこで Perlメモ( http://is.gd/cKqS11 )の有名なファイルリネーム方式のファイルロックを採用します。
すでにPHPに移植されている方がいるのでそこから引用( http://is.gd/rj4aOc )
https://pgmemo.tokyo/data/filedir/834_3.zip
require_once('exfilelock.php');
$exfl = new exfilelock();
$exfl->flock() or die('ERROR : LOCK ERROR');
// ここに排他制御して実行したい何かしらの処理を記述
$exfl->unflock() or die('ERROR : UNLOCK ERROR');
**ファイルロックのテストスクリプト
test_filelock.php:ロックを使ったカウンターアップのテスト
ファイルを解凍してできるディレクトリ「data」「lockdir」のパーミッションを777にして abで同時に100並列実行します。 カウンターが正常に10000までいけばOK。
ab -n 100 -c 100 http://mitoite.net/test/php_mailform/php_mailform.php?cmd=append_imap