Perl環境変数$ENV{PATH_INFO}
Perlでファイルをダウンロードする方法を調べていたら、
環境変数$ENV{PATH_INFO}を使用するやり方を見つけたのでメモ。
$ENV{PATH_INFO}
まず次のCGIを作る。
#!/usr/bin/env perl # down.cgi print "Content-type: text/html\n\n"; print $ENV{PATH_INFO};
「/www.aaa.co.jp/cgi-bin/down.cgi」に設置して、
「http://www.aaa.co.jp/cgi-bin/down.cgi/pokemon.txt」にアクセスすると、
#=> /pokemon.txt
と表示される。
あれ。
今やってみてわかったけど、最初のスラッシュまでとれちゃうのか。
じゃあ、最初に先頭のスラッシュを削る処理をつける。
#!/usr/bin/env perl # down.cgi (my $down_file = $ENV{PATH_INFO}) =~ s{^/}{}; print "Content-type: text/html\n\n"; print $down_file;
「http://www.aaa.co.jp/cgi-bin/down.cgi/pokemon.txt」にアクセスすると、
#=> pokemon.txt
それに加えてGETでパラメータを渡すこともできる。
要するに、「?」をつけて動的なものだと認識させればよいといことなのだと思う。
試しにこのまま「http://www.aaa.co.jp/cgi-bin/down.cgi/pokemon.txt?number=1」にアクセスすると、
#=> pokemon.txt
となって、「?」以降は表示されなかった。
#!/usr/bin/env perl # down.cgi use CGI; my $q = CGI->new; (my $down_file = $ENV{PATH_INFO}) =~ s{^/}{}; print "Content-type: text/html\n\n"; print "PATH_INFO -> $down_file<br>"; for my $param ($q->param) { print "PARAM -> $param:", $q->param($param), "<br>"; }
もう一度アクセスしてみる。
#=> pokemon.txt #=> PARAM -> number:1 #=> PARAM -> name:fushigidane
うん。
$ENV{PATH_INFO}とGETを使ってパラメータが渡せた。
ただ$ENV{PATH_INFO}を使うのはSEO対策もあるみたいなので、
$ENV{PATH_INFO}を使うかGETを使うかどちらかにした方がいいのは確かだと思う。