久しぶりにPHPネタ
同時に実行されたら困るような処理を手軽に実装するときにロックファイルを利用するけど、何かで転けてファイルが削除されない場合とかに面倒(FATAL Errorだと終了処理になってしまいtry catchとかで削除処理を書いても処理が走らない)
PHPでは、エラーでも何でも終了処理するときに実行されるコードを登録するのに、register_shutdown_functionと言うのがあるので、これを使ってやると都合が良い。
1 2 3 4 5 6 7 8 9 10 11 |
define('LOCKFILE', '/tmp/user.lock'); if(file_exists(LOCKFILE)) exit(1); touch(LOCKFILE); register_shutdown_function(function(){ @unlink(LOCKFILE); }); ・・・処理本体 |
みたいな感じで実装する。
ロックファイルがあるか確認して、あれば異常終了する。
ロックファイルを作成する。
ロックファイルを削除する終了関数を登録する。
この手順以降では、エラー時にもexitとかで終了させても勝手にロックファイルが削除される。
(386)