【问题标题】:Internal Server Error 500 on Apache for perl scriptApache 上用于 perl 脚本的内部服务器错误 500
【发布时间】:2016-03-10 05:50:58
【问题描述】:

我的 cgi-bin 中有一个 perl 脚本。它首先打印出以下语句

print "Status: 200 OK\nContent-Type: text/html\n\n";

它在终端上完美地生成了一个html表单,但是当我尝试在浏览器上运行它时,它给出了以下错误

Internal Server Error 服务器遇到内部错误或 配置错误,无法完成您的请求。请 联系 [no address given] 的服务器管理员通知他们 发生此错误的时间,以及您刚刚执行的操作 在此错误之前。

我在apache配置中启用了cgi-bin,错误日志打印如下错误

头文件前的脚本输出结束

可能是什么问题以及我应该如何解决它

【问题讨论】:

    标签: apache perl internal-server-error cgi-bin


    【解决方案1】:

    您必须首先将 Content-Type 打印回屏幕。还要确保脚本设置为可执行。

    print "Status: 200 OK\nContent-Type: text/html\n\n";
    

    应该是:

    print "Content-Type: text/html\n\nStatus: 200 OK\n";
    

    【讨论】:

    • 我做了,它没有工作,状态200只是检查它是否在终端上生成一个表单,脚本可执行你认为我们应该做什么?
    • 我做了,得到以下错误 [cgid:error] End of script output before headers
    • 上面的脚本是完整的脚本,对吗?您的服务器上有 SSH 访问权限吗?如果是这样,请尝试在 SSH 中运行脚本 (perl )
    • 不,它不是完整的脚本,它太长并且还会生成 HTML 输出。在从终端运行脚本后,我检查了通过将输出复制并粘贴到 HTML 文件中生成的表单,该 html 文件单独工作正常,只是不适用于 apache。你认为我们应该怎么做?
    • 为了测试我所做的是把 print "test"; __END__ 在我的代码中并继续逐行运行,直到找到导致崩溃的违规行。
    【解决方案2】:

    该脚本还需要由 Apache 执行才能运行

    chmod a+x YourScript.pl
    

    我已经使用以下脚本进行了测试,一旦我修复了权限,它就可以正常工作。您也只需要设置状态,如果它不是 200,因为这是默认值。

    #!/usr/bin/perl
    
    use strict;
    print "Status: 200\nContent-Type: text/html\n\n";
    
    print "<p>Foo</p>";
    

    【讨论】:

    • 脚本是可执行的,并且给出了同样的错误,你认为我们应该怎么做?
    • 你可以试试我上面提供的脚本,看看是否有效?
    • 看来问题出在您的代码上。鉴于您在日志中没有收到任何其他错误,可能的问题是您的脚本没有输出任何内容,甚至没有输出标题。
    猜你喜欢
    • 1970-01-01
    • 2016-10-28
    • 2015-09-26
    • 2013-11-13
    • 2015-02-12
    • 2015-11-22
    • 2018-11-14
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多