はcgi_error
「自動的に」呼び出されません。ただし、状況によっては、問題が発生したかどうかを確認するための情報が返されます。
CGI ドキュメントから:
CGI エラーの検索
ユーザー入力の処理中、特にアップロードされたファイルの処理中にエラーが発生する可能性があります。これらのエラーが発生すると、CGI は処理を停止し、空のパラメーター リストを返します。関数を使用して、エラーの存在と性質をテストできcgi_error()
ます。エラー メッセージは、HTTP ステータス コードとしてフォーマットされます。エラー テキストを HTML ページに組み込むか、HTTP ステータスの値として使用できます。
my $error = $q->cgi_error;
if ($error) {
print $q->header(-status=>$error),
$q->start_html('Problems'),
$q->h2('Request not processed'),
$q->strong($error);
exit 0;
}
関数指向のインターフェイス (次のセクションを参照) を使用する場合、最初に を呼び出したときにのみエラーが発生することがありますparam()
。これに備えてください!
と
中断されたファイルのアップロードの処理
アップロードされたファイルの解析に関連する問題が発生することがあります。これは通常、アップロードが完了する前にユーザーが「停止」を押したときに発生します。この場合、CGI.pm はアップロードされたファイルの名前に対して undef を返しcgi_error()
、文字列 "400 Bad request (malformed multipart POST)" に設定します。このエラー メッセージは、ブラウザに送信されるステータス コードに組み込むことができるように設計されています。例:
$file = $q->upload('uploaded_file');
if (!$file && $q->cgi_error) {
print $q->header(-status=>$q->cgi_error);
exit 0;
}
と
バイトより大きい POST を送信しようとする$POST_MAX
と、param() は空の CGI パラメータ リストを返します。このイベントをテストするにcgi_error()
は、CGI オブジェクトを作成した後、または関数指向のインターフェイスを使用している場合param()
は最初に を呼び出します。POST が傍受された場合、cgi_error()
「413 POST too large」というメッセージが返されます。