* 通信のログ [#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}; #comment