Sample CGI
imgchange.cgi
reported by s-suzuki@aikis.or.jp
1.機能の説明
アクセスする度に違った画像を表示するためのCGIです。バナー交換などに使ったりしているものと同じような事を行います。
2.動作の説明
このCGIでは、HTMLドキュメントとしてではなく画像データを生成するCGIとなります。そのため通常の呼び出しHTMLドキュメント内から、<IMG>タグを使って呼び出されます。
<IMG SRC="imgchange.cgi">?
このため、通常のHTMLドキュメントを生成するCGIスクリプトとは違った仕組み(?)が必要になります。
その仕組みが、CGIで最初に出力される時のヘッダ情報なのです。通常は、Content-type: text/htmlが出力されますが、画像ファイルの場合次のようなヘッダを出力します。
| GIFファイル | Content-type: image/gif |
| JPEGファイル | Content-type: image/jpeg |
このようなヘッダを出力した後、画像ファイルのデータそのものを出力すればOKです。
なお、今回は処理を単純にするため、対応する画像フォーマットはGIFフォーマットのみとしています。
3.スクリプトのソース
#! /usr/local/bin/perl
#----------------------------------------
# 画像ファイルのリスト
#----------------------------------------
@image_list = (
'cgilabo1.gif',
'cgilabo2.gif',
'cgilabo3.gif',
'cgilabo4.gif',
);
$image_max = 4; # 画像数
#----------------------------------------
# 現在時刻の取得
#----------------------------------------
$ENV{'TZ'} = 'JST-9';
$times = time;
($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime($times);
#----------------------------------------
# 秒を基準に 0 〜 3 を生成
#----------------------------------------
$num = $sec % $image_max;
#----------------------------------------
# 画像ファイルの読み込み
#----------------------------------------
if( !(open( IMG,"$image_list[$num]")) ) {
exit;
}
#----------------------------------------
# 画像として認識させるヘッダの出力
#----------------------------------------
print "Content-type: image/gif\n\n";
#----------------------------------------
# 画像ファイルの出力
#----------------------------------------
print ;
close(IMG);