• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SSIを呼び出した元ファイルの名前を取得することはできますか?)

SSIを使ってアクセスログにページ名を記録する方法は?

このQ&Aのポイント
  • アクセスログを取るだけの単純なCGIを作っています。SSIを使って.plファイルを呼び出してログにホスト名やリンク元、ブラウザ名を記録しています。
  • 最近、掲示板にスパムが増えたのでそのログも一緒に取ろうと思うのですが、ログにアクセスされたページも記録したいと思います。
  • $ENV{'QUERY_STRING'}で識別番号を取って記録することもできると思いますが、いたずらに備えてこれを使わずにできればと思っています。環境変数にはそれらしいものがないのですが、何か他に良い方法はあるでしょうか?

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

  • ベストアンサー
回答No.1

例えば test.shtmlに<!--#exec cmd="./hoge.cgi" -->と記述して呼び出したときに "test.shtml"を得たいと言うことなら環境変数に入ってますよ。 $ENV{'SCRIPT_FILENAME'} = /home/hoge/public_html/test.shtml $ENV{'SCRIPT_NAME'} = /~hoge/test.shtml となりますよ。 cmdではなく<!--#exec cgi="./hoge.cgi" -->で呼び出した場合は 呼び出しもとの.shtmlではなく hoge.cgi自体のパスが環境変数に入ってしまいます。 あと、もしも掲示板のログとしてSSI有効なページに表示するのだとしたら危険なのでご注意ください 特にApache1.3系は <!--#exec cmd="./hoge.cgi" (つまり --> が無い状態でも) これだけでもSSIとして表示してしまいますので注意が必要です (Apache2.0系では<!--#exec cmd="./hoge.cgi" --> のように きちんとした書式で無いとエラーが出るようになっているようです)

nine999
質問者

お礼

ありがとうございます。ちゃんと動作させることができました。 $ENV{'SCRIPT_NAME'}は上記例だと「/hoge.cgi」を返すものだと思っておりました。 ちなみに$ENV{'QUERY_STRING'}については機能しませんでした。

関連するQ&A