发布于 2016-12-19 21:43:25
你不能像这样一起使用CGI.pm和FCGI.pm。您需要一些胶水代码,因为CGI需要从环境中读取内容,而它不能以您调用它的方式。
Perl附带了一个模块CGI::Fast,它可以为您完成这项工作。您只需使用CGI::Fast并更改一点代码,而不使用CGI和FCGI。
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或其他let服务器上作为持久的FCGI进程运行,或者通过用Perl编写并为特定目的定制的各种Plack let服务器作为独立应用程序运行。
发布于 2016-12-20 03:55:18
一旦为一个请求创建了一个CGI.pm对象,它就会被重用。
您可以通过在循环末尾添加以下内容来重置CGI.pm:
CGI::_reset_globals();https://stackoverflow.com/questions/41223608
复制相似问题