【发布时间】:2011-11-04 14:24:15
【问题描述】:
有很多关于如何使用 FastCGI 到 CGI 包装器来使用 nginx 提供 Perl 代码的教程。但是我自己使用 Perl 模块很舒服,所以我不需要包装器。我正在尝试找出正确的设置方法。这是我到目前为止的代码:
#!perl
use CGI;
use FCGI;
my $s = FCGI::OpenSocket(':9000',20);
my $r = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR,
\%ENV, $s);
while ($r->Accept >= 0) {
my $cgi = CGI->new;
print "Content-type: text/html\n\n";
print "<html><body>The foo input is ", $cgi->param('foo'), "</body></html>";
$r->Finish;
}
并像这样在 nginx 中启用它:
location /foo {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.pl;
}
问题是,无论我调用脚本多少次,param 返回的值与启动程序后第一次调用时传递的值相同。有没有更好的方法来做到这一点?我也对CGI.pm 的替代方案持开放态度。
【问题讨论】:
-
如果您已指示
CGI.pm在实例化CGI.pm之前清除它的全局缓存,那么您发布的代码将会正常工作。CGI::initialize_globals(); -
有趣。不知道那个。我会记住的。