|
|
|
|
|
|
|
|
- Perlプログラミング
- UNIX系のオペレーティングシステムには標準的に組み込まれているスクリプト言語ですが、HTMLを書いてるときによく出てくるCGIという言葉があります。これは実はPerlで書いたスクリプトそのものであり、拡張子を書き換えただけです。CGIは動的なWebを製作するだけでなく、アンケートやクイズなど、多くの目的に使う事ができます。又、データベースなどにアクセスする手段にもなります。
- サンプル1
- リファレンスを書くよりも実際にプログラムを書いてみて、それを理解していくほうが早い場合もあります。特にC言語やJavaを理解している人であれば、早く書けるようになると思います。
###############################
#↓ヘッダを出力しないとエラーが出る #
###############################
&header;
$remote_host = &GetRemoteHost;
print "Your IP Address is ";
print $remote_host;
print "<BR>";
print "Version 0.1";
exit;
#################################################################################
sub header
{
print "Content-type: text/html\n\n";
}
#################################################################################
sub GetRemoteHost {
my($remote_host);
if($ENV{'REMOTE_HOST'} =~ /[^0-9\.]/) {
$remote_host = $ENV{'REMOTE_HOST'};
} else {
my(@addr) = split(/\./, $ENV{'REMOTE_ADDR'});
my($packed_addr) = pack("C4", $addr[0], $addr[1], $addr[2], $addr[3]);
my($aliases, $addrtype, $length, @addrs);
($remote_host, $aliases, $addrtype, $length, @addrs) = gethostbyaddr($packed_addr, 2);
unless($remote_host) {
$remote_host = $ENV{'REMOTE_ADDR'};
}
}
return $remote_host;
}
#################################################################################
|
実行結果を見たい方はhttp://mbinet.homedns.org/cgi-bin/20040309.cgiで確認できます。
ちなみにCGIスクリプトの中身を公開するとセキュリティホールを攻撃される恐れがあるので、あまり公開することは好ましくありません。この点については気をつけていただいたほうがよいと思います。
ヘッダとはファイルの種類を示しています。即ちCGIを実行した結果が今回のようにHTMLファイルであるのか、あるいは画像ファイルなどであるのかなどを示します。ヘッダを出力しないとエラーが発生します。
c.f.
http://tohoho.wakusei.ne.jp/lng/199907/99070030.htm
- サンプル2
- サンプル1に加工を加えて、ログファイルに出力するようにしてみましょう。
###############################
#↓ヘッダを出力しないとエラーが出る #
###############################
&header;
$remote_host = &GetRemoteHost;
open(OUT, ">> iplog.txt"); print(OUT $remote_host);
print(OUT "\n");
close(OUT);
print "Your IP Address is ";
print $remote_host;
print "<BR>";
print "Version 0.2";
exit;
#################################################################################
sub header
{
print "Content-type: text/html\n\n";
}
#################################################################################
sub GetRemoteHost {
my($remote_host);
if($ENV{'REMOTE_HOST'} =~ /[^0-9\.]/) {
$remote_host = $ENV{'REMOTE_HOST'};
} else {
my(@addr) = split(/\./, $ENV{'REMOTE_ADDR'});
my($packed_addr) = pack("C4", $addr[0], $addr[1], $addr[2], $addr[3]);
my($aliases, $addrtype, $length, @addrs);
($remote_host, $aliases, $addrtype, $length, @addrs) = gethostbyaddr($packed_addr, 2);
unless($remote_host) {
$remote_host = $ENV{'REMOTE_ADDR'};
}
}
return $remote_host;
}
#################################################################################
|
実行結果を見たい方はhttp://mbinet.homedns.org/cgi-bin/20040310.cgiで確認できます。
IPLOG.TXTに書き込まれたかどうか自体はこのスクリプトが実行されてもユーザーからは見ることができません。なぜならcgi-binフォルダはスクリプトを実行するアクセスは可能でも通常の読み取りは実行できないセキュリティがかかっているからです。
|
|
|