Apache(2)抛出"没有这样的文件或目录:'/usr/lib/cgi-bin/fst.cgi'的exec失败了"

Man*_*nju 14 cgi apache2

我在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脚本正常工作,没有任何修改.

  • +1谢谢你,我被这个抓住了.我使用`dos2unix`来纠正我的ubuntu机器上的行结尾. (6认同)

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"选项时不会导致错误.


dma*_*a_k 0

  • 确保您的脚本在 apache 用户下执行正常:# su -c /usr/lib/cgi-bin/fst.cgi apache
  • 确保该目录/usr/lib/cgi-bin有755权限
  • 确保脚本/usr/lib/cgi-bin/fst.cgi有755权限