在我的浏览器上执行脚本时,我只获得了第一个请求的参数,但请求 $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";
}
最佳答案
您不能使用 CGI.pm和 FCGI.pm像这样在一起。您需要一些介于两者之间的胶水代码,因为 CGI 需要从环境中读取内容,而它不能以您调用它的方式进行。
有一个模块CGI::Fast包含在 Perl 中,它会为你做这件事。而不是使用 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)的清晰接口(interface)。您可以让您的程序作为一个简单的 CGI 与 Apache 或 nginx 一起运行,或者作为一个持久的 FCGI 进程与 Apache 或其他网络服务器一起运行,或者作为一个独立的应用程序通过各种用 Perl 编写并为特定目的定制的 Plack 网络服务器运行。
关于perl - 使用 FCGI 接受 POST 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41223608/