<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--Traduction anglais 1.7 -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1" />
<title>Modification de PATH_INFO dans l'environnement
CGI</title>
</head>
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
<body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
vlink="#000080" alink="#FF0000">
<div align="CENTER">
<img src="images/sub.gif" alt="[APACHE DOCUMENTATION]" />
<h3>Apache HTTP Server</h3>
</div>
<h1 align="CENTER">Modification de PATH_INFO dans
l'environnement CGI</h1>
<hr />
<h2><a id="over" name="over">Vue d'ensemble</a></h2>
<p>Telle qu'elle était implémentée dans
les versions antérieures à la version 1.1.1
d'Apache (comprise), la méthode utilisée par
Apache pour créer la variable PATH_INFO dans
l'environnement CGI était loin d'être intuitive,
et pouvait conduire à certaines défaillances dans
certains cas. A partir de la version 1.2 d'Apache, cette
méthode a été modifiée. Bien que
ces modifications puissent conduire à certaines
incompatibilités avec certaines applications CGI, le
comportement d'Apache 1.2 reste toujours compatible avec la
spécification CGI/1.1, et les scripts CGI restent
facilement modifiables (<a href="#compat">voir
ci-dessous</a>).</p>
<h2><a id="prob" name="prob">Le Problème</a></h2>
<p>Les versions d'Apache jusqu'à 1.1.1 construisaient
les variables d'environnement CGI PATH_INFO et SCRIPT_NAME en
inspectant les noms de fichiers, et non les URL. Bien que cette
technique conduise à des valeurs correctes dans la
plupart des cas, il pouvait arriver que le chemin défini
par le système de fichiers soit surchargé par une
redéfinition, laquelle conduisait à une mauvaise
interprétation lors de la constitution des variables.
Par exemple, si la ligne suivante apparaissait dans un fichier
de configuration :</p>
<pre>
Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
</pre>
<p>Dans ce cas, <code>user.cgi</code> désigne le script
CGI, la chaîne "/ralph" est une information à
passer au CGI. Si cette configuration était en place, et
qu'une requête vers "<code>/cgi-ralph/script/</code>"
était reçue, le code du serveur aurait
constitué une variable PATH_INFO de valeur
"<code>/ralph/script</code>", et SCRIPT_NAME de valeur
"<code>/cgi-</code>". Il est évident de constater que la
deuxième variable est fausse. Dans certains cas, cela
aurait même pu conduire à un arrêt du
serveur.</p>
<h2><a id="solution" name="solution">La Solution</a></h2>
<p>Les versions postérieures à 1.2 d'Apache
définissent maintenant les variables SCRIPT_NAME et
PATH_INFO en inspectant directement l'URL, et en
déterminant quelle portion de l'URL est modifiable par
le client. PATH_INFO est initialisé à cette
partie modifiable. Pour réexploiter l'exemple ci-dessus,
PATH_INFO prendrait maintenant la valeur
"<code>/script</code>", et SCRIPT_NAME la valeur correcte
"<code>/cgi-ralph</code>". Il n'y a plus de problème de
comportement du serveur dans ce cas. Cela permet en outre de
garantir l'accessibilité de l'URL
<code>http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO</code>"
laquelle pointe sur le script courant. Ce n'était pas
nécesairement vrai dans les versions
précédentes d'Apache.</p>
<p>Toutefois, l'information "<code>/ralph</code>" de la
directive <code>Alias</code> est perdue. Nous pensions que
l'utilisation du système de fichiers pour faire passer
ce genre d'information n'était pas une méthode
recommandée, et un script utilisant ce principe
était de toutes façons à éviter.
Nous avons ajouté malgré tout à partir de
la version 1.2b3 d'Apache une façon de <a
href="#compat">contourner</a> cette restriction.</p>
<h2><a id="compat" name="compat">Compatibilité avec des
serveurs plus anciens</a></h2>
<p>Il se peut que certains scripts écrits pour des
versions antérieures d'Apache ou pour d'autres serveurs
aient besoin d'exploiter les informations données dans
l'ancien modèle de variable PATH_INFO. A cet effet, la
version 1.2 d'Apache (1.2b3 et postérieures) proposent
une variable supplémentaire, appelée
FILEPATH_INFO. Cette nouvelle variable d'environnement contient
la valeur qui était précédemment inscrite
dans PATH_INFO par la version 1.1.1 d'Apache.</p>
<p>Un script désirant être compatible avec toutes
les versions d'Apache peut simplement tester l'existence de la
variable FILEPATH_INFO, et utiliser cette variable si besoin
est. Autrement, il récupérera ses informations
dans la variable PATH_INFO. Par exemple, en Perl, on pourra
écrire :</p>
<pre>
$path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
</pre>
<p>Par cette écriture, un script fonctionnera avec tous
les serveurs conformes à la spécification
CGI/1.1, incluant par là même toutes les versions
d'Apache.</p>
<hr />
<h3 align="CENTER">Apache HTTP Server</h3>
<a href="./"><img src="images/index.gif" alt="Index" /></a>
</body>
</html>