如何在perl-cgi脚本中调用cgi_error()函数

时间:2012-09-24 14:07:57

标签: perl cgi

我有一个perl -cgi脚本,我需要根据cgi_error()发生的时间来测试一些东西。有人可以告诉我在什么情况下调用cgi_error()函数。我试过下面的

  1. 更改了脚本的所有者和权限
  2. 但到目前为止这没有任何帮助。

    这是代码段

    use CGI qw(-compile :standard);
    .....
    
     if (cgi_error()) {
    ...
    }
    

    如果有人可以解释在脚本中自动调用cgi_error()的话会很棒。

1 个答案:

答案 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太大”。