Perl Perl_2
Perl 「 モジュール 」 CGI 実用的なファイルアップロード 05 フォーム作成 (0x112)

目次 - Perl Index
Theme
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x112 回。
CGI.pm で、実用的なファイルアップロードの処理を確認する。その 05 回。HTML フォームの作成部分の内「 HTML フォームの作成 」と「 ファイルフィールド 」および「 サブミットボタン 」を確認します。
プログラム フォームの作成。
今回は、 Cgi upload - perlmeme.org で紹介されている、ファイルアップロードのための実用的なコードの、HTML フォーム作成部分を確認します。
# 見出し, フォームスタート
print $q->h3('Use this form to upload a local file to the wev server'),
$q->stat_multipart_form(
-name => 'main_form');
# ファイルフィールド
print 'Enter a filename, or click on the browse button to choose one: ',
$q->filefield(
-name => 'filename',
-size => 40,
-maxlength => 80);
# サブミットボタン
print $q->hr;
print $q->submit( -value => 'Upload the file');
print $q->hr;
# フォームエンド
print $q->end_form;
スタートフォーム
HTML フォームを開始するために、ここでは、メソッド「 start_multipart_form() 」を呼び出しています。
print $q->h3('Use this form to upload a local file to the wev server'),
$q->stat_multipart_form(
-name => 'main_form');
メソッド start_multipart_form() は、(0xfe) で確認した「 enctype 」を、明示的に「 MULTIPART 」( multipart/form-data ) に指定するメソッドです。
enctype は、(0xfc) で確認した POST メソッドのコンテンツタイプを指定しますが、通常のメソッド「 form_start() 」は、デフォルトで MULTIPART を設定するので、基本的にはメソッド start_multipart_form() を使う必要はありません。
ただし、通常は「 XHTML 1.0 」で生成される Web ページを「 HTML 」で生成するために、CGI.pm でプラグマ「 -no_xhtml 」を指定する等した場合は、メソッド start_form() は enctype に「 URL_ENCODED 」( application/x-www-form-urlencoded ) を自動的に設定するので、この場合は、明示的に MULTIPART を指定するメソッド start_multipart_form() を使います。
もちろん、通常のメソッド start_form() でも、(0xfd) で確認したパラメータ 「 enctype 」を利用した方法でコンテンツタイプを指定することも可能です。
プラグマ -no_xhtml については、(0xcb) で確認し、各種プラグマについては (0xcd) でまとめました。
なお、メソッド start_form は、(0xfc) で確認した通り、デフォルトで、メソッドに「 POST 」、アクションに「 this script 」を指定します。特に必須とされるパラメータも無いため、デフォルトの設定で問題が無い場合は次の記述だけでも問題はありません。
$q->start_from();
ファイルフィールドとサブミットボタンの作成
ファイルアップロードのための、ファイルフィールドを作成します。この例では、ファイル選択のボタンに対して説明文を追加しています。
文の内容は「 Enter a filename, or click on the browse button to choose one 」( 入力してください ファイル名を, または クリックして ブラウズ ( 参照 ) ボタンを いずれかを選択してください ) です。
# Firefox では「 参照 」ボタン、Chrome では「 ファイルを選択 」ボタンになります。
print 'Enter a filename, or click on the browse button to choose one: ',
$q->filefield(
-name => 'filename',
-size => 40,
-maxlength => 80);
ファイルフィールドの作成には、メソッド「 filefield() 」を利用します。(0x108) で確認した通り、このメソッドは、ファイルアップロードのインタフェースを提供するだけなので、アップロードの処理は別途記述する必要があります。
次に、投稿用のサブミットボタンを作成するために、メソッド「 submit() 」を呼び出します。
print $q->hr;
print $q->submit( -value => 'Upload the file');
print $q->hr;
最後に、HTML フォームを終了するメソッド「 end_form() 」を呼び出します。これで、HTML フォームの作成は完了です。
print $q->end_form;
0x112 -> 0x113 へ
次回は、「 $CGI::POST_MAX 」で設定したファイルサイズのチェック方法を確認します。
参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。
目次 - Perl Index
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)