blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_2

Perl 「 モジュール 」 CGI 実用的なファイルアップロード 09 エラーの処理手順 (0x116)

Perl 「 モジュール 」 CGI 実用的なファイルアップロード 09 エラーの処理手順 (0x116)

目次 - Perl Index



Theme



Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x116 回。

CGI.pm で、実用的なファイルアップロードの処理を確認する。その 09 回。「 $CGI::POST_MAX 」で設定したファイルサイズ超過エラーを検知した際の処理手順を確認する。



エラー処理のプログラムコード



(0x10d) から確認している、「 実用的なファイルアップロード 」のためのソースコード ( via: Cgi upload - perlmeme.org ) では、サイズ超過エラーの検知とその後の処理を次の様に行っています。


if (!$q->param('filename') && $q->cgi_error()) {
print $q->cgi_error();
print <<'EOT';
<p>
The file you are attempting to upload exceeds the maximum allowable file size.
<p>
Please refer to your system administrator
EOT
print $q->hr, $q->end_html;
exit 0;
}



if 文の条件式は (0x113) で、直後のメソッド cgi_error() の出力は (0x114) で確認しました。


ヒアドキュメントのメッセージを出力する



サイズ超過のエラー検知後は、まず、メソッド cgi_erorr() によって HTTP ステータスの内容を出力し、続いて「 ヒアドキュメント 」を利用してより詳細な情報をユーザに案内しています。

ヒアドキュメントの内容は、次のものです。メッセージには日本語も追加しました。出力は HTML で行われるため、文章の整形に「 p 」( paragraph ) 要素と「 br 」( forced line break ) 要素を含めています。

??: 実体参照で記述した br 要素が有効になっているのはなぜなんだぜ ?


print <<'EOT';
<p>
The file you are attempting to upload exceeds the maximum allowable file size.
<br>
( ファイルは あなたがアップロードしようとしている 超えています 最大許容ファイルサイズを. )
<p>
Please refer to your system administrator
<br>
( 照会してください あなたのシステム管理者に. )
<p>
EOT




ヒアドキュメントは、(0xd7) 等で確認した、文字列リテラルをプログラム内に埋め込む手法のひとつです。例えば次の様に、メッセージを変数に代入しておくことも可能です。


my $heredoc = <<'HERE';
こんにちわ。
ヒアドキュメントです。
ふふふ。
HERE

print "$heredoc\n";


スカラ変数「 $heredoc 」を出力すると次の結果が得られます。


こんにちわ。
ヒアドキュメントです。
ふふふ。



この様に、通常ヒアドキュメント内の改行は、改行として処理されるので、改行文字「 \n 」の記述は不要です。しかしながら、CGI プログラムでは、ドキュメントを HTML として出力・表示するため、実用的なプログラムでは、「 p 」要素や「 br 」要素を使って改行/段落を追加している訳です。

Note: ヒアドキュメントを開始する「 << 」と識別子の文字列の間にスペースを入れてはいけません。


罫線と HTML のエンドタグの挿入およびプログラムの終了



ヒアドキュメントのメッセージを出力した後は、HTML の「 hr 」( horizontal rule ) 要素による区切りの平行線と、HTML ページを終了するための「 html 」エンドタグをメソッド「 html_end() 」によって挿入しています。


print $q->hr, $q->end_html;
exit 0;
}



最後に記述された「 exit 0 」は、Perl の組込み関数「 exit 」を使ったプログラムの終了を意味します。引数として渡される数値「 0 」は、正しい処理を行ったことを意味します。

つまり、サイズ超過による CGI エラーを検出したプログラムは、ユーザに必要なメッセージを出力した後で、直ちにプログラムを終了します。


Web ブラウザ上での表示



上記エラー処理による出力は、Web ブラウザ上では次の様に表示されます。ここでは Google Chrome 38.0 を利用しています。

Perl 「 モジュール 」 CGI 実用的なファイルアップロード 09 エラーの処理手順 (0x116)


0x116-> 0x117 へ



次回は、ファイルのアップロード処理を確認します。


参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。

目次 - Perl Index
















同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲