Apache中的“标题之前的脚本输出结束”错误

时间:2014-03-10 17:50:53

标签: apache perl

当我尝试访问我的Perl脚本时,Windows上的Apache给出了以下错误:

Server error!

The server encountered an internal error and was unable to complete your request.

Error message: 
End of script output before headers: sample.pl

If you think this is a server error, please contact the webmaster.

Error 500

localhost
Apache/2.4.4 (Win32) OpenSSL/1.0.1e PHP/5.5.3

这是我的示例脚本

#!"C:\xampp\perl\bin\perl.exe"
print "Hello World";

但不使用浏览器

12 个答案:

答案 0 :(得分:17)

检查文件权限。

在设置了错误权限的Linux计算机上,我遇到了完全相同的错误。

chmod 755 myfile.pl

解决了这个问题。

答案 1 :(得分:15)

如果这是网络的CGI脚本,那么您必须输出标题:

#!"C:\xampp\perl\bin\perl.exe"

print "Content-Type: text/html\n\n";
print "Hello World";

以下错误消息会告诉您End of script output before headers: sample.pl

甚至更好,使用CGI模块输出标题:

#!"C:\xampp\perl\bin\perl.exe"

use strict;
use warnings;

use CGI;

print CGI::header();
print "Hello World";

答案 2 :(得分:7)

供将来参考:

这通常是您无法查看或执行文件时发生的错误,其原因通常是权限错误。我将首先关注@Renning的建议并运行chmod 755 test.cgi(显然将test.cgi替换为你的cgi脚本的名称)。

如果这不起作用,您可以尝试其他一些事情。当我在另一个用户的家中以root身份创建test.cgi时,我曾遇到此错误。修复程序是运行chmod user:user test.cgi,其中user是您所在的用户的名称。

我能想到的最后一件事是确保你的cgi脚本返回正确的标题。在我的ruby脚本中,我通过在实际输出任何内容之前放置puts "Content-type: text/html"来完成它。

快乐的编码!

答案 3 :(得分:5)

这可能是一个SELinux块。试试这个:

# setsebool -P httpd_enable_cgi 1
# chcon -R -t httpd_sys_script_exec_t cgi-bin/your_script.cgi

答案 4 :(得分:4)

在raspberry-pi上有同样的错误。我通过将-w添加到shebang

来修复它
#!/usr/bin/perl -w

答案 5 :(得分:3)

如果使用Suexec,请确保脚本及其目录归您在suexec中指定的用户所有。

此外,请确保运行cgi脚本的用户具有对文件和shebang中指定的程序执行权限的权限。

例如,如果我的cgi脚本以

开头
#! /usr/bin/cgirunner

然后用户需要权限来执行/ usr / bin / cgirunner。

答案 6 :(得分:2)

所以对于每个人都开始使用XAMPP cgi

将扩展名从pl更改为cgi
将权限更改为755

mv test.pl test.cgi
chmod 755 test.cgi

它也固定了我的。

答案 7 :(得分:1)

内部错误是由于shebang线末端的HIDDEN字符造成的! 即行#!/ usr / bin / perl

通过在结尾处添加--w,可以将角色远离" perl"允许找到perl处理器的路径并执行脚本。

HIDDEN charactor由用于创建脚本的编辑器

创建

答案 8 :(得分:0)

基于所有人的建议,我使用xampp来运行cgi脚本。 Windows 8它没有任何变化,但是Cent7.0正如上面所说的那样抛出这样的错误

  

AH01215:(2)没有这样的文件或目录:' /opt/lampp/cgi-bin/pbsa_config.cgi'失败:/opt/lampp/cgi-bin/pbsa_config.cgi,referer:http://<> /MCB_HTML/TestBed.html

     

[Wed Aug 30 09:11:03.796584 2017] [cgi:error] [pid 32051] [client XX:60624]标题前输出的脚本结束:pbsa_config.cgi,referer:http://xx/MCB_HTML/TestBed.html

尝试:

禁用selinux

给定脚本的完全权限,但755就可以了

我最后添加像下面的-w

#!/usr/bin/perl -w*

use CGI ':standard';
{

        print header(),
         ...
         end_html();


}

**-w** indictes enable all warnings.It started working, No idea why -w here.

答案 9 :(得分:0)

由于没有答案,我想提供一种可能的解决方案。如果您的脚本是在Windows上编写并通过 FTP 上传到Linux服务器的,则通常会出现此问题。原因是Windows使用CRLF结束每一行,而Linux使用LF。因此,您应在 Atom 之类的编辑器的帮助下将其从CRLF转换为LF,如下所示 enter image description here

答案 10 :(得分:0)

如果使用Apache的mod_userdir从主目录执行CGI文件,并且用户的public_html目录不是该用户的主要GID的所有者,则可能会出现此错误。

我一直找不到任何文档,但这是我偶然遇到一些失败的CGI脚本的解决方案。我知道这听起来确实很奇怪(对我来说也没有任何意义),但是它确实对我有用,因此希望这对其他人也很有用。

答案 11 :(得分:0)

在我的情况下,我遇到了类似的问题,但是在Windows 10中使用c ++时,通过添加环境变量(路径)窗口,c ++库的文件夹解决了该问题,在我的情况下,我使用了代码块库:

C:\codeblocks\MinGW\bin