1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5 This file is generated from xml source: DO NOT EDIT
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8 <title>Tutoriel Apache : Contenu dynamique basé sur CGI - Serveur Apache HTTP</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
12 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
13 <body id="manual-page"><div id="page-header">
14 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
15 <p class="apache">Serveur Apache HTTP Version 2.3</p>
16 <img alt="" src="../images/feather.gif" /></div>
17 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
19 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel Apache : Contenu dynamique basé sur CGI</h1>
21 <p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> |
22 <a href="../fr/howto/cgi.html" title="Français"> fr </a> |
23 <a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
24 <a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
27 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introduction</a></li>
28 <li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurer Apache pour autoriser CGI</a></li>
29 <li><img alt="" src="../images/down.gif" /> <a href="#writing">Ecrire un programme CGI</a></li>
30 <li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Mais ça ne marche toujours pas !</a></li>
31 <li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">Que se passe-t-il en coulisse</a></li>
32 <li><img alt="" src="../images/down.gif" /> <a href="#libraries">Bibliothèques et modules CGI</a></li>
33 <li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">Pour plus d'informations</a></li>
35 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
37 <h2><a name="intro" id="intro">Introduction</a></h2>
40 <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table>
42 <p>CGI (Common Gateway Interface) définit une méthode d'interaction
43 entre un serveur web et des programmes générateurs de contenu
44 externes, plus souvent appelés programmes CGI ou scripts CGI. Il
45 s'agit de la méthode la plus simple, et la plus
46 courante, pour ajouter du contenu dynamique à votre site web. Ce
47 document est une introduction à la configuration de CGI sur votre
48 serveur web Apache, et une initiation à l'écriture de programmes
50 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
52 <h2><a name="configuring" id="configuring">Configurer Apache pour autoriser CGI</a></h2>
55 <p>Apache doit être configuré pour permettre l'exécution des
56 programmes CGI, pour que vos programmes CGI puissent fonctionner
57 correctement. Il existe plusieurs méthodes pour y parvenir.</p>
59 <div class="warning">Note: si Apache a été compilé avec le support
60 des modules partagés (DSO), vous devez vous assurer que le module CGI est
61 chargé ; vous devez pour cela vérifier que la directive <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> correspondante n'a pas été
62 commentée dans votre <code>httpd.conf</code>. Une directive correcte
63 doit ressembler à ceci :
65 <div class="example"><p><code>
66 LoadModule cgi_module modules/mod_cgi.so
67 </code></p></div></div>
69 <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>
72 <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> indique à Apache qu'un
73 répertoire particulier est dédié aux programmes CGI. Apache
74 considérera que tout fichier situé dans ce répertoire est un
75 programme CGI, et tentera de l'exécuter lorsque cette ressource
76 fera l'objet d'une requête client.</p>
78 <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> se présente comme suit
81 <div class="example"><p><code>
82 ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
85 <p>Cet exemple est tiré de votre fichier de configuration
86 <code>httpd.conf</code> par défaut, si vous avez installé Apache
87 dans son répertoire par défaut. La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> est similaire à la
88 directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>, qui
89 définit à quel répertoire particulier doit correspondre un préfixe
90 d'URL. <code class="directive">Alias</code> et
91 <code class="directive">ScriptAlias</code> sont généralement utilisés pour
92 accéder à des répertoires situés en dehors du répertoire défini
93 par la directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. La différence entre
94 <code class="directive">Alias</code> et <code class="directive">ScriptAlias</code>
95 réside dans le fait que <code class="directive">ScriptAlias</code> indique
96 en plus que tout ce qui se trouve sous le préfixe d'URL doit être
97 considéré comme un programme CGI. Ainsi, l'exemple ci-dessus
98 indique à Apache que toute requête pour une ressource commençant
99 par <code>/cgi-bin/</code> doit être servie depuis le répertoire
100 <code>/usr/local/apache2/cgi-bin/</code>, et doit être traitée en
101 tant que programme CGI.</p>
103 <p>Par exemple, si une requête pour l'URL
104 <code>http://www.example.com/cgi-bin/test.pl</code> est
105 effectuée, Apache tentera d'exécuter le fichier
106 <code>/usr/local/apache2/cgi-bin/test.pl</code> et en renverra la
107 sortie. Bien entendu, le fichier doit exister, être exécutable, et
108 retourner sa sortie d'une manière particulière, sinon Apache
109 renverra un message d'erreur.</p>
112 <h3><a name="nonscriptalias" id="nonscriptalias">CGI en dehors des répertoires ScripAlias</a></h3>
115 <p>Pour des raisons de sécurité, la localisation des programmes
116 CGI est souvent restreinte aux
117 répertoires définis par <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>. De cette manière, les administrateurs
118 peuvent contrôler précisément qui est autorisé à utiliser les
119 programmes CGI. Cependant, si les précautions adéquates quant à
120 la sécurité sont prises, il n'y a aucune raison pour que les
121 programmes CGI ne puissent pas être exécutés depuis d'autres
122 répertoires. Par exemple, vous pouvez autoriser les utilisateurs à
123 enregistrer des contenus web dans leurs répertoires home à l'aide
124 de la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. S'ils veulent mettre en
125 oeuvre leurs propres programmes CGI, mais n'ont pas l'autorisation
126 d'accès au répertoire <code>cgi-bin</code> principal, ils devront
127 être en mesure d'exécuter ces programmes depuis un autre
130 <p>L'autorisation d'exécution des programmes CGI dans un
131 répertoire arbitraire se fait en deux étapes. En premier lieu, le
132 gestionnaire <code>cgi-script</code> doit être activé à l'aide
133 d'une directive <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> ou <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>. En second lieu,
134 <code>ExecCGI</code> doit être spécifié dans la directive <code class="directive"><a href="../mod/core.html#options">Options</a></code>.</p>
137 <h3><a name="options" id="options">Utilisation d'options explicites pour permettre l'exécution
138 des programmes CGI</a></h3>
141 <p>Vous pouvez utiliser de manière explicite la directive
142 <code class="directive"><a href="../mod/core.html#options">Options</a></code> dans le fichier de
143 configuration de votre serveur principal, pour indiquer que
144 l'exécution des programmes CGI est permise depuis un répertoire
147 <div class="example"><p><code>
148 <Directory /usr/local/apache2/htdocs/un-repertoire><br />
149 <span class="indent">
150 Options +ExecCGI<br />
155 <p>La directive ci-dessus indique à Apache qu'il doit permettre
156 l'exécution des fichiers CGI. Vous devez aussi indiquer au serveur
157 quels fichiers sont des fichiers CGI. La directive <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> suivante indique au
158 serveur qu'il doit traiter tous les fichiers possédant une
159 extension <code>cgi</code> ou <code>pl</code> en tant que
162 <div class="example"><p><code>
163 AddHandler cgi-script .cgi .pl
167 <h3><a name="htaccess" id="htaccess">Fichiers .htaccess</a></h3>
170 <p>Le <a href="htaccess.html"><code>tutoriel
171 .htaccess</code></a> montre comment activer les programmes
172 CGI si vous n'avez pas accès au
173 fichier <code>httpd.conf</code>.</p>
176 <h3><a name="userdir" id="userdir">Répertoires utilisateurs</a></h3>
179 <p>Pour permettre l'exécution en tant que programme CGI de tout
180 fichier possédant l'extension <code>.cgi</code> et situé dans un
181 répertoire utilisateur, vous pouvez utiliser la configuration
184 <div class="example"><p><code>
185 <Directory /home/*/public_html><br />
186 <span class="indent">
187 Options +ExecCGI<br />
188 AddHandler cgi-script .cgi<br />
193 <p>Pour indiquer un sous-répertoire <code>cgi-bin</code> d'un
194 répertoire utilisateur où tout fichier sera traité en tant que
195 programme CGI, vous pouvez utiliser ceci :</p>
197 <div class="example"><p><code>
198 <Directory /home/*/public_html/cgi-bin><br />
199 <span class="indent">
200 Options ExecCGI<br />
201 SetHandler cgi-script<br />
208 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
209 <div class="section">
210 <h2><a name="writing" id="writing">Ecrire un programme CGI</a></h2>
213 <p>Il y a deux différences principales entre la programmation
214 "standard" et la programmation CGI.</p>
216 <p>En premier lieu, toute sortie de votre programme CGI doit être
217 précédée d'un en-tête <a class="glossarylink" href="../glossary.html#mime-type" title="voir glossaire">MIME-type</a>. Il s'agit d'un
218 en-tête HTTP qui indique au client quel type de contenu il reçoit.
219 La plupart du temps, il se présente comme suit :</p>
221 <div class="example"><p><code>
222 Content-type: text/html
225 <p>En second lieu, votre sortie doit être en HTML, ou tout autre
226 format qu'un navigateur est en mesure d'afficher. La plupart du
227 temps, il s'agira de HTML, mais occasionnellement, vous pouvez être
228 amené à écrire un programme CGI qui renvoie une image gif, ou un
229 autre type de contenu non-HTML.</p>
231 <p>A part ces deux différences, un programme CGI ressemblera à tout
232 autre programme que vous pourriez être amené à écrire.</p>
234 <h3><a name="firstcgi" id="firstcgi">Votre premier programme CGI</a></h3>
237 <p>L'exemple suivant est un exemple de programme CGI qui permet
238 d'afficher une ligne de caractères dans votre navigateur. Ecrivez
239 ce qui suit, enregistrez le dans un fichier nommé
240 <code>premier.pl</code>, et placez le dans votre répertoire
241 <code>cgi-bin</code>.</p>
243 <div class="example"><p><code>
244 #!/usr/bin/perl<br />
245 print "Content-type: text/html\n\n";<br />
246 print "Bonjour tout le monde . . .";
249 <p>Même si Perl ne vous est pas familier, vous devriez être
250 capable de comprendre le fonctionnement de ce programme. La
251 première ligne indique à Apache (ou à toute interface à partir de
252 laquelle le programme s'exécute) que ce programme peut être
253 exécuté en fournissant son fichier à l'interpréteur
254 <code>/usr/bin/perl</code>. La seconde ligne affiche la
255 déclaration du type de contenu considéré, suivie de deux paires
256 "Retour chariot - Nouvelle ligne". Ceci a pour effet d'insérer une
257 ligne vide après l'en-tête pour marquer la fin des en-têtes HTTP,
258 et le début du corps du document. La troisième ligne affiche la
259 chaîne de caractères "Bonjour tout le monde . . .". Et c'est tout
260 ce dont vous avez besoin.</p>
262 <p>Si vous ouvrez votre navigateur favori et lui indiquez
265 <div class="example"><p><code>
266 http://www.example.com/cgi-bin/premier.pl
269 <p>ou toute autre URL correspondant à votre programme CGI, Vous
270 verrez la ligne <code>Bonjour tout le monde . . .</code>
271 s'afficher dans la fenêtre de votre navigateur. Ce n'est pas
272 extraordinaire, mais si vous y êtes parvenu, vous avez de bonnes
273 chances d'y parvenir pour tout autre programme plus
276 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
277 <div class="section">
278 <h2><a name="troubleshoot" id="troubleshoot">Mais ça ne marche toujours pas !</a></h2>
281 <p>Vous devriez voir au moins une des quatre sorties suivantes dans
282 votre navigateur lorsque vous essayez d'accéder à votre programme
283 CGI depuis le web :</p>
286 <dt>Le flux de sortie de votre programme CGI</dt>
287 <dd>Impeccable ! Cela signifie que tout fonctionne correctement.
288 Si la sortie est correcte mais n'est pas traitée correctement par
289 le navigateur, assurez-vous d'avoir défini
290 <code>Content-Type</code> de manière appropriée dans votre
293 <dt>Le code source de votre programme CGI ou un message "POST
294 Method Not Allowed"</dt>
295 <dd>Cela signifie que vous n'avez pas configuré Apache de manière
296 à ce qu'il puisse traiter votre programme CGI. Relisez la section
297 sur la <a href="#configuring">configuration d'Apache</a>, et
298 essayez de trouver votre erreur.</dd>
300 <dt>Un message commençant par "Forbidden"</dt>
301 <dd>Ce type de message est révélateur d'un problème de
302 droits. Consultez le <a href="#errorlogs">journal des erreurs
303 d'Apache</a> et la section ci-dessous sur les <a href="#permissions">droits des fichiers</a>.</dd>
305 <dt>Un message contenant "Internal Server Error"</dt>
306 <dd>Si vous consultez le <a href="#errorlogs">journal des erreurs
307 d'Apache</a>, vous y trouverez probablement des messages du type
308 "Premature end of script headers" (Fin prématurée des en-têtes de
309 script), éventuellement accompagnés d'un message d'erreur généré
310 par votre programme CGI. Dans ce cas, il va vous falloir lire
311 chacune des sections ci-dessous pour déterminer ce qui empêche
312 votre programme CGI de générer les en-têtes appropriés.</dd>
315 <h3><a name="permissions" id="permissions">Droits des fichiers</a></h3>
318 <p>Souvenez-vous que le serveur ne s'exécute pas sous votre nom.
319 En d'autres termes, lorsque le serveur a démarré, il s'exécute
320 avec les droits d'un utilisateur non privilégié - en général
321 <code>nobody</code>, ou <code>www</code> - et en conséquence, il
322 aura besoin de droits supplémentaires pour pouvoir exécuter des
323 fichiers dont vous êtes le propriétaire. En général, pour qu'un
324 fichier ait des droits suffisants pour être exécutable par
325 <code>nobody</code>, il suffit de lui attribuer des droits
326 d'exécution pour tout le monde :</p>
328 <div class="example"><p><code>
332 <p>En outre, si votre programme doit pouvoir accéder en lecture
333 et/ou écriture à d'autres fichiers, ces derniers devront avoir les
334 droits appropriés.</p>
338 <h3><a name="pathinformation" id="pathinformation">Chemin des exécutables (PATH) et variables
339 d'environnement</a></h3>
342 <p>Lorsque vous lancez un programme depuis la ligne de commande,
343 certaines informations sont passées au shell sans que vous vous en
344 doutiez. Par exemple, la variable <code>PATH</code> indique au
345 shell où il doit rechercher les exécutables auxquels vous faites
348 <p>Lorsqu'un programme s'exécute depuis le serveur web en tant que
349 programme CGI, sa variable <code>PATH</code> n'aura peut-être pas
350 la même valeur. Tout programme que vous invoquez dans votre
351 programme CGI ( comme par exemple <code>sendmail</code>) devra
352 être spécifié par son chemin complet, de façon à ce que le shell
353 puisse le trouver lorsqu'il tentera d'exécuter votre programme
356 <p>Un exemple typique de spécification de programme est le chemin
357 vers l'interpréteur de script (souvent <code>perl</code>) que l'on
358 trouve à la première ligne de votre programme CGI et qui va
359 ressembler à ceci :</p>
361 <div class="example"><p><code>
365 <p>Assurez-vous qu'il s'agit bien du chemin correct vers
368 <div class="warning">
369 Lors de l'édition de scripts CGI sous Windows, il se peut que des
370 caractères de fin de ligne soient ajoutés au chemin de
371 l'interpréteur. Assurez-vous donc que les fichiers sont bien
372 transmis au serveur en mode ASCII. Dans le cas contraire, l'OS
373 pourra envoyer des avertissements "Command not found" à cause des
374 caractères de fin de ligne non reconnus car considérés comme
375 faisant partie du nom de fichier de l'interpréteur.
380 <h3><a name="missingenv" id="missingenv">Variables d'environnement manquantes</a></h3>
383 <p>Si votre programme CGI dépend de <a href="#env">variables
384 d'environnement</a> non standards, vous devrez vous assurez que
385 ces variables lui sont bien transmises par Apache.</p>
387 <p>Lorsque des en-têtes HTTP ne sont pas transmis à
388 l'environnement, assurez-vous qu'ils sont bien formatés selon la
389 <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, section
390 4.2 : les noms d'en-têtes doivent commencer par une lettre,
391 elle-même suivie de lettres, chiffres ou traits d'union. Tout
392 en-tête dont le nom viole cette règle sera ignoré.</p>
396 <h3><a name="syntaxerrors" id="syntaxerrors">Erreurs inhérentes au programme</a></h3>
399 <p>La plupart des échecs dans l'exécution d'un programme CGI
400 proviennent du programme lui-même. Ceci est particulièrement vrai
401 lorsque ce satané programme CGI se bloque, alors que vous avez
402 appris à ne plus commettre les deux erreurs précédentes. La
403 première chose à faire est de vous assurer que votre programme
404 s'exécute depuis la ligne de commande, avant de le tester à partir
405 du serveur web. Par exemple, essayez :</p>
407 <div class="example"><p><code>
408 cd /usr/local/apache2/cgi-bin<br />
412 <p>(N'invoquez pas l'interpréteur <code>perl</code>. Le shell et
413 Apache doivent être capable de le déterminer à partir de <a href="#pathinformation">l'information sur le chemin</a> située sur
414 la première ligne du script.)</p>
416 <p>La première chose que vous devriez voir affichée par votre
417 programme est un ensemble d'en-têtes HTTP, comprenant entre autres
418 le <code>Content-Type</code>, et suivi d'une ligne vide. Si vous
419 voyez quoi que ce soit d'autre, Apache renverra l'erreur
420 <code>Premature end of script headers</code> si vous tentez
421 d'exécuter le programme depuis le serveur. Voir <a href="#writing">Ecriture d'un programme CGI</a> ci-dessus pour
425 <h3><a name="errorlogs" id="errorlogs">Journalisation des erreurs</a></h3>
428 <p>Les journaux d'erreurs sont vos amis. Toute anomalie de
429 fonctionnement est consignée dans le journal des erreurs et c'est
430 ici que vous devez regarder en premier en cas de problème. Si
431 l'hébergeur de votre site ne vous donne pas accès au journal des
432 erreurs, vous avez tout intérêt à vous tourner vers quelqu'un
433 d'autre. Apprenez à déchiffrer les journaux d'erreurs, et vous
434 vous apercevrez que la plupart des problèmes seront rapidement
435 identifiés . . . et résolus.</p>
438 <h3><a name="suexec" id="suexec">Suexec</a></h3>
441 <p>Le programme <a href="../suexec.html">suexec</a> permet
442 d'exécuter les programmes CGI avec des droits différents selon le
443 serveur virtuel ou le répertoire utilisateur dans lequel ils
444 se situent. Suexec effectue une vérification des droits très
445 stricte, et toute anomalie détectée au cours de cette vérification
446 entraînera un echec d'exécution de votre programme CGI avec
447 affichage de l'erreur <code>Premature end of script
450 <p>Pour savoir si vous pouvez utiliser suexec, tapez la commande
451 <code>apachectl -V</code>, et regardez le chemin indiqué par
452 <code>SUEXEC_BIN</code>. Si au démarrage d'Apache, ce dernier
453 trouve un exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code> dans ce chemin,
454 suexec sera activé.</p>
456 <p>Si vous ne maîtrisez pas le fonctionnement de suexec, il vous
457 est déconseillé de l'utiliser. Pour désactiver suexec, supprimer
458 simplement (ou renommez) l'exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code>
459 pointé par <code>SUEXEC_BIN</code> et redémarrez le serveur. Si
460 après une lecture de <a href="../suexec.html">suexec</a>, vous
461 décidez quand-même de l'utiliser, tapez la commande <code>suexec
462 -V</code> pour voir où se situe le journal de suexec, et utilisez
463 ce dernier pour déterminer quelles règles vous violez
466 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
467 <div class="section">
468 <h2><a name="behindscenes" id="behindscenes">Que se passe-t-il en coulisse</a></h2>
471 <p>Lorsque vos compétences en programmation CGI seront plus
472 poussées, il s'avérera intéressant pour vous de mieux comprendre ce
473 qui se passe en coulisse, et en particulier la manière dont le
474 navigateur et le serveur dialoguent entre eux. En effet, bien qu'il
475 soit tout à fait louable d'écrire un programme qui affiche "Bonjour
476 tout le monde . . .", cela ne sert pas à grand chose.</p>
478 <h3><a name="env" id="env">Variables d'environnement</a></h3>
481 <p>Les variables d'environnement sont des valeurs qui gravitent
482 autour de vous lorsque vous utilisez votre ordinateur. Elles sont
483 très utiles, à l'instar de votre chemin par défaut (où votre
484 ordinateur va rechercher le fichier physique correspondant à la
485 commande que vous avez tapée), votre nom d'utilisateur, le type de
486 votre terminal, etc... Pour obtenir une liste complète des
487 variables d'environnement standards que vous utilisez tous les
488 jours, tapez <code>env</code> dans votre interpréteur
491 <p>Au cours de la transaction CGI, le serveur et le navigateur
492 définissent aussi des variables d'environnement, de façon à ce
493 qu'ils puissent communiquer entre eux. Ces variables définissent
494 entre autre le type de navigateur (Netscape, IE, Lynx), le type de
495 serveur (Apache, IIS, WebSite), le nom du programme CGI en cours
496 d'exécution, etc...</p>
498 <p>Ces variables sont à la disposition du programmeur CGI, et
499 elles constituent 50% de la communication client-serveur. La liste
500 complète des variables requises se trouve à
501 <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway
502 Interface RFC</a>.</p>
504 <p>Ce programme CGI basique en Perl permet d'afficher toutes les
505 variables d'environnement qui sont échangées. Deux programmes
506 similaires sont fournis avec la distribution d'Apache et situés
507 dans le répertoire <code>cgi-bin</code>.
508 Notez que certaines variables sont
509 obligatoires, alors que d'autres sont optionnelles, si bien que
510 vous verrez s'afficher certaines variables qui ne font pas partie
511 de la liste officielle. De plus, Apache vous propose de nombreuses
512 méthodes pour <a href="../env.html">ajouter vos propres
513 variables d'environnement</a> aux variables de base fournies par
516 <div class="example"><p><code>
517 #!/usr/bin/perl<br />
518 print "Content-type: text/html\n\n";<br />
519 foreach $key (keys %ENV) {<br />
520 <span class="indent">
521 print "$key --> $ENV{$key}<br>";<br />
527 <h3><a name="stdin" id="stdin">STDIN et STDOUT</a></h3>
530 <p>L'entrée standard (<code>STDIN</code>) et la sortie standard
531 (<code>STDOUT</code>) constituent d'autres voies de communication
532 entre le client et le serveur. Dans un contexte normal,
533 <code>STDIN</code> correspond au clavier, ou à un fichier fourni
534 au programme à des fins de traitement, et <code>STDOUT</code> à la
535 console ou à l'écran.</p>
537 <p>Lorsque vous transmettez un formulaire web à un programme CGI
538 par la méthode <code>POST</code>, les données de ce formulaire
539 sont transcrites dans un format spécial et transmises à votre
540 programme CGI via <code>STDIN</code>. Le programme peut alors les
541 traiter comme si elles provenaient du clavier ou d'un
544 <p>Ce "format spécial" est très simple. Un nom de champ et sa
545 valeur sont reliés entre eux par un signe "égal" (=), et chacune
546 de ces paires nom champ/valeur est séparée de la suivante par un
547 "et" commercial (&). Les caractères
548 spéciaux comme les espaces, les "et" commerciaux, et les signes
549 "égal" sont convertis en leur équivalent hexadécimal pour éviter
550 qu'ils ne gâchent le travail. La chaîne contenant les données doit
551 ressembler à ceci :</p>
553 <div class="example"><p><code>
554 name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey
557 <p>Vous verrez aussi parfois une chaîne de ce type accolée à une
558 URL. Dans ce cas, le serveur enregistre cette chaîne dans la
559 variable d'environnement appelée <code>QUERY_STRING</code>. On a
560 alors affaire à une requête de type <code>GET</code>. Votre
561 formulaire HTML indique laquelle des méthodes <code>GET</code> ou
562 <code>POST</code> est utilisée pour transmettre les données, en
563 définissant l'attribut <code>METHOD</code> au niveau de la balise
564 <code>FORM</code>.</p>
566 <p>Votre programme est ensuite chargé d'extraire les informations
567 utiles de cette chaîne. Heureusement, des bibliothèques et des
568 modules sont à votre disposition pour vous aider à traiter ces
569 données, et à gérer les différents aspects de votre programme
572 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
573 <div class="section">
574 <h2><a name="libraries" id="libraries">Bibliothèques et modules CGI</a></h2>
577 <p>Pour écrire un programme CGI, il vous est conseillé d'utiliser
578 une bibliothèque de code, ou un module, qui effectueront une grande
579 partie du travail de base pour vous. Ceci vous permettra de diminuer
580 le nombre d'erreurs et d'accélérer le développement.</p>
582 <p>Si vous écrivez des programmes CGI en Perl, des modules sont à
583 votre disposition à <a href="http://www.cpan.org/">CPAN</a>. A ce
584 sujet, le module le plus populaire est <code>CGI.pm</code>. Vous
585 pouvez aussi essayer <code>CGI::Lite</code>, qui implémente les
586 fonctionnalités strictement nécessaires, mais suffisantes pour
587 la majorité des programmes.</p>
589 <p>Si vous écrivez des programmes CGI en C, vous disposez de
590 nombreuses options. L'une d'elles est la bibliothèque
591 <code>CGIC</code> de <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>.</p>
592 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
593 <div class="section">
594 <h2><a name="moreinfo" id="moreinfo">Pour plus d'informations</a></h2>
597 <p>La spécification CGI actuelle est disponible dans la <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway
598 Interface RFC</a>.</p>
600 <p>Lorsque vous postez une question à propos d'un problème CGI que
601 vous rencontrez, que ce soit dans une liste de diffusion ou dans un
602 newsgroup, faites en sorte de fournir suffisamment d'informations
603 sur le problème rencontré, ce que vous attendiez exactement, et en
604 quoi ce qui se produit est réellement différent de ce que vous
605 attendiez, quel serveur vous utilisez, en quel langage votre
606 programme CGI a été écrit, et, si possible, son code source. Ceci
607 permettra une résolution plus aisée de votre problème.</p>
609 <p>Notez que les questions à propos de problèmes CGI ne doivent
610 <strong>jamais</strong> être postées dans la base de données de
611 bogues d'Apache, à moins que vous ne soyez sûr d'avoir trouvé un
612 problème dans le code source d'Apache.</p>
614 <div class="bottomlang">
615 <p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> |
616 <a href="../fr/howto/cgi.html" title="Français"> fr </a> |
617 <a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
618 <a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
619 </div><div id="footer">
620 <p class="apache">Copyright 2011 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
621 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>