ここでは、スクリプトの多重起動を防止する2つのサンプルを掲載しています。
スポンサーリンク
ロックファイルを使用する
あるファイルが存在するか、しないかで既に起動されているか否かを判断して多重起動の防止を行うサンプルです。
// 作成するファイル名の指定
$lock_file = __DIR__ . '/lock.txt';
// ファイルの存在確認
if( file_exists($lock_file) ){
echo "多重起動はできません。\n";
// スクリプトを終了する
exit(0);
}
// 多重起動防止用ロックファイル作成
touch( $lock_file );
echo "スクリプト開始\n";
// 何か処理する
sleep(3);
echo "スクリプト終了\n";
// ロックファイルの削除
unlink( $lock_file );
セマフォを利用する ( Windows では使用不可 )
次は、セマフォを利用した多重起動の防止例です。ただし、下記サンプルは多重起動の防止ではなく 排他制御になっています。最初のスクリプトが終了(セマフォを開放)した時点で、次に起動されたスクリプトが開始することになります。ロックファイルを使用したサンプルコードとの違いに注意してください。なお、デフォルトではセマフォ関数は使用できませんので、使用できない場合は PHP をリコンパイルする必要があります。セマフォが無効の場合には、「PHP Fatal error: Call to undefined function sem_get() in ・・」とエラー出力されます。
// セマフォを取得 $sid = sem_get(884); $res = sem_acquire($sid); print "スクリプト開始\n"; // 何か処理する sleep(3); print "スクリプト終了\n"; // セマフォを解放 sem_release($res);
参考