【问题标题】:Why doesn't my Perl CGI script work?为什么我的 Perl CGI 脚本不起作用?
【发布时间】:2010-11-16 05:12:43
【问题描述】:

我真的不知道如何运行 Perl 文件。我已将我的 .pl 上传到 cgi-bin,然后 chmod 到 755。然后当我运行该文件时,我只收到 500 内部服务器错误。

**/cgi-bin/helloworld.pl**


#!/usr/bin/perl

print 'hello world';

关于我做错了什么有什么想法吗?

【问题讨论】:

  • 您的网络服务器错误日志是否提供任何启发性信息?
  • 哪个网络服务器,哪个操作系统?
  • 我在 cpanel 的错误日志中看不到任何内容。我是unix linux。
  • 与您的问题无关,但首选 #!/usr/bin/env perl
  • @William Pursell 不,不是。

标签: perl cgi


【解决方案1】:

阅读官方Perl CGI FAQ

这将回答这个问题以及您可能遇到的许多其他问题。

例如:"My CGI script runs from the command line but not the browser. (500 Server Error)"

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    你可能需要类似的东西

    print "Content-type: text/html\n\n";
    

    在您的打印声明之前。看看http://httpd.apache.org/docs/2.0/howto/cgi.html#troubleshoot

    了解您使用的服务器以及服务器日志中显示的确切错误消息会有所帮助。我猜,如果您使用的是 Apache,您会看到类似“脚本头过早结束”的信息。

    【讨论】:

    • 刚刚添加了那行,它没有帮助。
    • 使用这样的打印被认为是错误的形式。查看 CGI 模块。
    【解决方案3】:

    研究使用CGI::Carp 将致命错误输出到浏览器。 use CGI::Carp qw(fatalsToBrowser);

    另外,请务必使用CGI module 输出任何需要的信息,例如 headers/html/whatever。全部打印出来是错误的做法。

    编辑:您也肯定能够检查某种错误日志。

    【讨论】:

    • 不要使用 CGI 模块进行输出。那是 1990 年。改用模板。 :)
    【解决方案4】:

    也许你需要我的Troubleshooting Perl CGI scripts

    【讨论】:

      【解决方案5】:

      首先,找出该系统上perl 的路径,并确保shebang 行是正确的。提供有关系统和 Web 服务器的更多信息也有助于其他人进行诊断。

      然后,试试:

      #!/path/to/perl/binary
      
      use strict;
      use warnings;
      
      $| = 1;
      
      use CGI qw( :default );
      
      print header('text/plain'), "Hello World\n";
      

      【讨论】:

      • 不,没有用。路径肯定是 /usr/bin/perl 操作系统是 linux,它的 apache
      • @Paul 你只是在串通一气:如果没有错误日志中的条目,你不会从 Apache 获得 500 状态。在错误日志中发布信息。在没有信息的情况下不断尝试猜测是没有意义的。
      • 我查看了 cpanel >> 错误日志,但里面什么也没说
      • w3.org/Protocols/rfc2616/rfc2616-sec4.html:HTTP头字段,包括general-header(4.5节)、request-header(5.3节)、response-header(6.2节)和entity-header(7.1节)字段,遵​​循与 RFC 822 的第 3.1 节中给出的相同的通用格式。每个标题字段由一个名称后跟一个冒号(“:”)和字段值组成。字段名称不区分大小写。
      【解决方案6】:

      确保您可以从 shell 提示符运行脚本,而无需通过 Perl 调用它。换句话说,你应该可以进入你的 cgi-bin 目录并输入:

      ./helloworld.pl
      

      并获得输出。如果这不起作用,请修复它。在查看输出时,第一行必须是:

      Content-Type: text/html
      

      (或 text/plain 或其他一些有效的 MIME 类型。)

      如果不是这样,请修复它。

      那么在打印页面正文之前必须有一个空行。如果没有空行,您的脚本将无法作为 CGI 脚本运行。所以你的总输出应该是这样的:

      Content-Type: text/html
      
      hello world
      

      如果你可以运行你的脚本并且这是输出,那么就会发生一些奇怪的事情。如果 Apache 没有将错误记录到某处的 error_log 文件中,那么它可能存在问题。

      【讨论】:

        【解决方案7】:

        您是否启用了 Apache 以将 .pl 文件作为 CGI 脚本服务器?检查您的 Apache 配置文件,或者(快速但不保证测试)尝试将文件扩展名更改为 .cgi。另外,请确保您的 shebang 行 (#!) 位于最顶部。最后,如果您的服务器是 Linux,请检查行尾是否为 Unix。是的,从命令行测试它,use strict; 以获得对潜在错误的更好反馈。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-31
          • 1970-01-01
          • 2012-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-17
          • 1970-01-01
          相关资源
          最近更新 更多