在我的浏览器上执行脚本时,我只获取第一个请求的参数,但请求$count
确实增加了。
use CGI;
use FCGI;
my $fcgiRequest = FCGI::Request();
while ($fcgiRequest->Accept() >= 0)
{
print("Content-type: text/html\r\n\r\n", ++$count);
my $q = new CGI;
print "name = " . $q->param("name") ;
print "\n";
}
答案 0 :(得分:4)
您不能像这样一起使用CGI.pm和FCGI.pm。你需要一些胶水代码,因为CGI需要从环境中读取东西,而且它不能像你调用它那样。
Perl中包含一个模块CGI::Fast,可以为您执行此操作。您只需使用CGI并更改一些代码,而不是使用FCGI和CGI::Fast。
use strict;
use warnings;
use CGI::Fast;
my $count;
while (my $q = CGI::Fast->new) {
# $q is a fresh CGI object for the current request
print("Content-type: text/html\r\n\r\n", ++$count);
print "name = " . $q->param("name") ;
print "\n";
}
如果您已经有一个CGI脚本,可以将它放在一个函数中并在该循环中调用它。
如果您对CGI :: Fast的工作原理感兴趣,请随意take a look at its source code on CPAN。主要的是环境和文件句柄(对于STDOUT和STDERR)需要映射到每个新请求,而你的实现有CGI总是解析第一个。
请注意,我链接的perldoc和CPAN中的示例都已过时,并且不代表现代Perl代码。
今天,您将probably not use CGI了,因为它已从当前的Perl版本中删除。相反,您可以查看the PSGI interface specification和Plack如何实现它。这样做的好处是它提供了跨不同部署技术(例如CGI和Fast CGI)的清晰界面。您可以让您的程序作为Apache或nginx的简单CGI运行,或作为Apache或其他Web服务器的持久FCGI流程运行,或通过Perl编写的各种Plack Web服务器作为独立应用程序运行,并针对特定用途进行定制。 / p>
答案 1 :(得分:2)
一旦为请求创建了一个CGI.pm对象,它就会在那里重复使用。
您可以通过在循环结尾添加以下内容来重置CGI.pm:
CGI::_reset_globals();