【发布时间】:2011-06-18 17:52:23
【问题描述】:
我有一个 Perl 脚本,它将从命令行运行并作为 CGI。从 Perl 脚本中,我如何知道它是如何运行的?
【问题讨论】:
我有一个 Perl 脚本,它将从命令行运行并作为 CGI。从 Perl 脚本中,我如何知道它是如何运行的?
【问题讨论】:
最好的选择是检查GATEWAY_INTERFACE 环境变量。它将包含服务器正在使用的 CGI 协议的版本,这几乎总是CGI/1.1。 Tony Miller 提到的HTTP_HOST 变量(或任何HTTP_* 变量)仅在客户端提供时才设置。客户端忽略 Host 标头而使 HTTP_HOST 未设置是罕见的,但并非不可能。
#!/usr/bin/perl
use strict;
use warnings;
use constant IS_CGI => exists $ENV{'GATEWAY_INTERFACE'};
如果我希望在某个时候在 mod_perl 下运行,我还将检查 MOD_PERL 环境变量,因为它将在第一次编译脚本时设置。
#!/usr/bin/perl
use strict;
use warnings;
use constant IS_MOD_PERL => exists $ENV{'MOD_PERL'};
use constant IS_CGI => IS_MOD_PERL || exists $ENV{'GATEWAY_INTERFACE'};
【讨论】:
您最好在 CGI 中检查 GI。
use CGI qw( header );
my $is_cgi = defined $ENV{'GATEWAY_INTERFACE'};
print header("text/plain") if $is_cgi;
print "O HAI, ", $is_cgi ? "CGI\n" : "COMMAND LINE\n";
【讨论】:
一种可能的方法是检查由 Web 服务器设置的环境变量。
#!/usr/bin/perl
use strict;
use warnings;
our $IS_CGI = exists $ENV{'HTTP_HOST'};
【讨论】:
查看您的程序是否连接到 TTY:
my $where = -t() ? 'command line' : 'web server';
【讨论】: