我最近买了到学习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
这是持续的错误,我得到。
我觉得你有一些虚假的\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
您可以通过以下几种方法之一来解决此:
- 你也许可以让你的编辑保存“UNIX行尾”或类似。
- 您可以运行
dos2unix
将其保存后的文件或类似 - 您可以使用SED:
sed -e 's/\r//g'
或类似的。
你的Apache日志应能证实这一点(如果他们不杀青记录了一下您的开发服务器上)。
当然,它可以。
- 一个环境可能已经安装了一个模块,其他可能不是。
- Perl的可能会被安装在两个环境不同的位置。
- 该环境可能有不同版本的Perl的。
- 该环境可能有不同的操作系统。
- 该权限可能会在环境中的一个是设置不正确。
- 等等
但是,而不是投机似地这样的,你为什么不检查错误日志以什么样的错误你实际上得到了什么?
不,他们只是文本文件。 当然,有可能写不可移植的程序,平凡利用system()
这取决于环境或其他类似的服务。