• ベストアンサー

掲示板を作るにあたり、ロックをすべき箇所は?

ログファイルに書き込むためにファイルをopenする前に、ロック処理をする、というのはわかるのですが、ファイルを読み込むのみの場合(書き込まない場合)はopenする前にロックをする必要はありますか? フリーで配布されているスクリプトを見ていると、(掲示板の記事を表示する際に、ログファイルを参照するとき)ロックしていない場合がほとんどのように見えるのですがこれはなぜですか? 読み込む最中にときに誰かが書き込んでしまった場合、これでは読み込んだ側は誤ったものを読み込んでしまいませんか? ログファイルが壊れなければいい、と解釈してしまっていいでしょうか? それとできれば題名に書いたことを教えてくださるとうれしいです。 あと今作成中の掲示板のログファイルとして、 書き込まれた記事の最新番号、掲示板のカウンタ、最後に訪れたIP、を保存する count.dat(たとえばファイル内容は"43<>245<>218.xxx.yy.zz") と、記事のログを保存する bbs.logを用意しています。 つまり、新しく記事を書き込むときは、count.dat と bbs.logを両方openし、書き込むという作業をします。 これは効率は悪い方法でしょうか?

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

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

no.1と内容がかぶって申し訳ないですが、 >読み込みの際のロック 一般論として必要ありません。 ログが壊れることは無い、 表示が乱れる可能性は低い(よほどアクセスが多いなら別) 表示が乱れてもリロードすれば済む というのが主な理由です。 ただ、別にロックしてはいけないわけではありません。 ロックした方が丁寧です。 (ロックするのも面倒だという理由も大きいかもしれません(^^;) >count.dat と bbs.logを両方openし、 問題ありません。 並列して開くだけではさして負担はかかりませんので。 ロック 必要なファイルを開く データの更新 書き込み処理 ロック終了(close) という流れになると思います。 気をつけることは、一つのロック中に、 二つとも読み込みや書き込みを行うことくらいでしょうか・・。 flockがきちんと動けば、 それほど複雑にはならないと思います。

arcsin
質問者

お礼

なるほど、これで安心して先に進めます^^ ありがとうございました

その他の回答 (1)

  • feininger
  • ベストアンサー率41% (74/180)
回答No.1

> ログファイルが壊れなければいい、と解釈してしまっていいでしょうか? CGIで表示する際には別にロックをかける必要はないと思いますよ。 万が一、表示がおかしくなったらリロードするでしょうし。 > つまり、新しく記事を書き込むときは、count.dat と bbs.logを両方openし、書き込むという作業をします。 > これは効率は悪い方法でしょうか? もしかすると count.datをopen→ローカル変数へ読み込み→処理→書き込み→変数を解放→bbs.logをopen・・・の方がメモリ消費を抑えられるかもしれませんが、そこまでシビアにしてどれくらい効果があるかは謎ですし、処理がシンプルになるほうを優先したほうが良いと思います。 表示する際はよいとして、書き込む際にはファイルを読み込む寸前でロックをかけたほうが気持ち安全かな? あと、count.datなどのデータファイルはcount.cgiなどにすると、直接データファイルを閲覧されそうになった時にCGIエラーを表示するだけで済むのでより安全かと。

arcsin
質問者

お礼

ありがとうございます。 count.cgiとする方法さっそくつかわせてもらいました^^ またよろしくおねがいします

関連するQ&A

専門家に質問してみよう