- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ロック専用ファイルについて)
ロック専用ファイルの使用について
このQ&Aのポイント
- 掲示板とカウンターの2つのコードを同じページに組み込む場合、ロック専用ファイルを使用して一時的な排他制御を行うことができます。
- flock()関数を使用してロック専用ファイルを開始し、その間に他の人のアクセスは待機され、自分の番が来るまで処理は進みません。
- ロック解除が行われた後には、他のPHP処理は通常通り進みます。しかし、カウンター用のロック専用ファイルは掲示板用のものとは別に準備する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
繰り返し処理とか条件判断がない場合、プログラムは最初から順番に処理して、勝手に飛ばしたりしないというのはおわかりでしょうか? echo "a"; sleep(10); echo "b"; だと、a を表示して 10秒後に b が表示されます。10秒間、このプログラムは停止するというのは理解できますか? flock($lock_fp,LOCK_EX); で、ロックが取れない場合、flockが終了しない以上、そのプログラムの他の処理は実行されません。flockの処理が完了し次第(つまりロックが取れた場合)、その次の処理が実行されます。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
回答No.1
flock(~,LOCK_EX); で、ロックが成功するまで「ブロックされる」という説明があると思いますが、ブロックされるというのは待ちになると言うことです。つまり、flock関数を呼び出すと、ロックが成功するまで戻ってきません。そのプログラムの処理が一時停止してしまうわけです。
質問者
お礼
ご回答ありがとうございます。私の質問本文と同じ内容で恐縮ですが、一時停止してしまう 「そのプログラムの処理」というのはどこからどこまでを指すのでしょうか? flock(~,LOCK_EX)以降全部ですか?それともそのロックが解除される「行」までですか?
質問者
補足
私のケースの場合、サーバーに上げるロック専用ファイルは1つで良いのでしょうか? それとも2つ、異なるファイル名のものを置く必要がありますか?
お礼
if文のようにflockからそれが解除される行までを飛ばしてしまうのかどうかが疑問だったので、ご説明のおかげでそこで完全にストップしてしまうということがわかり、助かりました。 ということは、lock.txtは一つで良さそうですね。ありがとうございました!