尝试使用FastCGI和Lighttpd运行Perl脚本,但文件只是下载。

3
问题是我的.pl脚本被下载为空文件而不是被执行。我阅读了:http://redmine.lighttpd.net/wiki/lighttpd/ApplicationsUsingLighttpd。我的dispatch.fcgi如下所示:(它位于usr/bin/)
#!perl
#!/usr/bin/perl
use strict;
use CGI::Fast;
use Embed::Persistent; {
my $p = Embed::Persistent->new();
while (new CGI::Fast) {
my $filename = $ENV{SCRIPT_FILENAME};
my $package = $p->valid_package_name($filename);
my $mtime;
if ($p->cached($filename, $package, \$mtime)) {
eval {$package->handler;};
}
else {
$p->eval_file($ENV{SCRIPT_FILENAME});
}
}
}

这是我在lighttpd配置文件中的代码:

".pl" =>
((
"fastcgi.debug" => 1,
"bin-path" => "/usr/bin/dispatch.fcgi",
"socket" => "/tmp/fcgi.socket",
"check-local" => "disable",
"min-procs" => 1,
"max-procs" => 5,
"idle-timeout" => 20
))

我需要安装CGI.pm和cpan模块嵌入。现在我的服务器日志中没有任何错误,但是如我所说,脚本只是下载。

谢谢你的帮助!


你所说的“脚本”是指dispatch.pl脚本还是你试图从它运行的脚本? - ijw
4个回答

1

打印 $cgi->header; - 它本身不会输出。 - ijw

1

让carp写入文件并在那里查找问题。

BEGIN {
use CGI::Carp qw/carpout/;
open LOG, ">>", "carp.log" or die("Cannot open file: $!\n");
carpout(LOG);
}

1

确保为扩展设置了静态排除。类似于...

static-file.exclude-extensions = (".php", ".pl")

否则它只会像其他文件一样下载该文件。


0

谢谢!

#!/usr/bin/perl -w
use strict;
my $cgi = new CGI;
print $cgi->header();
print 'Hello world.';

可以工作!但是,我想知道为什么我需要打印头文件才能让它与 fastcgi 和 lighttpd 一起使用。我有一个别人编写的大型脚本,在我的 apache 和常规 cgi 服务器上运行良好。我想我必须修改它以在我的新服务器上工作。

问题是我认为打印头文件可能会搞乱脚本,因为它做了一些像打印 html 的东西,这些东西被执行了。

再次感谢


CGI规范要求在客户端解释实际内容之前,必须在其前面添加一个标题。 - hillu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接