我有一个perl -cgi脚本,我需要根据cgi_error()发生的时间来测试一些东西。有人可以告诉我在什么情况下调用cgi_error()函数。我试过下面的
但到目前为止这没有任何帮助。
这是代码段
use CGI qw(-compile :standard);
.....
if (cgi_error()) {
...
}
如果有人可以解释在脚本中自动调用cgi_error()的话会很棒。
答案 0 :(得分: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太大”。