2010-01-29 19 views
1

pour un script perl cgi, quelle est la différence (techniquement) entre ces deux?

#!/usr/bin/perl 
use CGI; 
$cgi = new CGI; 
print $cgi->header(), 
$cgi->start_html(), 
$cgi->pre($cgi->param()), 
$cgi->end_html(); 

et

#!/usr/bin/perl 
use CGI; 
$cgi = new CGI; 
print $cgi->header(), 
$cgi->start_html(), 
$cgi->pre($ENV{'QUERY_STRING'}), 
$cgi->end_html(); 
+1

Veuillez arrêter d'utiliser le vieux CGI.pm sale. Utilisez plutôt un moteur web moderne et propre tel que [Dancer] (http://www.perldancer.org/) ou [Mojolicious] (http://mojolicious.org/). – dolmen

Répondre

4

On suppose une requête HTTP comme ceci:

GET my.cgi?foo=bar&baz=buz 

Lorsqu'elle est exécutée sous un serveur Web avec une interface CGI conventionnelle, la variable d'environnement QUERY_STRING sera foo=bar&baz=buz. La variable d'environnement ne sera pas supprimée de l'URL. il l'impression avec $cgi->pre(...) simplement enferment le var env avec <pre></pre> balises (ou une seule étiquette <pre /> si la valeur est ou sous la contrainte à une chaîne vide.

$cgi->param(), d'autre part, et en supposant un contexte de liste sans arguments , renverra une liste de URL-séquence d'échappement noms de paramètres CGI, dans ce cas foo et bar.

(Notez que $cgi->pre(...) ne fait pas HTML échapper à son argument, si $ENV{QUERY_STRING} pourrait simplement compromettre votre cg avec une petite injection de script intersite.)

+0

très bonne explication, merci! – CatholicEvangelist

1

La méthode param sur l'objet CGI retourne une liste de tous les paramètres de la requête, y compris les paramètres GET et POST. Sauf si vous transmettez un argument, auquel cas il recherche un paramètre portant ce nom et renvoie la valeur.

La variable d'environnement QUERY_STRING contient la chaîne de requête non analysée.

Cela aurait été assez évident si vous aviez essayé le code en question.

Here est la documentation pour param.

-1

par la source de CGI.pm

#### Method: param 
# Returns the value(s)of a named parameter. 
# If invoked in a list context, returns the 
# entire list. Otherwise returns the first 
# member of the list. 
# If name is not provided, return a list of all 
# the known parameters names available. 
# If more than one argument is provided, the 
# second and subsequent arguments are used to 
# set the value of the parameter. 

QUERY_STRING est défini par le serveur web, il est tout simplement la chaîne de requête des uri: you can read more about it here