这是什么"标题之前的脚本输出结束"?

时间:2016-10-15 21:59:38

标签: apache perl permissions xampp cgi

我正在尝试使用PERL进行简单的测试。我编写了input.html并将其放在hgi文件夹中,并将其放在cgi-bin中的output.cgi中。两者都在XAMPP文件夹中,使用mac。这也是使用apache。

HTML文件

<!doctype html>
<html lang="en">
  <body>
<form action="/cgi-bin/output.cgi" method="post">
Enter Fahrenheit: <input type="text" name="fahrenheit" /><br />
Enter Distance in Miles: <input type="text" name="distance" /><br />        
<input type="submit" value="Convert!" />
</form>

以下是用户按下&#34;转换&#34;

时应显示的CGI文件
#!/usr/bin/perl -w

use strict;
use warnings;

use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";


#### read form data
my $fahrenheit = param('fahrenheit');
my $distance = param('distance');


#### do the math
my $celcius = ($fahrenheit * 18.8) + 32;
my $kilometers = $distance * 1.60934;

#### display results
print "<h2>Assignment 3</h2>";
print "Conversion: <br />";
printf "Celcius: \$%.2f <br />", $celcius;
printf "Kilometers: \$%.2f <br />", $kilometers;

这是Apache的错误日志

 Marker - Oct 15, 2016, 5:56:38 PM
 [Sat Oct 15 17:56:41.765457 2016] [cgi:error] [pid 3086] [client ::1:50144] AH01215: (13)Permission denied: exec of '/Applications/XAMPP/xamppfiles/cgi-bin/output.cgi' failed: /Applications/XAMPP/xamppfiles/cgi-bin/output.cgi, referer: http://localhost/input.html
 [Sat Oct 15 17:56:41.765785 2016] [cgi:error] [pid 3086] [client ::1:50144] End of script output before headers: output.cgi, referer: http://localhost/input.html

这就是localhost中应该显示output.cgi的页面的样子

Server error!

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

Error message: 
End of script output before headers: output.cgi

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

Error 500

localhost
Apache/2.4.23 (Unix) OpenSSL/1.0.2h PHP/5.6.24 mod_perl/2.0.8-dev Perl/v5.16.3

1 个答案:

答案 0 :(得分:5)

正如错误日志所述,Apache没有权限执行您的CGI文件

使用chmod a+x cgi-bin/output.cgi为每个人添加执行权限,它应该适合您

顺便说一下,温度的转换应该是

$celcius = ( $fahrenheit - 32 ) / 1.8

更新

你的问题就像问,&#34;我把钥匙放在我的车里,而我还没在莱斯特。我做错了什么?&#34;

您似乎无法从命令行指定output.cgi文件的路径。这不是一个问题:它是一个缺陷。您必须了解有关正在使用的shell的更多信息

如果你真的不能这样做,那么你的方式就在你的头顶,所以你必须停下来完成一些教程

查看错误日志,output.cgi位于

/Applications/XAMPP/xamppfiles/cgi-bin/output.cgi

所以你可以

chmod a+x /Applications/XAMPP/xamppfiles/cgi-bin/output.cgi

cd /Applications/XAMPP/xamppfiles/cgi-bin

接着是

chmod a+x output.cgi