• 締切済み

環境変数HTTP_REFERERを使うには?

ただ今、CGIで独自のアクセス解析プログラムを作成中です。 相手がアクセスしてきたら、メールに転送して情報を取得出来るようにしたんですが・・・・ リンク元を取得するのに以下のようにやってみたのですが、送られてきたメールは空メール(涙) ソース抜粋 $host = $ENV{'REMOTE_ADDR'}; $ref = $ENV{'HTTP_REFERER'}; open(MAIL,"| $sendmail $mailto"); flock(MAIL,2); print MAIL $host . $ref; flock(MAIL,8); close(MAIL); ホストアドだけを取得するとちゃんと情報が入って返って来るんですよね・・・ すみません、情報を取得できる良い方法は無いでしょうか?

  • Perl
  • 回答数3
  • ありがとう数0

みんなの回答

  • txrx
  • ベストアンサー率45% (83/184)
回答No.3

'HTTP_REFERER'は、他のページからリンクされていないと設定されませんが、大丈夫ですか? リンクされてますか? サーバによっては、使えない環境変数があるので、調べてみてはどうでしょうか? それと、'HTTP_REFERER'は、ブラウザが値を設定したはずなので、ブラウザの設定や種類などによっては、値を取得することができません。 試しに次のCGIページで全ての環境変数を表示してみてはいかがでしょうか? $cgi = new CGI; : : print "<table border>" ; while( ($key,$value) = each(%ENV) ){ print "<tr><td>$key</td><td>$value</td></tr>\n" ; } print "</table>" ;

  • naoto0314
  • ベストアンサー率34% (25/73)
回答No.2

すみません、 print MAIL "From: 送信者アドレス"; じゃなくて print MAIL "From: 送信者アドレス\n"; ですね。

  • naoto0314
  • ベストアンサー率34% (25/73)
回答No.1

SENDMAILを使う場合は open(MAIL,"| $sendmail $mailto"); print MAIL "From: 送信者アドレス"; print MAIL "To: 送信先アドレス\n"; print MAIL "Subject: タイトル(日本語は使わないほうがいいです)\n\n"; print MAIL "本文\n\n"; close(MAIL); という感じにやるような気がします。(うろ覚えですみません…)

関連するQ&A

  • 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

  • 環境変数のHTTP_REFERERのチェック

    配布されたコードを見ているのですが、意味がわからないので 教えて下さい。 $referer_url[0] = 'http:\/\/localhost\/'; と宣言してあり、 そもそもlocalhostの意味もわかりません。 ##===================================== ## リンク元チェック処理 = ##===================================== if($REFERER_seigen == 1){   &ref_chk;   if ( $refchk==1 ){ #一致しなければ終了     print "エラー403";     exit;   } } という処理で、ref_chk関数を呼んでおりその中身が ##===================================== sub ref_chk{   $refchk = 1; #フラグの初期化(一致しない) = エラー403となる   foreach $url_temp(@referer_url){    if ( $ENV{'HTTP_REFERER'} =~ /^$url_temp/){     $refchk = 0; #前方が一致したのがあったらそのホストからだからOK    }   }   return $refchk; } とあります。前方が一致とはどういう意味でしょうか。

    • ベストアンサー
    • Perl
  • 環境変数リファラーの値をを最後のページまで持ちたい。

    表題わかりにくくてすいません。 商品ごとの申し込みフォームを作成しています。 まず、 $ENV{'HTTP_REFERER'};でどのURLのページから来たか判別させて、 その最初に入ってきたリファラーの値をページ遷移のときに最後の ページまでもっていきたいのです。 ■1ページ目(HTML)名まえ年齢、商品番号などを記入 <A.HTML> ■2ページ目(CGI)住所 <B.CGI> sub page2{} ■3ページ目(CGI)確認画面。<C.CGI> sub page3{} ■4ページ目(CGI)サンクスページ <D.CGI> sub thanks{} 以上の4ページの構成ですが、最初の1ページ目のHTMLが商品ごとにちがっていて、どの商品のページのHTMLからきているのか判別させて、サンクスページで、URLごとに別の件名の確認メールを自分あてに送信できるようにしたいので、最初のページがどのURLなのかをリファラーで判断させたいのです。商品によって、入力項目を変えるたりもしています。(POSTで商品ごとのhiddenタグを送ればいいと思うかもしれませんが、今回は$ENV{'HTTP_REFERER'};についてのやり方でやりたいのです。) ですが、$ENV{'HTTP_REFERER'};を2ページ目のサブルーチンのなかに記述しても2ページ目ではどこからきているのか$ref = $ENV{'HTTP_REFERER'};などと記述すればわかるのですが、この最初のリファラーの値を3ページ目、4ページ目に持っていくのにはどうしたらいいのでしょうか?全部のページのサブルーチンに$ref = $ENV{'HTTP_REFERER'};を書いてしまうと、そのひとつまえのURLが認識されてしまいます。ですが、最初のリファラーの値をずっと最後のページまで持っていたいのです。 どなたか、方法がわかりましたらご教授願います。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ページのアドレスを取得する記述方法を教えてください。

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

    • 締切済み
    • CGI
  • アクセス解析でのHTTP_REFERERについて

    アクセス解析のCGIを作ってみようとがんばっています。そこでお伺いしたいのですが、 $ln = "$ENV{'HTTP_REFERER'}"; と単純にやればリンク元が取れると思っていたのですが、なぜか何度やってみてもHTTP_REFERERだけがだめでした。他の環境変数は問題なくファイルに書き出せるのですが、何をやってもリンク元の部分だけが空白になってしまいます。本をいくら読んでみてもわからず、ほとほと困り果ててこちらに参りました。 REFERERだけは保存するのに何か特別な処理が必要なのですか?解説が面倒なようでしたら Yes(処理が必要)/No(そんなことない君のスクリプトがどこかおかしい) だけでも構わないので教えていただけると有り難いです。 Tripodの無料HPを使っています。

    • ベストアンサー
    • Perl
  • php 定義済み変数

    たとえばアクセス解析で、 $ref = $_ENV['HTTP_REFERER']; とした場合、リンク元があれば取得できますが、ブックマークからのアクセスの場合エラーになってしまいますよね? こんな感じである値を取得できなかった場合にエラーが出てしまうことを防ぐ書き方はあるのでしょうか? 教えてください。 (サーバーの設定は別としてください) (phpのバージョンは4.3.0です。)

    • ベストアンサー
    • PHP
  • socket使用時の環境変数(REMOTE_ADDR)について

    色々調べても結局わかりませんでしたので もしお分かりになる方がいらっしゃれば 教えて頂ければ幸いです。 socketを使用するAというプログラムを作ったのですが、 そのプログラムからBというプログラムを呼び出した時、 Aに取得されるREMOTE_ADDRは、私のREMOTE_ADDRになるのですが、 Bに取得されるREMOTE_ADDRは、サーバのREMOTE_ADDRになってしまいます。 Bに対しても私のREMOTE_ADDRを取得させたいのですが、 方法はありますでしょうか? 具体的なSOCKET使用機構は以下のようになっております。 use IO::Socket qw(:DEFAULT :crlf); $/ = CRLF . CRLF; my $data; my ($host,$path) = $url =~m!^http://([^/]+)(/[^\#]*)!; my $socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort => 'http(80)', Proto => 'tcp'); select($socket); $|= 1; select (STDOUT); print $socket "POST $path HTTP/1.0",CRLF,CRLF; close($socket); どうぞ宜しくお願い致します。

    • ベストアンサー
    • Perl
  • フレームページで HTTP_REFERER

    よろしくお願いいたします。 初心者ながらもHPを立ち上げ、Free配布のcgiもいくつか設置したのですが、 アクセス解析のcgiで、機能等に非常に満足のいくcgiが、参照元を取得するのに 「HTTP_REFERER」を使っていました。 私のHPは、フレームを使っておりまして、「HTTP_REFERER」では参照元が取得 出来ません。 どのようにすればよろしいのでしょうか?? ちなみに私の使っているサーバーは、HPとcgiが別サーバーとなっています。 解析するページからは『<img~~』で呼び出しています。

    • ベストアンサー
    • CGI
  • 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
  • [perl・php]gethostbyaddrは重い?

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

    • ベストアンサー
    • Perl

専門家に質問してみよう