jef*_*how 3 perl cgi apache2 cgi-bin
我最近学习了cgi,并在vbox中设置了一个Ubuntu服务器.我写的第一个程序是使用vim通过ssh在Python中编写的.然后我在我的Windows 7工作站上安装了Eclipse并创建了完全相同的Perl文件; 只是一个简单的问候世界.
我试过运行它,我得到了500,而同一个目录(/ usr/lib/cgi-bin)中的Python代码显示正常.沮丧,我检查并三重检查权限,它开始于#!/ usr/bin/perl.我还检查了AddHandler是否设置为.pl.一切都设置得很好,一时兴起,我决定使用vim在服务器中编写完全相同的代码,就像我在Python文件中所做的那样.
瞧,它有效.我比较了他们,以为我疯了,他们完全一样.那么,这笔交易是什么?为什么Eclipse中的Windows 7中的文件与使用vim的Ubuntu服务器中生成的文件不同?他们有不同的二进制标题或什么?这确实会影响我的开发环境.
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Testing.";
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
这是我得到的持续错误.
Fle*_*exo 12
我认为\r当你在Windows中编写它时,你的Perl脚本的第一行有一些虚假的字符.
例如,我在Windows上创建了以下文件:
#!/usr/bin/perl
code goes here
Run Code Online (Sandbox Code Playgroud)
使用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
如果我在UNIX机器上在Vim中编写相同的代码,我得到:
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
您可以通过以下几种方式之一解决此问题:
dos2unix在文件上运行或类似sed -e 's/\r//g'或类似的.您的apache日志应该能够确认这一点(如果他们没有在开发服务器上稍微提高日志记录).