>>> 2002年4月上旬
Last-modified: Wed, 10 Apr 2002 04:31:43 JST
Powered by Tomsoft Diary System 1.4.2
|
↓ | |||||||||||||||||||||||||||||||||||||||||||||
SSIにてPerlスクリプトに引数を渡すには?アクセス制限をかけた サイトのアクセス記録を得るために、こっそり プログラムを動かしている。 <!--#exec cgi="./log/log.cgi"-->という一文を入り口の index.html に埋めこんで ログをとっているんだけど、別のページにも埋めて、それぞれのページが どのくらい読まれているのかを知りたくなってきた。 そこで、log.cgi に引数を渡し、ログにどのページが読まれたのかの記録を つけ加えようと思うわけだ。 <!--#exec cgi="./log/log.cgi?page1"-->とでもやれば、Perl側で $page = $ENV{'QUERY_STRING'}; とすることで、$page="page1"になるのではないか、 と思ったら、大間違いデシタ。恥ずかしい。こういう構文は許されてないみたい。 許されてないっつーか、こういう場合は、 <!--#exec cmd="./log/log.pl page1"--> というように#exec cmdで引数を渡すか、 <!--#set var="page" value="page1"--> <!--#exec cgi="./log/log.cgi"--> って、環境変数に代入してから、cgiを呼び出せばいいのです。 よくよく調べてみると、apacheの仕様では、 <!--#exec cgi="./log/log.cgi page1"> というように引数を渡すこともできるみたいなんですが、プロバイダーの設定で 引数が渡せないようになっていたり、apacheのバージョンの違いで、うまく 動かないようになってるようです。 ローカルで確かめてみると、<!--#exec cmd="./log/log.pl page1"--> このパターンだけがうまく動きました。ってゆうか、SSIを許可するため、 そのディレクトリに.htaccessを付け加えるとcgiが動かなくなったりして、 完全に「ワタシってタコよ。」状態。だめだ時間切れー、って感じ。 で、プロバイダにファイルを転送して、実験するんだけど、うまくいかない。 セキュリティの関係なのかな。もうすこし学習が必要なようだ。残念。
SSIにてPerlスクリプトに引数を渡すには?(解決編)_ ひとつめ。.htaccess によってcgiが動かなくなったり、SSIがうまく動かなくなったり した件については、こう書き換えたらオッケーだった。 Options Includes → Options +Includes _ ふたつめ。引数を渡すには、#include virtual を使う。たとえば、こんな感じ。 <!--#include virtual="./log/log.cgi?page_name"--> Perl側では、 $page = $ENV{'QUERY_STRING'};
$page = $ENV{'PATH_INFO'} if(!$page); # QUERY_STRINGが無ければPATH_INFOで
$page = $ENV{'page'} if(!$page); #set var=... で指定の場合。
こんな感じで引数を読む。 実際にログを見るには こちら。 |