CGIの時間の環境変数について

このQ&Aのポイント
  • フォームのCGIを作成していますが、登録情報がメールで届くようにしたいです。
  • ホスト名やIPアドレス、ユーザーエージェントは取得できましたが、曜日や時間を取得する方法がわかりません。
  • 質問:フォームに登録してくれた曜日や時間を取る方法を教えてください。
回答を見る
  • ベストアンサー

CGIの時間の環境変数

ちょっとタイトルがあっているのか、イマイチ心配なのですが(汗) フォームのCGIを作っています。 登録情報がメールで届くようにしています。 ホスト名とかIPアドレス、ユーザーエージェントは下記でできました。 $host = gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2); $addr = $ENV{'REMOTE_ADDR'}; $HTTP_USER_AGENT = $ENV{'HTTP_USER_AGENT'}; フォームに登録してくれた曜日とか時間を取るやり方がわかりません。 どなたかお知恵をお貸しください m(__)m

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

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6590/9343)
回答No.1

時刻は環境変数に入ってません。 普通に関数で現在時刻を取得してください。 my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(); $year += 1900; # 年は1900年=0とした数が返されるため $mon++; # 月は0~11が1月~12月に対応するため ここまでしておいて、日本式の年月日時分秒の文字列に表示したければ、例えば my $datetime = sprintf("%04d/%02d/%02d %02d:%02d:%02d", $year, $mon, $mday, $hour, $min, $sec); として文字列にしたりします。

doragon17
質問者

お礼

素早い回答ありがとうございます。 my $datetime = sprintf("%04d/%02d/%02d %02d:%02d:%02d", $year, $mon, $mday, $hour, $min, $sec); 上記の通りやってみたんですが、エラーが出てしまいました。 そこで my を外して $datetime = sprintf("%04d/%02d/%02d %02d:%02d:%02d", $year, $mon, $mday, $hour, $min, $sec); 上記でやってみたらエラーは出ませんでした。 ただメールで帰ってきたのが、下記です。 TIME = 0000/00/00 00:00:00 どうもうまく時間が表示されません。 まとめますと、CGIには下記のように記入しました。 $host = gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2); $addr = $ENV{'REMOTE_ADDR'}; $HTTP_USER_AGENT = $ENV{'HTTP_USER_AGENT'}; $datetime = sprintf("%04d/%02d/%02d %02d:%02d:%02d", $year, $mon, $mday, $hour, $min, $sec); メールのフッターに下記のように入るようにしました。 ###############################送信者情報############################### REMOTE_HOST = $host REMOTE_ADDR = $addr HTTP_USER_AGENT = $HTTP_USER_AGENT TIME = $datetime ######################################################################## で帰ってきたのが ###############################送信者情報############################### REMOTE_HOST = ●x●x●x●.ap●.ftth.ucom.ne.jp REMOTE_ADDR = ●.●.●.● HTTP_USER_AGENT = Mozilla/5.0 (Windows NT 6.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 TIME = 0000/00/00 00:00:00 ######################################################################## リモートホスト、リモートアドレス、ユーザーエージェントはうまく できるんですが、タイムが表示が0になってしまいます ○| ̄|_

その他の回答 (1)

  • asciiz
  • ベストアンサー率70% (6590/9343)
回答No.2

sprintf は取得した結果を文字列化しているにすぎません。 日付取得部分は最初の3行ですよ。 そこから全部プログラムに入れて下さい。

doragon17
質問者

お礼

お忙しい中、何度もありがとうございます。 ばっちり!!! 思っていたことができました。 感謝(^人^)

関連するQ&A

  • CGIにてソフトバンクがPCとして認識されます。

    掲示板のCGIなのですが、ソフトバンクではPC画面へ飛ばされてしまいます。下記の部分あたりではないかと思うのですが、書き直しで解決できるのでしょうか?このCGIを使いたいので、お願い致します。 #▼ホスト名・UA取得 $HOST = $ENV{'REMOTE_HOST'}; $ADDR = $ENV{'REMOTE_ADDR'}; $UA = $ENV{'HTTP_USER_AGENT'}; $SN = $ENV{'HTTP_X_UP_SUBNO'}; if ($UA =~ /^DoCoMo\/\d/) { $AGEN = "i-mode"; }elsif ($UA =~ /^Vodafone\/\d/) { $AGEN = "Vodafone"; }elsif (($UA =~ 'UP.B') && ($SN ne "")){ $AGEN = "AU"; }else { $AGEN="PC";} if ($UA =~ /Mozilla\/|MSIE|Netscape|Opera|Lynx|AOL|Gecko/) {$AGEN="PC";} if ($HOST eq '') { $HOST = $ADDR; } if ($HOST eq $ADDR) { $HOST = gethostbyaddr(pack('C4',split(/\./,$HOST)),2) || $ADDR; }

    • 締切済み
    • CGI
  • ページのアドレスを取得する記述方法を教えてください。

    たとえば、IP、HOSTを取得するには、 $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if(!$host && $addr){ $host = (gethostbyaddr(pack("C4",split(/\./,$addr)),2))[0]; } と記述して、 センドメール部分に、 $host , $addrをどこかに記述します。 これと同じように、ページのアドレスを取得する記述はどうすればいいのか教えてください。

    • 締切済み
    • CGI
  • [perl・php]gethostbyaddrは重い?

    今まで、REMOTE_ADDRを取得してアクセスログに記録していたのですが、最近、下記の存在を知りました。 $host = gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2); ただ、これで、多大な負荷がかかるようならやめようと思うのですが、どの程度の負荷になるのでしょうか? ご存知の方、回答、宜しくお願い致します。

    • ベストアンサー
    • Perl
  • PerlからPHPに移植したアクセス制限

    下記は、CGIファイルから持ってきたスクリプトをPHPに変換してみたものです。 エラーが出るの出ます-> Parse error: syntax error, unexpected '/', expecting ')' in /home/users/1/raindrop.jp-5247423/web/tsukushinbo/bbs/bbs_header.php on line 32 どう修正すれば教えていただきたいです。 <?php #----------------# # ホスト名取得 # #----------------# function get_host(){ $host = $_SERVER{'REMOTE_HOST'}; $addr = $_SERVER{'REMOTE_ADDR'}; if($gethostbyaddr){ if ($host === "" || $host === "$addr") { $host === gethostbyaddr(pack("C4", split(/\./, $addr)), 2); $host === gethostbyaddr(pack($addr)); } } if($host === "") { $host = $addr; } } ?>

    • ベストアンサー
    • PHP
  • 信頼性

    普通ユーザーエージェントを取得する際には「$ENV{'HTTP_USER_AGENT'}」を使いますよね。 ただ、この値は詐称されやすいと聞きました。 いま「$ENV{'REMOTE_USER'}」でユーザー認証のサイトを作っているのですが、この値の信頼性はいかがなものなんでしょうか? また、REMOTE_ADDRの信頼性もいかがなものなのでしょうか? ご回答お願いします。

    • ベストアンサー
    • Perl
  • HOSTが表示されない。

    お世話になります。 早速ですが、サイトで調べ、 以下のコーディングでipアドレスと、ホスト名?を表示したいのですが、 perlのシミュレーションで実行すると表示されるのですが、 私が借用しているサイト(infoseek)ではipアドレスしか表示されません。 (ipアドレスを、直接$addrにセットしても同じ結果です。) サイトにより、制限等が掛けられているのでしょうか。 コーディングの誤りであれば指摘していただきたくお願いします。 $addr = $ENV{'REMOTE_ADDR'}; $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2); print "$host\n"; print "<br>\n"; print "$addr\n"; 以上、宜しくお願いします。

    • ベストアンサー
    • Perl
  • 【 REMOTE_HOSTの値の取得方法について 】

    既製のCGIを設置するのがイッパイイッパイの 初心者ですm(__)m REMOTE_HOSTの値を取得して表示させたいのですが 当方レンタル中のサーバーの初期設定では取得できず 下記の如くの手順で取得するように表示してありましたが どうにも理解できず困っております。 下記の「Perl内」とは何処の事を指しているのか アドバイスを頂きたくお願い申し上げます。 ****以下、該当サーバーの説明文引用***** 【 REMOTE_HOSTの値の取得方法について 】 レンタルサーバーの処理速度を優先して、初期状態ではIPアドレスからDNSの参照をしないように設定している為、REMOTE_HOSTの値を取得したい場合はPerl内で下記の記述をして下さい。 $addr = $ENV{'REMOTE_ADDR'}; $host = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $addr;

    • ベストアンサー
    • Perl
  • IP/ホスト連続投稿チェック機能が上手く行かない。

    なんでだろ?? ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ## SUB >>> ホスト取得処理 ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sub get_HostAgent { $Host = $ENV{'REMOTE_HOST'}; $Addr = $ENV{'REMOTE_ADDR'}; if ($Host eq '') { $Host = $Addr; } if ($Host eq $Addr) { $Host = gethostbyaddr(pack('C4',split(/\./,$Host)),2) || $Addr; } $H_A = "$Host"; } ホスト取得ルーチンにある変数で、 いろんな掲示板の中のP/ホスト連続投稿チェック機能だけ抜き出して、 もう何十個も試したけれど、上手くいきません。 カスタマイズしてる会員掲示板に、 IP/ホスト連続投稿チェック機能を付けたいのですが上手くいきません。 二重投稿チェックはあるのですが、、 ↓↓↓ #--二重投稿チェック--# if ($r1 eq "$name" && $r4 eq "$street<>$title" && $r5 eq "$comment") { &lock2; &error("二重投稿は禁止です"); } より極めるために、以下を利用したいのです。。 ↓↓↓ #--IP/ホスト連続投稿チェック--# if ($Addr = $ENV{'REMOTE_ADDR'} && $^T - $time < 120) { &lock2; &error("連続投稿はできません。<BR>時間をおいてから書き込みして下さい");} 宜しくお願い致します。 どこがおかしいのかサッパリです。 なんとか機能を追加できるようにお願いしますろ

    • 締切済み
    • CGI
  • Perlを使ったアクセス制限方法

    CGIのページにアクセス制限を掛けたいと思い 検索エンジンを使い色々探しまして下記のアクセス制限方法を見つけました。 http://easycgi.xrea.jp/perltips/acclimit.htm を参照して CGIの最初(#!/usr/bin/perl の次の行)に下記スクリプトを埋め込みました。 sub check { @hosts = ('hoge.ne.jp','hoge.co.jp'); $host = gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2) || $ENV{'REMOTE_ADDR'}; foreach $i (@hosts) { if ($host =~ /$i/) { print "アクセスが許可されていません。\n"; exit; } } } リモートホストでアクセス制限を行いたいのですが 上記の方法を試しても、hoge.ne.jpとhoge.co.jpからアクセス出来てしまいました。 htaccessを使わずにCGIページへアクセス制限を掛ける方法はないでしょうか? 何かアドバイス頂けると助かります。

  • Lモードが落とす環境変数について教えてください

    携帯電話(i/j/ez)やLモードに対応したコンテンツを作ろうとしているのですが,携帯電話については,HTTP_USER_AGENTやREMOTE_HOSTからキャリアを判別することができるのですが,Lモードについては,どのような環境変数を落とすのかまったくわかりません。 もし,ご存知の方がおられましたら,教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl