* 通信のログ [#s655c419] - ページ: [[罪罰改造板3]] - 投稿者: [[卑弥呼]] - 優先順位: 普通 - 状態: 着手 - カテゴリー: こんなのが欲しい♪ - 投稿日: 2008-02-02 (土) 10:50:29 - バージョン: ** メッセージ [#g8327d7c] 通信のログが増えてきたので、letter_log以外に、letter_log01,letter_log02.... とつくりました(古いのを移行しただけです) 現在は一個一個letter.cgi以外にletter01.cgi,letter02.cgi... として、展開する記事を変えて表示するようにしました。 しかし、これでは作るさぎょうが大変なので、いい方法を考えています 月ごとにログを表示したいと思います 最初、letter.cgiをひらくと、そのつきのログが、でて、送信フォームの下に、2007年11月,12月,2008年1月,2月,,, というリンクのようなものを設置し、その月のログが表示される、というようにしたいと思っています しかし、私の今の力ではやってみましたが、どうにもできないので、どなたか、教えていただけないでしょうか -------- - まず$logfileを $logfile="./logdata/letter_log_"; に変更して sub regist とログファイルを開くところに if(!-e $logfile${month}.cgi){ open(OUT,"> $logfile${month}.cgi"); close(OUT); } を加えて、あとはリンクなりボタンなりで月別のログを見れるようにすればいいかと。 -- [[six]] &new{2008-02-02 (土) 21:19:39}; - ありがとうございます!やってみます! -- [[卑弥呼]] &new{2008-02-03 (日) 00:08:48}; - すみません やってみたのですがよく、、、 -- [[卑弥呼]] &new{2008-02-03 (日) 00:23:33}; - もうしわけありませんが、もう少し具体的に教えていただけないでしょうか? -- [[卑弥呼]] &new{2008-02-03 (日) 00:24:04}; - 1. $logfile = "./logdata/letter_log.cgi"; を $logfile = "./logdata/letter_log_"; に変更。 2.sub html の # ログを展開 の前と、sub regist の # ログを読み込み の前に if(!-e $logfile${month}.cgi){ open(OUT,"> $logfile${month}.cgi"); close(OUT); } を追加。 3.sub html と sub regist の open(IN,"$logfile") || &error("Open Error : $logfile"); を open(IN,"$logfile${month}.cgi") || &error("Open Error : $logfile${month}.cgi"); に変更。 で、できるかと思いますー。 -- [[six]] &new{2008-02-03 (日) 00:46:49}; - ログファイルの変更は必要ありますか?また、そのファイル(例えば2008年1月のログ)をひらくさいのリンクはどうなりますか?何から何まできいてごめんなさい -- [[卑弥呼]] &new{2008-02-03 (日) 01:43:02}; - ローカルでやってみたところ、まっしろになってしまったので。、。 -- [[卑弥呼]] &new{2008-02-03 (日) 01:43:31}; - あーあと~ ログ更新処理の open(OUT,">$logfile") || &error("Write Error : $logfile"); を open(OUT,">$logfile${month}.cgi") || &error("Write Error : $logfile${month}.cgi"); に変更する必要があります。~ ローカルでテストする前にも文法のチェックはしてください。即興物なので他にも修正する箇所があると思います^^;~ 月別表示は $mode を使って作成してください。~ &log1 if($mode eq 'log1'); のようにして。(その場合、&html if($mode ne 'log1'); のようにする -- [[six]] &new{2008-02-03 (日) 05:03:25}; - このようになりました、、、 クォート('や")で囲まれていないScalarがあります。 あなたのプログラムの 222行目付近だと思います。→222行目へ 右記の記述がある付近にあるERRORだと思われます。 「$logfile${month}」 Scalar found where operator expected at program line 222, near "$logfile${month}" どうゆうことでしょうか? -- [[卑弥呼]] &new{2008-02-03 (日) 11:50:43}; - あー my $file="$logfile${month}.cgi"; if(!-e $file){ open(OUT,"> $file"); close(OUT); } でした^^;たぶんコレでいけます。 -- [[six]] &new{2008-02-03 (日) 13:40:31}; - ありがとうございます!エラーはとりあえずなくなったようです!しかし、どのようにそのつきのを表示したらよいかよくわかりません、、、月別表示は $mode を使って作成してください。 の部分が…… 本当に何度もすみません -- [[卑弥呼]] &new{2008-02-03 (日) 14:03:07}; - letter.cgiでは自動更新($rd)は使用していないので、$modeと$rdを使用します。 どこにでもいいので適当に <form action="$script" method="$method"> <input type="hidden" name="id" value="$id"> <input type="hidden" name="pw" value="$pw"> <input type="hidden" name="mode" value="past_log"> <select name="rd"> EOM my @tuki=(01,02,03,04,05,06,07,08,09,10,11,12); foreach(0 .. $#tuki){ print "<option value="$tuki[$_]">$tuki[$_]月</option>\n"; } print <<"EOM"; </select> <input type="submit" value="\表\示"> </form> を記述します。 # メイン処理 &axs_check; # アクセス制御 &decode; # フォームデコード &mandata_open; # 参加者ログ読み込み &get_time; # 日時取得 &past_log if($mode eq 'past_log'); # 過去ログ表示<-- 追加 if ($mode eq "regist" && $com) { ®ist; } # 書き込み処理 &html if($mode ne 'past_log'); # ページ表示<-- 修正 とし、 sub past_log{ &header; my $file="$logfile${rd}.cgi"; open(IN,"$file") || &error("Open Error : $file"); # 使用しているletter.cgiのログ展開をココに貼り付ける close(IN); ©right; exit; print <<"EOM"; </body> </html> EOM } を追加でできると思います。 -- [[six]] &new{2008-02-03 (日) 15:36:00}; - 【補足】~ 上記の方法では年が変わると過去ログが上書きされていきます。~ 各年の月別ログを確保しておきたいのなら $year 変数を組み込んでください。~ そうすれば各年の月別ログを保存できます。~ その方法に関してはご自分で上記内容を修正してください。 -- [[six]] &new{2008-02-03 (日) 15:58:32}; - 丁寧にありがとうございます!チャレンジしてみます! -- [[卑弥呼]] &new{2008-02-03 (日) 17:08:32}; - ログのファイルはあらかじめ作っておく必要はありますか? ちなみに、いまやってみましたが、 my @tuki=(01,02,03,04,05,06,07,08,09,10,11,12); foreach(0 .. $#tuki){ print "<option value="$tuki[$_]">$tuki[$_]月</option>\n"; } の部分がひっかかりました -- [[卑弥呼]] &new{2008-02-03 (日) 18:44:13}; - あー""が引っかかってましたね~ print qq|<option value="$tuki[$_]">$tuki[$_]月</option>\n|; に変更してください。 -- [[six]] &new{2008-02-03 (日) 20:40:14}; - あと、ログファイルは自動生成なので自分で作る必要はありません。 -- [[six]] &new{2008-02-03 (日) 20:41:33}; - スミマセン Illegal octal digit '9' at program line 208, at end of line と program had compilation errors. と (Might be a runaway multi-line << string starting on line 140) がありました、、、 すみません -- [[卑弥呼]] &new{2008-02-03 (日) 22:15:09}; - エラー文だけじゃどこがおかしいのかわかりません。txtファイルにしてもらえますか? -- [[six]] &new{2008-02-03 (日) 22:27:11}; - はい 少し待ってください ここの添付、というところに貼り付けてよいのでしょうか? -- [[卑弥呼]] &new{2008-02-03 (日) 22:33:02}; - そうですね 行だけでわかるわけがありませんね(笑)すみません -- [[卑弥呼]] &new{2008-02-03 (日) 22:34:57}; - あ、勝手に添付できないんですね -- [[卑弥呼]] &new{2008-02-03 (日) 22:35:39}; - http://www7b.biglobe.ne.jp/~satonokaze/letter.txt にアップしました 確認されたら削除したいとおもうので、ご覧になられたら、一報いただけるとうれしいです -- [[卑弥呼]] &new{2008-02-03 (日) 22:37:39}; - あーすいません、私のミスですね^^; my @tuki=(01,02,03,04,05,06,07,08,09,10,11,12); を my @tuki=('01','02','03','04','05','06','07','08','09','10','11','12'); にしてください。この部分の動作は確認済みです。 -- [[six]] &new{2008-02-03 (日) 22:37:33}; - ありがとうございます しかし、文法はあっているのにテストすると真っ白になってしまいます(泣 -- [[卑弥呼]] &new{2008-02-03 (日) 22:41:32}; - それから、$yearの組み込み方についても教えていただけないでしょうか? -- [[卑弥呼]] &new{2008-02-03 (日) 22:42:20}; - ざっと見ましたがいろいろおかしいところがあるようなのでちょっと時間がかかります^^; -- [[six]] &new{2008-02-03 (日) 22:44:35}; - 、、、申し訳ありません。 -- [[卑弥呼]] &new{2008-02-03 (日) 22:45:13}; - サーバから削除しても大丈夫でしょうか? -- [[卑弥呼]] &new{2008-02-03 (日) 22:45:56}; - 勝手ながら修正いたしました。たぶんコレで動きます(確認はとっていませんがエラーは出ません http://w1.oroti.com/~ffta_/letter.txt 先ほどのファイルは削除されても結構です。 -- [[six]] &new{2008-02-03 (日) 22:54:39}; - ありがとうございます、、しかし、、文字数エラー( $rd = $in{'rd'}; if(length($in{'rd'})>1) { &error("文字数エラーです 6"); } ) がでてしまいます。。 -- [[卑弥呼]] &new{2008-02-03 (日) 23:09:34}; - そのことも含め再修正してうpしておきました^^;年度別にログ保存できるようになっているので、そのままコピペして使われても構いません。 -- [[six]] &new{2008-02-03 (日) 23:11:03}; - すごい!本当にありがとうございます!!!! -- [[卑弥呼]] &new{2008-02-03 (日) 23:15:03}; - すみません、、 何故か普通のゲーム(ステータスとかでる、ログイン直後の画面)がこわれました Error: Open Error : ./logdata/letter_log.cgi ってなります、、 -- [[卑弥呼]] &new{2008-02-03 (日) 23:31:08}; - 原因はもとのletter_log.cgiを削除したことにあったようです!自己解決です! -- [[卑弥呼]] &new{2008-02-03 (日) 23:33:35}; - すみません 展開したログの一番上と下に、同じような選択する奴(年と月)をせっちしたいのですがどこにおいたらよいのでしょう?いくつかやってみたのですが、できませんでした -- [[卑弥呼]] &new{2008-02-03 (日) 23:40:13}; - 同時質問すみません。 中にはあまり通信をしない方もいるので、その年の全部の記事を見る、なんてことはできないでしょうか? -- [[卑弥呼]] &new{2008-02-03 (日) 23:56:04}; - sub past_log{ &header; print <<"EOM"; <form action="$script" method="$method"> <input type="hidden" name="id" value="$id"> <input type="hidden" name="pw" value="$pw"> <input type="hidden" name="mode" value="past_log"> <select name="year"> <option value="2007">2007年</option> <option value="2008">2008年</option> </select> <select name="tuki"> EOM my @tuki=('01','02','03','04','05','06','07','08','09','10','11','12'); foreach(0 .. $#tuki){ print qq|<option value="$tuki[$_]">$tuki[$_]月</option>\n|; } print <<"EOM"; </select> <input type="submit" value="\表\示"> </form> <hr size="2" color="#ffffff"> EOM my $file="$logfile$in{'year'}_$in{'tuki'}.cgi"; #my $file="$logfile$in{'tuki'}.cgi"; open(IN,"$file") || &error("Open Error : $file"); # ログを展開 local $log_last_flag=0; my $camp_flag = $camp_info[$DAT{'camp'}][0]; while (<IN>) { $log_last_flag++; local($date,$nm,$camp,$com,$sogo,$sogo2,$addr,$host,$agent,$time2,$myid) = split(/<>/); if($nm eq $DAT{'nm'} || $myid eq $DAT{'nm'} || $myid eq $camp_info[$DAT{'camp'}][0]){ $nm = qq|$nm <small>[$sogo_p[$sogo]]:[$sogo_p2[$sogo2]]</small>| if($sogo||$sogo2); ($mv_mode eq 'mv') ? $com =~ s/ハァト/<font color="pink">\&\#63726<\/font>/g : $com =~ s/ハァト/<span class="f1">ゥ<\/span>/g ; ($mv_mode eq 'mv') ? print qq|$nm:$com [$camp_info[$camp][0] $date → $myid]<br>\n|: print qq|<span style="color:$camp_info[$camp][1]">$nm <span class="date">[ $camp_info[$camp][0] $date →$myid]</span><br>$com </span><hr>\n|; last if $log_last_flag > $log_last; } } close(IN); ©right; exit; print <<"EOM"; </body> </html> EOM } で。全ログを一斉に開くと超負荷がかかり最悪鯖側から排除されるかもしれませんよ?それに携帯だと確実にサイズオーバーを起こし表示されないですし、PCでも処理できないと思います>>ログの量によっては。~ なので無理です。 -- [[six]] &new{2008-02-04 (月) 00:12:34}; #comment