Perl中与PHP的$_SERVER [...]等效的是什么?

7

以下是相应的Perl调用,请注意区别:

$_SERVER["HTTP_HOST"]
$_SERVER["REQUEST_URI"]

任何帮助都将不胜感激。
4个回答

14

除了使用变量环境之外,另一种方法是使用CGI:


use strict;
use warnings;
use CGI ;

print CGI->new->url();

此外,它还提供了许多CGI操作,例如访问发送到您的CGI的参数、cookies等...


6

环境变量是Web服务器发送给您运行的每个CGI的一系列隐藏值。您的CGI可以解析它们并使用它们发送的数据。环境变量存储在名为%ENV的哈希表中。

例如,$ENV{'HTTP_HOST'}将给出您的服务器的主机名

#!/usr/bin/perl

print "Content-type:text/html\n\n";
print <<EndOfHTML;
<html><head><title>Print Environment</title></head>
<body>
EndOfHTML

foreach my $key (sort(keys %ENV)) {
    print "$key = $ENV{$key}<br>\n";
}

print "</body></html>";

更多详细信息请参见CGI环境变量


5
或者你可以这样做,并使用变量 $page_url。
my $page_url = 'http';
$page_url.='s' if $ENV{HTTPS};
$page_url.='://';
if($ENV{SERVER_PORT}!=80)
{
    $page_url.="$ENV{SERVER_NAME}:$ENV{SERVER_PORT}$ENV{REQUEST_URI}";
}
else
{
    $page_url.=$ENV{SERVER_NAME}.$ENV{REQUEST_URI};
}

完美 :) 运行良好 - Ignacio Correia

2

你现在所处的工作环境是什么?如果是CGI脚本,请尝试以下操作:

use Data::Dumper;
print Dumper \%ENV;

这个很好用,谢谢。你知道PHP函数file_get_contents()在Perl中的等价物吗?我一直在尝试使用open,但无法像file_get_contents()那样访问不同服务器上的页面。 - dandemeyere
@dandemeyere:我通常的做法是:打开文件,$data = join'',<FILE>,然后关闭文件。 - hlynur
hlynul对于file_get_contents的答案是错误的。dandemeyere在https://dev59.com/j0_Ta4cB1Zd3GeqPB5A8上提出了这个问题并得到了答案。 - Mark Fowler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接