【php】多重起動防止例
問題
phpの処理の多重起動を防止したい。
重複して同じ処理が複数実行されるのを防ぎたい。
答え
以下のように、実行したいスクリプトのファイル自身のロックを取得できるかどうかで実現する方法がある。
先客がいて、ロックを他に取られていたら、「ロックを取得できませんでした」で終了する。
<?php $fp = fopen(__FILE__, "r"); if (!is_resource($fp)) { echo 'ファイルを開けませんでした' . "\n"; exit(); } if (!flock($fp, LOCK_EX | LOCK_NB, $wouldblock)) { echo 'ロックを取得できませんでした' . "\n"; exit(); } //以下、ロックを取得できた時だけ処理続行 echo 'pid:' . getmypid() . "\n"; echo 'ロックを取得できました' . "\n"; //sleepを入れて、複数のブラウザからアクセスしたり、コマンドラインで複数実行しようとしてみるとよい sleep(10);
コメント