PHP で CGI の排他ロック
2017-05-11 作成 福島
2020-08-08 更新 福島
2022-11-22 更新 福島
TOP > cgi > php-exlock
排他ロックなんて、いまさら公開するまでも無いですが、無くすたびに思い出すのが面倒なのでここに書いておきます。
ちなみに、ロックファイルにはディレクトリを使用しているので Unix、Windows を問わず使えます。
また、以前掲載した Python 用排他ロックと連携することもできます。
商用/非商用を問わず、自由にコピーして使ってください。

最近、サーバにも SSD を使うことが増えてきました。
SSD のシステムではストレージに負荷をかけないよう、ロックファイルの保存先として
Linux では tmpfs を、Windows では RAM ディスクを使用してください。

exLock.php
HTML で記述しています。
リンク先を表示し、テキストをコピーして使ってください。

使い方は、./lock_tmp/ (パーミッション: 777) というディレクトリの中にロックファイルを作成すると仮定して、こんな感じ
require_once('./exLock.php') ;

$lock = new exLock("./lock_tmp/lockDir.LCK") ;

$lock_success = $lock->Lock() ;
if ($lock_success == True) {

	// ロック中に実行する処理
}
$lock->UnLock() ;        // -- 必須 (A)
(A) は CGI の場合、プロセスの終了時にデストラクタが呼ばれるはずが、
なぜか呼ばれないので明示的に記述する必要があるという意味です。
CGI でなく、コマンドラインやデーモン呼び出しの場合はデストラクタが呼ばれます。