プロが教えるわが家の防犯対策術!

下記は、メールフォームCGIに書き込まれた日時などの情報をlog.cgiというファイルに書き出すスクリプトです。

2012/01/04 21:05:45 のような感じで、日付が刻まれるのですが、このうち月の部分がどの月に処理を行ってもいつも01になってしまうのですが、当方直し方がわかりません。

下記が実際の記載箇所です。4行目がおかしいのだと思いますが、どなたかお分かりの方、教えていただけないでしょうか。

my $path = "log.cgi";
my $ip = $ENV{'REMOTE_ADDR'};
($sec, $min, $hour, $mday, $month, $year, $wday, $stime) = localtime(time());
my $time = sprintf("%04d\/%02d\/%02d %02d\:%02d:%02d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec);
my $message = $in{'メッセージ'};
$message =~ s/\r\n/ /g;
$message =~ s/\n/ /g;
if (open(FOUT, ">> $path")) {
print FOUT "$time\t$ip\t" . $in{'お名前'} . "\t" . $in{'E-mail'} . "\t" . $message . "\r\n";
close(FOUT);
}

よろしくおねがいいたします。

A 回答 (1件)

> ($sec, $min, $hour, $mday, $month, $year, $wday, $stime) = localtime(time());



こちらでは、月を「$month」変数で受け取っているのに、

> my $time = sprintf("%04d\/%02d\/%02d %02d\:%02d:%02d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec);

こちらでは、変数「$mon」を出力しているからです。$month+1にしましょう。

こういうエラーは「use strict;」で防ぐことができますので、use strict を使うことお薦めします。
http://dqn.sakusakutto.jp/2008/06/perlcgiuse-str …
    • good
    • 0
この回答へのお礼

なおしたら正しく表示されるようになりました。
教えていただいたURLも勉強させていただこうと思います。

初心者の質問に丁寧にお答えくださって、ほんとうにありがとうございました!

お礼日時:2012/04/04 22:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!