Sample CGI


photo.cgi



reported by s-suzuki@aikis.or.jp

1.機能の説明
写真のページを作成するときに、1つひとつの写真ごとにHTML文書を用意しなくてもよいように、タイトルや簡単な説明文つきのページを表示させるためのCGIスクリプトです。

2.動作の説明
要は、URLで指定されているパラメータを取得するCGIスクリプトです。(※参照

サブルーチン form()によって分解され $FORM{'****'} に格納されたパラメータを元に画像表示のためのHTML文書を表示しているだけです。

呼び出しは以下のように行います。

    http://www.hogehoge.com/photo.cgi?
        file=画像ファイル.jpg&title=タイトル&value=説明

原則としてこれで表示できますが、日本語コードの問題から、サーバーによってはうまくパラメータが渡らないときがあります。このような場合は、このページの例のようにフォームを使って画像表示を行ってください。

なお、説明分は指定しなくても良いようになっていますが、URLで指定する時に長い説明文を指定した場合、環境変数のサイズによってはすべてを表示できない場合があるかもしれません。

3.スクリプトのソース
#! /usr/local/bin/perl require 'jcode.pl'; #--------------------------------------------------------------------- # URLで指定された引数、あるいは、フォームデータの取得ルーチン #--------------------------------------------------------------------- &form; #---------------------------------------- # HTMLとして認識させるヘッダの出力 #---------------------------------------- print "Content-type: text/html\n\n"; #--------------------------------------------------------------------- # HTML(画面)の出力 # 行は詰めること。 # ソース上で行を空けたい場合(改行)は\nを使うこと。 # 文字化けするときはその文字の直後に\を記入する。(例:機能\、表\示) #--------------------------------------------------------------------- print <<"EOF"; <HTML>\n<HEAD>\n <TITLE>$FORM{'title'}</TITLE>\n</HEAD>\n\n <BODY BGCOLOR="#ffffff" TEXT="#000000" LINK="#4444ff" VLINK="#f555555" ALINK="#8888ff">\n\n <FONT SIZE=+2><B>$FORM{'title'}</B></FONT>\n <HR> EOF #---------------------------------------- # 説明文があれば表示 #---------------------------------------- if ( $FORM{'value'} ne "" ) { print <<"EOF"; <BLOCKQUOTE>\n$FORM{'value'}</BLOCKQUOTE>\n<HR> EOF } #---------------------------------------- # 画像の表示 #---------------------------------------- print <<"EOF"; <DIV ALIGN="center"> <IMG SRC="$FORM{'file'}"> </DIV>\n\n </BODY>\n</HTML> EOF #-------------------------------------------------------------- # URLで指定された引数、あるいは、フォームデータの取得ルーチン #-------------------------------------------------------------- sub form { if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; #-------------------------------------------------------------- # 記録するデータの半角カナを全角カナに変換(jcode.plのv2.0以降) #-------------------------------------------------------------- &jcode'h2z_sjis(*value); #---------------------------------- # 記録するデータはsjisに統一する #---------------------------------- &jcode'convert(*value,'sjis'); $FORM{$name} = $value; } }