2010-08-05 3 views
6

Qual è l'equivalente Perl per le seguenti chiamate PHP?

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

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

6

Le variabili d'ambiente sono una serie di valori nascosti che il server Web invia ad ogni CGI si esegue. Il tuo CGI può analizzarli e utilizzare i dati che inviano. Le variabili d'ambiente sono memorizzate in un hash chiamato % ENV.

Ad esempio, $ENV{'HTTP_HOST'} darà il nome host del server.

#!/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>"; 

Per maggiori dettagli vedi CGI Environmental variables

2

Qual è l'ambiente in cui lavori? Se si tratta di CGI script di prova:

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

Questo ha funzionato alla grande, grazie. Ti capita di conoscere anche l'equivalente Perl della funzione PHP file_get_contents()? Ho giocato con open ma non riesco a farlo accedere a una pagina su un server diverso come fa file_get_contents(). – dandemeyere

+0

@dandemeyere: Quello che facevo di solito era: aprire FILE, $ data = join '', quindi chiudere FILE – hlynur

+0

La risposta di hlynul riguardo file_get_contents è errata. ha chiesto dandemeyere (e ha avuto una risposta a questa domanda) all'indirizzo http://stackoverflow.com/questions/3413151 –

13

altro modo, che environement variabile, è quello di utilizzare CGI:


use strict; 
use warnings; 
use CGI ; 

print CGI->new->url(); 

Inoltre, offre anche un sacco di manipolazione CGI tale come accedere ai params inviare al tuo cgi, cookie ecc ...

4

Oppure puoi farlo e usa la variabile $ 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}; 
} 
+0

PERFEZIONE :) Funziona alla grande –