簡単なCGIスクリプト

《 INDEX 》    《 HOME 》   

■ 概要

 《 HTMLからの呼び出し方 》

<A HREF="http://スクリプトパス/スクリプト名?ジャンプ先URL">ジャンプ</A>


■ 作成

《 location.cgi 》


#!/usr/local/bin/perl5

$Query{url} = $ENV{QUERY_STRING};

if(!$Query{url}){ &error('不正な呼び出しです'); exit;}

print "Location: $Query{url}\n\n";

sub error{

    $message = $_[0];

    print 'Content-type: text/html'."\n\n";
    print '<HTML><HEAD><TITLE>Request Error</TITLE></HEAD>'."\n";
    print '<BODY>'."\n";
    print '<H1>'.$message.'</H1>'."\n";
    print '</BODY></HTML>'."\n";

}



《 解説 》

  1. ここではperlのパスを指定しています。ここの箇所は各プロバイダによって異なりますので、契約先のプロバイダの設定を確認してください。

    #!/usr/local/bin/perl5


  2. HTMLより直接CGIが呼び出されているのでここでは"GET"方式となり環境変数QUERY_STRINGに?以降の文字列が格納されます。ここでは拡張を考えハッシュのurlで値を取得します。

    $Query{url} = $ENV{QUERY_STRING};


  3. これが実際に他のサイトへジャンプする記述です。通常のヘッダは《 CGI作成講座 》で少し触れてありますが、このヘッダは次に指定されているurlへジャンプします。ヘッダの終わりに改行を1つ余分に付けるのを忘れないようにしてください。

    print "Location: $Query{url}\n\n";


  4. プログラマが任意のときに呼び出すためのエラー処理です。引数で与えられたエラーメッセージをブラウザに出力します。今回は引数無しでスクリプトが呼び出された場合に処理が実行されます。

    サブルーチン《error》




《呼び出し側ソース》


<HTML>
<HEAD>
<TITLE>簡単なCGIスクリプト</TITLE>
</HEAD>
<BODY>
<A HREF="http://スクリプトパス/location.cgi?http://www.site-cooler.com/">ジャンプ</A>
</BODY>
</HTML>




《サンプルのダウンロード》


■ カスタマイズ

呼び出し元の限定

《 location.cgi 》


#!/usr/local/bin/perl5

$Query{url} = $ENV{QUERY_STRING};

if(!$Query{url}){ &error('不正な呼び出しです'); exit;}

if($ENV{HTTP_REFERER} ne 'http://www.site-cooler.com/cgi/1.htm'){
    &error('スクリプトを呼び出したURLが不正です'); exit;
}


print "Location: $Query{url}\n\n";

sub error{

    $message = $_[0];

    print 'Content-type: text/html'."\n\n";
    print '<HTML><HEAD><TITLE>Request Error</TITLE></HEAD>'."\n";
    print '<BODY>'."\n";
    print '<H1>'.$message.'</H1>'."\n";
    print '</BODY></HTML>'."\n";

}



《 解説 》

  1. スクリプトを呼び出したURLは環境変数HTTP_REFERERへ格納されます、ここで自分の指定したURLとこの環境変数を比較し、期待していたURLでなければエラー処理へ制御が移ります。
    このサンプルではhttp://www.site-cooler.com/cgi/1.htmからの呼び出し以外は全てエラーとなります。

    if($ENV{HTTP_REFERER} ne 'http://www.site-cooler.com/cgi/1.htm'){
        &error('スクリプトを呼び出したURLが不正です'); exit;
    }



《 INDEX 》    《 HOME 》   

Copyright (C) 2000-2004 Knave
http://www.site-cooler.com/