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 <IMG>; close(IMG);