#!C:/perl/bin/perl.exe
use CGI;
my $q = CGI->new;
print $q->header('text/plain'),
"Hello ", $q->param('name');
#CONVERTED PSGI PAGE
#!C:/perl/bin/perl.exe
use CGI::PSGI;
my $app = sub {
my $env = shift;
my $q = CGI::PSGI->new($env);
return [
$q->psgi_header('text/plain'),
[ "Hello ", $q->param('name') ],
];
};
我在 apache 服务器中运行此 cgi.pl http://localhost/cgi-bin/cgi.pl
但我无法在 apache 服务器中运行转换后的 psgi.pl它的显示请帮忙内部服务器错误服务器遇到内部错误或配置错误,无法完成您的请求。请与服务器管理员联系,admin@example.com 告知他们此错误发生的时间以及您在此错误之前执行的操作。有关此错误的详细信息,请参阅服务器错误日志。
CGI和PSGI是Web服务器和外部程序通信方式的两种不同规范。
在 CGI 下,Web 服务器期望从程序接收文本输出,包括 HTTP 响应标头、空行和程序呈现的 HTML。
CGI 模块为 apache 服务器实现此逻辑,如果程序的输出不符合,apache 将报告 500 错误。
在 PSGI 下,Web 服务器期望程序返回一个由 HTTP 响应代码、HTTP 响应标头和程序呈现的 HTML 组成的三元素列表。
因此,您可以看到符合PSGI规范的程序会混淆mod_cgi。
所以你需要安装一个实现PSGI的apache模块,或者使用一个Perl模块(CGI::P SGI文档建议CGI::Emulate::P SGI),它将接受你的PSGI列表并为你转换为CGI。