http://www.phppro.jp/school/phpschool/vol27/2
いやぁ、勘違いしているようだ。。。
LOCK_SHすればwrite関数が実行できなくなるのと勘違いしてるのかな?
まぁ、それをLOCK_EXになおしてもflushしわすれてるので、綺麗にロックはかからない。
どーせ君らにロックの正しい理解は無理だ。
ロックはロックファイルを別につくってそれをLOCK_EXでロックしよう。
と最近おもいだした。。。。
だったらひたすらコピペで十分ミスしないから。
同時アクセスが多いときのスループットは最悪に悪いけどま、OKしょや
なので、スクリプトの先頭に以下をたして。
/*基本的にはデータを弄るスクリプトの最初でロック*/
$lfp=fopen("/some/where/lockfile","w");//ロックファイルは絶対パスで指定すること
if($lfp){エラー処理(スクリプトをちゃんと中断すること)}
if(! flock($lfp,LOCK_EX)){エラー処理(スクリプトをちゃんと中断すること)}
スクリプトの最後にこれを足す。
/*データを弄るPHPスクリプトの最後にアンロック*/
fclose($lfp);//ここでロック終了
適当にクラスをつくってコンストラクタでロックして、デストラクタでcloseして
そのインスタンスをPHPのauto prepend機能をつかって自動的によぶといいかも。
そうすればPHPが事実上シングルタスクでしか走らなくなので、
マルチタスクなプログラムを書けない人でも多少安心。
って皮肉ですよ~(たぶん)。
0 件のコメント:
コメントを投稿