我有一个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';