1
#!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 其显示请帮助 Internal Server Error 服务器遇到内部错误或配置错误,无法完成您的请求。请通过 admin@example.com 联系服务器管理员,告知他们此错误发生的时间,以及您在此错误之前执行的操作。服务器错误日志中可能提供有关此错误的更多信息。

4

1 回答 1

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 文档建议CGI::Emulate::PSGI ),它将接受你的 PSGI 列表并为你转换为 CGI。

于 2015-02-04T15:51:35.500 回答