#!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与服务器管理员联系,告知他们此错误发生的时间以及您在此错误发生之前执行的操作。服务器错误日志中可能提供了有关此错误的更多信息。
答案 0 :(得分:0)
CGI和PSGI是Web服务器和外部程序如何通信的两种不同规范。
在CGI下,Web服务器期望从程序接收文本输出,包括HTTP响应标头,空白行和程序呈现的HTML。
CGI模块为apache服务器实现了这个逻辑,如果程序的输出不符合,apache会报告500错误。
在PSGI下,Web服务器期望程序返回一个三元素列表,其中包含HTTP响应代码,HTTP响应头和程序呈现的HTML。
所以你可以看到符合PSGI规范的程序会混淆mod_cgi。
所以你需要安装一个实现PSGI的apache模块,或者使用一个Perl模块(CGI :: PSGI docs建议CGI::Emulate::PSGI)来接受你的PSGI列表并转换为CGI。