为什么我的Perl CGI程序返回服务器错误?(Why does my Perl CGI progr

2019-09-20 23:26发布

我最近买了到学习CGI和我成立了一个VBOX Ubuntu的服务器。 我写的第一个程序是用Python通过ssh使用vim。 然后,我在我的Windows 7工作站上安装了Eclipse,并创建了完全一样的Perl文件; 只是一个简单的Hello World交易。

我试图运行它,我得到它500,而Python代码在同一个目录(/ usr / lib目录/ cgi-bin目录)中显示了罚款。 沮丧,我检查和三重检查的权限,它开始与#!的/ usr / bin中/ perl的。 我还检查的AddHandler是否被设置为特等。 一切都被设定罚款,并一时兴起,我决定写使用vim像我使用Python文件确实在服务器中完全相同的代码。

你瞧,它的工作。 我比较了他们,想我会疯了,他们是完全一样的。 那么,这是怎么回事? 为什么一个文件在Windows 7上的Eclipse比Ubuntu的服务器用vim做了一个文件,提出不同? 他们有不同的二进制头什么的? 这真的会影响我的发展环境。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Testing.";

Apache的错误日志:

[Tue Aug 07 12:32:02 2012] [error] [client 192.168.1.8] (2)No such file or directory:     exec of '/usr/lib/cgi-bin/test.pl' failed
[Tue Aug 07 12:32:02 2012] [error] [client 192.168.1.8] Premature end of script headers: test.pl
[Tue Aug 07 12:32:02 2012] [error] [client 192.168.1.8] File does not exist: /var/www/favicon.ico

这是持续的错误,我得到。

Answer 1:

我觉得你有一些虚假的\r在您的Perl脚本的第一行字时,您在Windows写。

例如,我创建以下文件在Windows上:

#!/usr/bin/perl

code goes here

当hexdump都认为它表明:

00000000  23 21 2f 75 73 72 2f 62  69 6e 2f 70 65 72 6c 0d  |#!/usr/bin/perl.|
00000010  0a 0d 0a 63 6f 64 65 20  67 6f 65 73 20 68 65 72  |...code goes her|
00000020  65 0d 0a                                          |e..|
00000023

注意0d - \r ,我已经在标注出来。 如果我尝试使用运行此./test.pl我得到:

zsh: ./test.pl: bad interpreter: /usr/bin/perl^M: no such file or directory

而如果我写了Vim与UNIX机器,我得到了相同的代码:

00000000  23 21 2f 75 73 72 2f 62  69 6e 2f 70 65 72 6c 0a  |#!/usr/bin/perl.|
00000010  0a 63 6f 64 65 20 67 6f  65 73 20 68 65 72 65 0a  |.code goes here.|
00000020

您可以通过以下几种方法之一来解决此:

  1. 你也许可以让你的编辑保存“UNIX行尾”或类似。
  2. 您可以运行dos2unix将其保存后的文件或类似
  3. 您可以使用SED: sed -e 's/\r//g'或类似的。

你的Apache日志应能证实这一点(如果他们不杀青记录了一下您的开发服务器上)。



Answer 2:

当然,它可以。

  • 一个环境可能已经安装了一个模块,其他可能不是。
  • Perl的可能会被安装在两个环境不同的位置。
  • 该环境可能有不同版本的Perl的。
  • 该环境可能有不同的操作系统。
  • 该权限可能会在环境中的一个是设置不正确。
  • 等等

但是,而不是投机似地这样的,你为什么不检查错误日志以什么样的错误你实际上得到了什么?



Answer 3:

不,他们只是文本文件。 当然,有可能写不可移植的程序,平凡利用system()这取决于环境或其他类似的服务。



文章来源: Why does my Perl CGI program return a server error?