我在Ubuntu 10.10(Maverick Meerkat)工作并在Apache下运行我的CGI脚本,但它显示以下错误...
[周六错误没有这样的文件或目录:'/usr/lib/cgi-bin/fst.cgi'的exec失败[2011年10月22日02:56:45] [错误] [客户端127.0.0.1]脚本标题过早结束:fst.cgi
我的剧本是
#!/usr/bin/perl
print "Content-type:text/html\n\n";
print "hello world";
Run Code Online (Sandbox Code Playgroud)
我已经设置了文件的权限......
我还在文件中添加了以下行apache.conf:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory /usr/lib/cgi-bin/>
Options +ExecCGI
</Directory>
AddHandler cgi-script .cgi .pl
Run Code Online (Sandbox Code Playgroud)
但它仍然向我显示同样的错误.我做了所有可能的改变,但我没有取得任何成功......
小智 32
我在/ var/log/apache2/error_log中遇到了同样的错误.我终于明白了Perl脚本直接从我的Windows系统复制(通过Parallels的虚拟机),它似乎是在Windows'回车'\ r \n’导致此错误.
当我使用ASCII模式自动转换FTP从Windows这个Perl脚本到Mac"\ r \n"到"\ r",同样的Perl脚本正常工作,没有任何修改.
Tud*_*tin 11
我多次遇到同样的问题 - 尝试将文件中的shebang修改为:
#!/usr/bin/perl -w
Run Code Online (Sandbox Code Playgroud)
现在为什么这会使脚本执行,打败我...如果你发现请告诉我们.
Doo*_*nky 10
错误消息"没有这样的文件或目录"不是来自Apache也不是来自Perl.当Apache调用脚本时,它会将执行传递给系统的命令行解释器(CLI).此CLI打开脚本文件并读取第一行"#!/ usr/bin/perl"(shebang line).
正如Sam Tseng详细阐述的那样,该文件显然包含一个Windows换行字符序列:" \ r \n"(十六进制代码:x0D x0A,符号:CR LF).现在,CLI解释器读取行直到"\n"字符.CLI不识别"\ r"字符,因此它成为路径"/ usr/bin/perl \ r \n "的一部分,并且不再是换行符的一部分.
为什么选项'-w'可以解决这个问题?
当你添加选项'-w'而不是字符'\ r'时becommes参数"-w\r \n"的一部分.现在可以找到Perl可执行文件的路径"/ usr/bin/perl",并将"-w\r"作为命令行参数传递.但是,Perl很好,在处理"-w\r"选项时不会导致错误.
# su -c /usr/lib/cgi-bin/fst.cgi apache/usr/lib/cgi-bin有755权限/usr/lib/cgi-bin/fst.cgi有755权限| 归档时间: |
|
| 查看次数: |
33437 次 |
| 最近记录: |