当我尝试访问我的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";
但不使用浏览器
答案 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
,如下所示
答案 10 :(得分:0)
如果使用Apache的mod_userdir
从主目录执行CGI文件,并且用户的public_html
目录不是该用户的主要GID的所有者,则可能会出现此错误。
我一直找不到任何文档,但这是我偶然遇到一些失败的CGI脚本的解决方案。我知道这听起来确实很奇怪(对我来说也没有任何意义),但是它确实对我有用,因此希望这对其他人也很有用。
答案 11 :(得分:0)
在我的情况下,我遇到了类似的问题,但是在Windows 10中使用c ++时,通过添加环境变量(路径)窗口,c ++库的文件夹解决了该问题,在我的情况下,我使用了代码块库:
C:\codeblocks\MinGW\bin