PHPプログラムに関する各種メモ書き

PHPで安全なファイルロック

PHPでファイルロック(排他制御)をするのは標準の flock 関数が簡単で有効です。
しかし flock関数はサーバーによっては正常動作しない(排他制御が出来ない、またはロックしたままプロセスが死 ぬとロック解除が出来ない)ことがまれにあります。(サーバーによります。)
ですのでPHPスクリプトをアップロードする先のサーバーが flock が正常に動作するか毎回確認しないといけませ ん。
また flock関数ではロックのトライ時間(タイムアウト時間)を自由に設定することができません。
そこで Perlメモ( http://is.gd/cKqS11 )の有名なファイルリネーム方式のファイルロックを採用します。
すでにPHPに移植されている方がいるのでそこから引用( http://is.gd/rj4aOc )

● ダウンロード

https://pgmemo.tokyo/data/filedir/834_3.zip

● 使い方

require_once('exfilelock.php');
$exfl = new exfilelock();
$exfl->flock() or die('ERROR : LOCK ERROR');

// ここに排他制御して実行したい何かしらの処理を記述

$exfl->unflock() or die('ERROR : UNLOCK ERROR');

**ファイルロックのテストスクリプト

test_filelock.php:ロックを使ったカウンターアップのテスト

ファイルを解凍してできるディレクトリ「data」「lockdir」のパーミッションを777にして abで同時に100並列実行します。 カウンターが正常に10000までいけばOK。

ab -n 100 -c 100 http://mitoite.net/test/php_mailform/php_mailform.php?cmd=append_imap

関連エントリー

添付ファイル1
添付ファイル2
No.834
05/12 13:48

edit

添付ファイル

ファイル