CGI:Variables d'environnement

Un article de WikiTuto.

Jump to: navigation, search
  • CGI initiation
  1. Introduction
  2. La communication CGI/navigateur
  • Réception et traitement de données par un CGI
  1. Envoyer des données à un script CGI
  2. Variables d'environnement

Sommaire

Notion de variable d'environnement

Les variables d'environnement sont, comme leur nom l'indique, des données stockées dans des variables permettant au programme d'avoir des informations sur son environnement. L'environnement, dans le cas du programme CGI est :

  • Le client
  • Le serveur

Ces variables sont créées par le serveur à chaque fois que le programme CGI est appelé, le serveur les lui fournit en paramètres cachés lors de l'exécution de l'interpréteur.

Elles permettent notamment d'avoir des informations sur le type de serveur, son administrateur, la date à laquelle le CGI a été appelé, l'adresse IP et le type de navigateur du client, etc.

Les variables d'environnement

Variables d'environnement dépendant du client

Variable d'environnement Description
CONTENT_LENGTH Longueur du corps de la requête. Il s'agit de la taille des données envoyées au CGI par l'intermédiaire de la méthode POST d'un formulaire.
CONTENT_TYPE Type de données contenu présent dans le corps de la requête. Il s'agit du type MIME des données.
HTTP_COOKIE Cookie du client si jamais un cookie est effectivement présent sur le disque du client.
HTTP_REFERER URL de la page qui a appelé le script CGI.
HTTP_REQUEST_METHOD Cette variable indique le type de méthode utilisée pour envoyer les données au programme CGI. Il s'agit de GET, HEAD, POST, PUT ou DELETE. Dans le cas de la méthode GET, les données sont encodées avec l'URL de requête ; dans le cas de la méthode POST, par contre, les données présentes dans le corps de la requête sont accessibles via le fichier de flux d'entrée standard nommé STDIN.
HTTP_USER_AGENT Cette variable permet d'avoir des informations sur le type de navigateur utilisé par le client, ainsi que son système d'exploitation.
PATH Il s'agit du chemin d'accès au script CGI.
PATH_INFO Il s'agit de la partie de l'URL (ayant servi à accéder au script CGI) située avant le point d'interrogation. Il s'agit donc du chemin d'accès au script CGI sans prendre en compte les données supplémentaires.
PATH_TRANSLATED Il s'agit du chemin d'accès absolu au script CGI, c'est-à-dire l'emplacement absolu du script sur le serveur.
QUERY_STRING Il s'agit de la partie de l'URL (ayant servie à accéder au script CGI) située après le point d'interrogation. C'est de cette manière que sont transmises les données d'un formulaire dans le cas de la méthode GET.
REMOTE_ADDR Cette variable contient l'adresse IP du client appelant le script CGI.
SCRIPT_FILENAME Chemin d'accès complet au script CGI.
SCRIPT_NAME Chemin d'accès relatif (par rapport au chemin d'accès à la racine web) au script CGI.


Variables d'environnement dépendant du serveur

Variable d'environnement Description
DATE_GMT Date actuelle au format GMT.
DATE_LOCAL Date actuelle au format local.
DOCUMENT_ROOT Racine des documents Web sur le serveur.
HTTP_HOST Nom de domaine du serveur.
SERVER_ADMIN Adresse de l'administrateur du serveur.
SERVER_SOFTWARE Type (logiciel) du serveur web.


Affichage des variables d'environnement

La valeur d'une variable d'environnement, en C, peut être récupérée par un appel à la fonction getenv. Par exemple,

int longueur;
longueur=atoi(getenv("CONTENT_LENGTH"));

permet de stocker dans la variable longueur la longueur de la chaîne envoyée au script.

Les méthodes GET et POST

Introduction

La méthode GET permet d'envoyer les éléments du formulaire au travers de l'URL du script, en ajoutant l'ensemble des paires nom/valeur à l'URL du script, séparé de celui-ci par un point d'interrogation, ce qui donne un URL du type

http://nom_du_serveur/cgi-bin/script.cgi?champ1=valeur1&champ2=valeur2

Toutefois, la longueur de la chaîne URL étant limitée à 255 caractères, les informations situées au-delà de cette limite seront irrémédiablement perdues. De plus, cela crée une URL surchargée dans la barre d'adresse d'un navigateur et peut dévoiler des informations sensibles comme un mot de passe...

Ainsi, la méthode POST est une bonne alternative à la méthode GET. Cette méthode code les informations de la même façon que la méthode GET (encodage URL et paires nom/valeur) mais elle envoie les données à la suite des en-têtes HTTP, dans un champ appelé corps de la requête. De cette façon la quantité de données envoyées n'est plus limitée, et est connue du serveur grâce à l'en-tête permettant de connaître la taille du corps de la requête. De plus, les champs remplis n'apparaissent plus dans la barre d'adresse du navigateur, au contraire de la méthode GET.

Méthode GET

Avec cette méthode, l'information envoyée par l'utilisateur est récupérée dans la variable d'environnement QUERY_STRING :

cgiinput=getenv("QUERY_STRING");

Il faut ensuite remplacer tous les signes + par des espaces (on notera la condition de fin de la boucle) :

for (i=0; cgiinput[i]; i++) if (cgiinput[i] == '+') cgiinput[i] = ' ' ;

Dans une troisième étape, on découpe la chaîne ainsi récupérée en "tronçons" correspondant aux paires nom/valeur ; puis, sur chaque paire, on sépare nom et valeur. On peut utiliser pour ce faire une fonction coupe, écrite spécialement :

void coupe (char *entree, char *sortie1, char* sortie2, char carac)
{
    char *position;
    
    position=strchr(entree, carac);
    
    strncpy(sortie2, position+1, strlen(position));
    strncpy(sortie1, entree, strlen(entree)-strlen(position));
    
    sortie1[strlen(entree)-strlen(position)]='\0';
}

Méthode POST

Avec cette méthode, l'information envoyée par l'utilisateur est récupérée dans l'entrée standard STDIN, en utilisant la variable d'environnement CONTENT_LENGTH :

content_length = atoi(getenv("CONTENT_LENGTH"));
gets(cgiinput);
cgiinput[content_length]='\0';

Les opérations suivantes sont alors exactement les mêmes : remplacement des +, ajout des caractères accentués, séparation des champs, etc.

Sources

Gilles Chagnon

Voir aussi

Boîte à outils
Annuaire gratuitCe site est listé dans la catégorie Informatique : Aide et astuces en informatique Annuaire