Question

pour un script cgi perl, 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();
Était-ce utile?

La solution

Supposons une requête HTTP comme ceci:

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

Lorsqu'il est exécuté sous un serveur web avec une interface classique de CGI, sera foo=bar&baz=buz l'environnement QUERY_STRING variable. La variable d'environnement ne sera pas URL-séquence d'échappement. Impression avec $cgi->pre(...) simplement enferment le var env avec des balises <pre></pre> (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, renvoie un de URL-séquence d'échappement noms de paramètres CGI, dans ce cas foo et bar.

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

Autres conseils

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. À moins que vous passez un argument, auquel cas il recherche un paramètre avec 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.

est la documentation pour param.

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éfinie par le serveur web, il est tout simplement la chaîne de requête des uri: vous pouvez en lire davantage ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top