我有一个 perl -cgi 脚本,我需要根据 cgi_error() 发生的时间来测试一些东西。有人可以让我知道在什么情况下调用 cgi_error() 函数。我在下面试过
- 更改了脚本的所有者和权限
但这到目前为止还没有帮助。
这是代码片段
use CGI qw(-compile :standard);
.....
if (cgi_error()) {
...
}
如果有人能解释何时在脚本中自动调用 cgi_error(),那就太好了。
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”。