SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【php】多重起動防止例

問題

phpの処理の多重起動を防止したい。

重複して同じ処理が複数実行されるのを防ぎたい。

php-logo

答え

以下のように、実行したいスクリプトのファイル自身のロックを取得できるかどうかで実現する方法がある。

先客がいて、ロックを他に取られていたら、「ロックを取得できませんでした」で終了する。

<?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);

関連するメモ

コメント