-
parse_form_data
-
これは全てのタイプのリクエストを取り扱います。:GET, HEAD およびPOST
(両方のエンコードメソッドに対して)。
multipart/form-dataに対して、アップロードされたファイルは
ユーザが選択したディレクトリに保存されます。
(set_directory
参照)
ファイルは次のような形式で命名されます。
/some/dir/filename.timestamp
filenameは``Content-disposition''ヘッダで定義されます。
戻り値
ハッシュへの参照あるいはハッシュそれ自体を戻します。
それには、全てのキー/値のペアが含まれています。
ファイル情報を含むフィールドについては、
その値にはファイルへのパスあるいはファイルハンドルのどちらかが含まれています。
(set_file_type
メソッド参照)
制約
このモジュールは1つのフィールド内にある
複数のファイルを取り扱うことはできません。
どちらにしてもNetscape 2.0はこれをサポートしていませんので、
心配には及びません。
-
set_platform
-
この関数はアップロードされるテキストファイル用の改行文字を設定します。
その結果、特定のプラットホーム上で適切に表示されるようになります
(あなたのHTTP サーバが走っているプラットホーム)。
次のうちいずれかを指定できます。:
UNIX EOL:
PC EOL:
Macintosh EOL:
デフォルトは, ``UNIX''と想定して設定されています。
-
set_directory
-
これは、アップロードされたファイルが保存されるディレクトリを
設定するのに使われます。
(multipart/form-dataエンコーディングスキーマに適用するだけ)
この関数は
parse_form_data、
を呼ぶ前に呼ばれるべきです。
さもないと、ディレクトリは``/tmp''へデフォルト設定されます。
どんな理由にせよアプリケーションがディレクトリに書き込むことが出来ない場合、
エラーステータスが戻ります。
戻り値
0 失敗
1 成功
-
set_file_type
-
デフォルトでは、アップロードされたファイル名は
parse_form_data
メソッドによって戻されるハッシュの中に保存されます。
しかしながら、このサブルーチンに文字列 ``handle''を渡す場合、
新規に生成されたファイルへのファイルハンドルが戻されます。
この関数は、
parse_form_data
を呼ぶ前に呼ばれるべきです。さもないと、ファイル名が戻されます。
-
print_form_data
-
全てのキー/値のペアを表示するのに使われます。
戻り値
なし
以下にこのモジュールのいくつかの関数を解説する4つの例を示します。
あなたのフォーム処理プログラムにそのままこれらを使用することができます。
#!/usr/local/bin/perl5
# print_form_dataメソッドを使ってキー/値のペアを出力
#
use CGI_Lite;
$cgi = new CGI_Lite ()
# メソッドからの戻り値は無視される
$cgi->parse_form_data ();
print "Content-type: text/plain", "\n\n";
$cgi->print_form_data ();
exit (0);
#!/usr/local/bin/perl5
# print_form_dataメソッドと同じ機能を実行する簡単な例
use CGI_Lite;
$cgi = new CGI_Lite ();
# 戻り値は$dataに保存される。$dataにはハッシュへの参照が含まれている。
# エレメントにアクセスするためには、それを参照分解(dereference)しなければ
# ならない。 (例: $$data{'readme'} あるいは %$data)
$data = $cgi->parse_form_data ();
print "Content-type: text/plain", "\n\n";
foreach $key (keys %$data) {
print $key, " = ", $$data{$key}, "\n";
}
exit (0);
#!/usr/local/bin/perl5
# parse_form_data メソッドのコンテキストが
# 連想配列である (参照分解が無用!)ということを除いては、
# 以前の例と非常によく似ている。
use CGI_Lite;
$cgi = new CGI_Lite ();
%data = $cgi->parse_form_data ();
print "Content-type: text/plain", "\n\n";
foreach $key (keys %data) {
print $key, " = ", $data{$key}, "\n";
}
exit (0);
#!/usr/local/bin/perl5
# multiform/form-dataリクエストの中の"readme" フィールドと関連した
# ファイル名を表示する簡単な例t
use CGI_Lite;
$cgi = new CGI_Lite ();
# ディレクトリが無効(例:存在しない、読出や書込ができない、
#あるいはディレクトリではない)であればDieする。
$cgi->set_directory ("/usr/shishir")
|| die "ディレクトリが存在しない。\n";
# Set the platform (とりあえずUNIXをデフォルトとした)
$cgi->set_platform ("UNIX");
# ファイルハンドルを戻すようモジュールに伝える
$cgi->set_file_type ("handle");
$data = $cgi->parse_form_data ();
print "Content-type: text/plain", "\n\n";
# ファイルハンドルを得る変数を参照分解(dereference)する。
# それからそのファイルを繰り返し読込み、STDOUTへ各行を表示する。
#
# 注意: $filenameはファイルの名前も含んでいる。
$filename = $$data{'readme'};
while (<$filename>) {
print;
}
# 確実にファイルハンドルをcloseする。
close ($filename);
exit (0);
#!/usr/local/bin/perl5
# キー/値のペアを簡単に表示する。下記に、
# multipart/form-dataリクエストに対して出力がどのように見えるのかを示す。
#
# Content-type: text/plain
#
# full_name = Foo Bar
# picture = /usr/shishir/bar.gif_812186386
# readme = /usr/shishir/bar.txt_812186386
use CGI_Lite;
$cgi = new CGI_Lite ();
$cgi->set_directory ("/usr/shishir")
|| die "ディレクトリが存在しない。\n";
$data = $cgi->parse_form_data ();
print "Content-type: text/plain", "\n\n";
$cgi->print_form_data ();
exit (0);
さまざまな他のPerl 5.0 CGI モジュールもみるべきですし、
あなたに最もよく合うものを使用すべきです。
さらに多くの情報が入用なら、下記でCGI モジュール開発リストを
購読することができます。
CGI-perl@webstorm.com
詳細は、Marc Hedlund (hedlund@best.com) に連絡を取って下さい。
このリストは一般的なCGI サポート用ではありません。
Perl 5.0 CGI モジュール開発だけを取り扱っています。
CGI モジュールは Lincoln Stein
(lstein@genome.wi.mit.edu)
によって保守されており、彼のWWW サイトで見つけることができます。
http://www-genome.wi.mit.edu/WWW/tools/scripting
-
v1.62 - 1月17日,1996年
-
parse_multipart_data サブルーチンを修正し、
set_file_typeが
``handle'' パラメータでcallされる場合は、
ファイルハンドルとしてファイル名を戻すようになった。
callしているパッケージを決定するためにdetermine_package関数を追加した。
-
v1.61 - 1月1日,1996年
-
マイナーなバグ修正の結果、
あるバイナリファイルからは行末文字が取り除かれるようになった。
-
v1.6 - 12月30日, 1995年
-
ブラウザが``Content-Disposition''ヘッダの後に送信する(であろう)他のヘッダ情報を
処理するためのコードを追加。
set_platform 関数を追加。アップロードされたテキストファイルが
正しく表示されるようになった。
関数 set_file_type はもうステータスを戻さない。
コード内のspacingを訂正。
-
v1.5 - 11月13日, 1995年
-
(その前のフィールドが大きすぎたか小さすぎた時に)いくつかのフィールドが失われるという、
2つの重大なバグを訂正。
正規のフォームフィールドの中に``\r\n'' 文字がないことを確実にするコードを追加。
異なったプラットホーム(例: Macintosh と PC) から
アップロードされた情報を含んだTextarea エレメント及びフィールドは
``\r'' 文字を含むようになるでしょう。
-
v1.4 - 10月15日, 1995年
-
pod スタイルの資料を追加。次のようにすることでマニュアルページを参照できるように
なった。
pod2man CGI_Lite.pm | nroff -man | more
[訳注:このnroffコマンドはmanページを整形するものでおそらくUNIX以外では使えません。
Windowsではpod2htmlスクリプトの方が便利でしょう。]
また、parse_form_data
メソッドを修正し、(配列コンテキスト内でcallされた場合)実際の連想配列を戻すことが
できるようになった。
-
v1.3 - 10月12日, 1995年
-
parse_multipart_data メソッドを完全に修正。もう
マルチパートメッセージを行毎に読んだりせず、
、かなりの小型ブロック(あるいは ``chunks'')で読むようになった。
また、Netscapeをハングさせていた主要なバグを排除した。
いくつかのブラウザはヘッダ行の終わりで``\r\n''文字列を送信しないので、
。parse_multipart_data メソッドはそれらが
あるかどうか調べて削除する。
またこれで、ファイルにサンプルリクエストを保存して、それを
プログラムにパイプで渡すことでmultipart/form-dataリクエストを
エミュレートすることができるようになった。
cat multipart.txt | test.pl
-
v1.2 - 10月12日, 1995年
-
保存されたファイル用のファイルハンドルを戻すメソッドを
set_file_type
に追加。
-
v1.1 - 10月10日, 1995年
-
環境変数CONTENT_TYPEがエンコード部分の種別を決定するのに使われる。
v1.0では、POSTリクエストの本体部が構文解析されていた。
無効なディレクトリが
set_directory
メソッドに渡された場合、
このモジュールはもうエラー メッセージを吐き出さない。
代わりに、失敗を示す 0というステータスを戻す。
-
v1.0 - 9月 26日, 1995年
-
初期リリース
Copyright (c) 1995 by Shishir Gundavaram
All Rights Reserved
Permission to use, copy, and distribute is hereby granted,
providing that the above copyright notice and this permission
appear in all copies and in supporting documentation.