![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
ログファイルに書き込むためにファイルを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がきちんと動けば、
それほど複雑にはならないと思います。
No.1
- 回答日時:
> ログファイルが壊れなければいい、と解釈してしまっていいでしょうか?
CGIで表示する際には別にロックをかける必要はないと思いますよ。
万が一、表示がおかしくなったらリロードするでしょうし。
> つまり、新しく記事を書き込むときは、count.dat と bbs.logを両方openし、書き込むという作業をします。
> これは効率は悪い方法でしょうか?
もしかすると count.datをopen→ローカル変数へ読み込み→処理→書き込み→変数を解放→bbs.logをopen・・・の方がメモリ消費を抑えられるかもしれませんが、そこまでシビアにしてどれくらい効果があるかは謎ですし、処理がシンプルになるほうを優先したほうが良いと思います。
表示する際はよいとして、書き込む際にはファイルを読み込む寸前でロックをかけたほうが気持ち安全かな?
あと、count.datなどのデータファイルはcount.cgiなどにすると、直接データファイルを閲覧されそうになった時にCGIエラーを表示するだけで済むのでより安全かと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SSL・HTTPS 掲示板サイトへの書き込みができない件(ブラウザソフトを変えてもできない) 2 2022/11/20 10:48
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- JavaScript 読み込んだQRコードをフォームに受け渡したい 1 2023/05/18 11:18
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- 事件・犯罪 匿名掲示板で名前を出さずに名誉毀損されています。証拠として押さえて開示請求出来ますか? 1 2022/05/30 17:58
- 訴訟・裁判 某掲示板の管理人が自分は全く関与してない書き込みに、場所を提供したってことでものすごい賠償金をバック 2 2023/07/11 13:15
- その他(SNS・コミュニケーションサービス) ネットで誹謗中傷したつもりが無いのに誹謗中傷だと言われました。 私はとある男性アイドルを応援していて 5 2023/06/20 00:12
- その他(Microsoft Office) OneDrive Personalについて 1 2022/08/02 18:25
- 事件・犯罪 掲示板の書き込みで、直前に書かれた煽りに影響されて侮辱や名誉毀損に相当する書き込みをした場合も、煽り 1 2022/11/21 15:16
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlでハードウェア制御?
-
クリックを何回もされて、重複...
-
perlでファイル内の文字列を置...
-
close()で例外が投げられる理由
-
ログの一部を消す Perl
-
Perl cgi 編集&削除
-
レコードの書込み判断
-
Net-Snmpのtraphandleよりshell...
-
PICでFatFsでオープンした内容...
-
Perl変数から外部プログラムの...
-
VBAでCSVファイルを途中行まで...
-
巨大なテキストの最終行を取得...
-
ファイル名を複数個配列で確保...
-
ファイル全てを .xlsm に変更し...
-
Perlで特定文字列から特定文字...
-
fgets で値が取得できない
-
VBAでCSVファイルの特定行を書...
-
エラー 'dir.h' : No such fi...
-
VBAでタブ区切りテキストの保存...
-
awkスクリプトでダブルクォーテ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
close()で例外が投げられる理由
-
perlのflock関数でロックをかけ...
-
perlを用いた特定文字列間の抽...
-
テキストファイルの本文中に行...
-
ジョブショップスケジューリング
-
while(<ハンドラ>) {} で行数を...
-
改行コードが勝手に
-
perlでファイル内の文字列を置...
-
perlで大容量CSVのsort方法につ...
-
cgiの投票回数制限設定について...
-
perlで複数のファイルの処理に...
-
オープンしたファイルで行の連結
-
Perl で syntax error
-
巨大ファイルの行をを逆順に並...
-
パスワード自動生成スクリプト...
-
AutoCADのスクリプト
-
PICでFatFsでオープンした内容...
-
Perlで他サイトの情報を取得し...
-
パイプをopenして/usr/bin/grep...
-
telnet接続
おすすめ情報