0:00
 
Window Title
 
 
 
 
 
 
 
 
壁紙の変更

コンピュータ

ネットワーク

ドキュメント

ごみ箱
マイコンピュータ
マイネットワーク
マイドキュメント
ごみ箱

オンラインゲーム

DHTML素材

perl module 忘備録

RFC翻訳

文字コード

 

コンピュータ

ネットワーク


コントロールパネル

perl module 忘備録

CGI

CGIインタフェースをサポートする

テンコ盛りの機能があるが、使いそうなもののみ抜粋。

use CGI;
普通は、この形式でパッケージをロードする。

use CGI qw/:standard/;
関数を現在の名前空間にインポートする。
インスタンスを生成せずに、関数呼び出し形式の機能が使える。CGI.pmを使ってHTMLを直接出力する場合は便利そうだが、そもそも、そんな事はしない方が身のためなので非推奨。

$cgi = new CGI;
インスタンスの生成。

$cgi = new CGI({'key1'=>'value1', 'key2'=>'value2'},…);
パラメタを直接指定してインスタンスを生成。デバックするときには便利そう。

@in = $cgi->param;
パラメタ名のリストを返す。

$in = $cgi->param($key);
名前$keyを持つパラメタの値を返す。複数の値を持つパラメタの場合はリストを返す。

$in = $cgi->Vars;
全てのパラメタをキーに持つハッシュリファレンスを返す。パラメタは、$in->{'foo'}などによってアクセスできる。
複数の値を持つパラメタは、\0で区切られたパックされた文字列にアクセスする事になる。この手のパラメタは、別途paramメソッドでリストを取得した方が簡単。

%in = $cgi->Vars;
全てのパラメタをキーに持つハッシュを返す。パラメタは、$in{'foo'}などによってアクセスできる。CGI::Liteと互換性のある方法を実現できる。
複数の値を持つパラメタは、\0で区切られたパックされた文字列にアクセスする事になる。この手のパラメタは、別途paramメソッドでリストを取得した方が簡単。

$cgi->param(-name=>$key, -value=>$value);
$cgi->param(-name=>$key, -values=>@values);
パラメタに値を設定する。-valuesにリストを渡した場合は、複数の値を持つパラメタを設定できる。

$cgi->delete(@keys);
パラメタを削除する。

$cgi->delete_all();
全てのパラメタを削除する。

$cgi->import_names($name_space);
名前空間$name_spaceを生成して、全てのパラメタをインポートする。例えば、$name_spaceが'IN'であれは、パラメタを$IN::fooとか、@IN::fooで読み出せるようになる。CGI::Liteとの互換性を考えないのであれば、この方法でパラメタ読出しを行った方が便利。

$cgi->cookie($key);
名前$keyを持つクッキーの(URLデコード済みの)値を返す。

$cgi->cookie(-name=>$key,-value=$value);
クッキーに値を設定してクッキー文字列を返す。下記のパラメタを指定できる。
-expires=>クッキーの有効期限('+1h'などの相対時間も指定可。'-1h'など過去の期限を指定するとcookieを削除できる)
-path=>クッキーが有効となるパス
-domain=>クッキーが有効となるドメイン
URLエンコードは、CGIモジュール内部でやってくれるので、事前にエンコードする必要はない。

$cgi->save(FILEHANDLE);
パラメタをFILEHANDLEに保存する。読出しは、new CGI(FILEHANDLE)。

$cgi->cgi_error;
CGIの処理中に発生したエラーを返す。HTTPステータスコード形式でフォーマットされるので、下記のような使い方ができる。
my $result = $cgi->cgi_error;
if ($result) {
    print $cgi->header(-status=$error);
    $cgi->start_html('ERROR');
    $cgi->string($error);
    exit;
}

$cgi->header;
HTTPヘッダを返す。日本語のHTMLページを表示するには、charsetパラメタが必須なので、必ず下記のパラメタ付きのメソッドを使う。
$cgi->header(-type=>'text/html',-charset=>$charset);
パラメタには、以下のものも指定できる。
-status=>HTTPステータス
-expires=>ページの有効期間(ブラウザの実装によるので、正しく動くか疑わしい)
-cookie=>$cookie
$cookieは、cookieメソッドによって生成されたcookie文字列。複数のcookieを設定する場合は、配列リファレンスを指定する(-cookie->[$cookie1,$cookie2])。
-attachment=>添付ファイル名
添付ファイル:ブラウザに依存するが、ページを表示する代りにファイルに保存するためのプロンプトを表示する。-type=>'application/octet-stream' を指定した方が互換性が高いらしい。

$cgi->start_html;
HTMLヘッダ(<HTML><HEAD>~</HEAD><BODY>まで)を返す。下記のパラメタを指定する事によって<HEAD>~</HEAD>内のタグを生成できる(使いそうなものだけ抜粋)。
-title=>$title
-meta=>%metas   ※例:$metas{'http-equiv'}='Content-Type';
             $metas{'content'}='text/html';
             $metas{'charset'}='shift_jis';
-style=>{'src'=>$css_file}
-script=>$script_source | {-language=>'javascript',-src=$script_file}

$cgi->end_html;
</BODY></HTML>を返す。

$fh = $cgi->upload($field_name);
ファイルアップロードフィールドにアップロードされたファイルを開いてファイルハンドル※を返す(クライアント側での元ファイル名は、ファイルアップロードフィールドのパラメタ値に設定されている)。
※lightweight filehandleと呼ばれており、IO::HandleのLite版だが、ほぼファイルハンドルと同様に使える。

$cgi->uploadInfo($fh)->{'content'};
アップロードファイルのMIMIEタイプを返す。

その他、<BODY>内のタグを生成するメソッドが多数あるが、当然のことながらまともなレイアウトを作るのは大変なので、別の手段で生成する事を推奨。下記の関数は使えそう。

redirect(-uri=>$url,-nph=>1,-status=>$stat);
$urlにリダイレクトするHTTPヘッダを出力する。
-nph=>1:no-parse-headerを使用する場合に指定する。IISでは必須。
-status=>$stat:HTTPステータスを指定する。リダイレクトする場合は、下記の3種類のうちどれか。
   301 Moved Permanently
   302 Found
   303 See Other
この関数をインポートするには、use CGI qw/:cgi/

レディ