1

我有一个 perl -cgi 脚本,我需要根据 cgi_error() 发生的时间来测试一些东西。有人可以让我知道在什么情况下调用 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_MAX字节的 POST 将导致 param() 返回一个空的 CGI 参数列表。您可以在创建 CGI 对象之后通过检查来测试此事件cgi_error(),或者,如果您使用的是面向函数的接口,param()则第一次调用。如果 POST 被拦截,则cgi_error()返回消息“413 POST too large”。

于 2012-09-24T14:16:13.950 回答