• ベストアンサー

ファイルロックの確認

PHPで掲示板を作っています。バージョンは5? (php.exeファイルのバージョンは5.2.1.1です。) ファイルロックについて、下記2点を教えてください。 同時書き込みによるログファイルの破損を防ぐため、ロック専用ファイルによるロックとアンロックの仕組みを作りました。 正常に稼動しているか、以下の方法でチェックしました。 1.ブラウザを2つ開く 2.両方とも書き込みボタンを押すだけの状態にする 3.両方のブラウザ(フォーム)の「書き込み」ボタンをすばやく続けてクリックする この方法だと、3で2個のボタンをクリックする間のタイムラグがあり、“同時”書き込みは難しいように思います。 他に方法があるのでしょうか? ////////// ロックファイル:lock/lock.php(755) --<?php --$lockfile = '.lock/lock.txt'; --$fp = fopen($lockfile,"w"); --flock($fp,LOCK_EX); --?> アンロックファイル:lock/unlock.php(755) --<?php --fclose($fp); --?> ロック用ファイル:lock.txt(644) ロックディレクトリ:lock(755) 動作ファイル:bbs.php --<?php --require_once './lock/lock.php'; --掲示板の処理 --require_once './lock/unlock.php'; --?> ロックのファイルを別ディレクトリに置くことは可能でしょうか? 可能であれば、パーミッションはどのようにすればいいのでしょうか? 現状、前述の方法でログが破損するかチェックしても異常ありません。 また、ロック関連の記述を削除してチェックしても異常ありませんので、ロックが正常に稼動しているのかどうか確認できない状態です。 PHPは始めたばかりですので、おかしなことを言っている箇所もあるかもしれませんが、宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ロックのテストをする時は専用のプログラムを書いた方が確実じゃないかな?と思います。 a.php <?php --require_once './lock/lock.php'; sleep(60); $fp = fopen("./test.log","a"); fwrite($fp,"A"); fclose($fp); --require_once './lock/unlock.php'; ?> b.php <?php --require_once './lock/lock.php'; $fp = fopen("./test.log","a"); fwrite($fp,"B"); fclose($fp); --require_once './lock/unlock.php'; ?> こんなんでテストできそうな気がしますがいかがでしょうか。

ka-kichi
質問者

お礼

ソースまでご提示いただき、ありがとうございます。 a.phpは、ロックして60秒待ち、test.logに「a」と書き込む。 b.phpは、遅延なく「b」と書き込む。 a.phpを実行した後、60秒以内にb.phpを実行すれば、同時アクセスが実現できる。 という解釈でいいのでしょうか? これを実行すると、a.phpはしばらく(60秒間)反応がなく、b.phpも反応がない。 60秒程待つと、a.phpの処理が終わり、その直後にb.phpの処理も終わる。 test.logを見ると、「ab」と記録されている。 この結果から、ロック機能が正常に働いていると考えていいのでしょうか? なにぶん素人なので、いまいち自信がありません。 宜しくお願いいたします。

関連するQ&A

専門家に質問してみよう