1

cgi_error() がいつ発生するかに基づいて何かをテストする必要がある perl -cgi スクリプトがあります。cgi_error() 関数が呼び出されるシナリオを教えてください。私は以下を試しました

  1. スクリプトの所有者と権限を変更しました

しかし、それはこれまでのところ役に立ちませんでした。

これはコードスニペットです

use CGI qw(-compile :standard);
.....

 if (cgi_error()) {
...
}

スクリプトで cgi_error() がいつ自動的に呼び出されるかを説明できる人がいれば、それは素晴らしいことです。

4

1 に答える 1

1

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」というメッセージが返されます。

于 2012-09-24T14:16:13.950 に答える