【发布时间】:2012-08-04 17:13:07
【问题描述】:
我最近开始学习 cgi,并在 vbox 中设置了一个 Ubuntu 服务器。我编写的第一个程序是在 Python 中通过 ssh 使用 vim。然后我在我的 Windows 7 工作站上安装了 Eclipse 并创建了完全相同的 Perl 文件;只是一个简单的 hello world 交易。
我尝试运行它,结果是 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.";
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
这是我得到的持续错误。
【问题讨论】:
-
apache 日志显示什么?
-
调试 CGI 的第一条规则是,如果得到 500,则查看服务器日志。第二条规则是,如果出现问题,您可以在同一台机器上从命令行运行它以查看它的输出。
-
我愿意把钱押在#!行而不是 \n
-
另外,Content-Type: 标头末尾应该有 \r\n\r\n。
-
@tripleee,apache 处理
LF就好了;它将CR LF发送给客户端。 [这是对先前评论的转贴,已删除无关部分]