]> granicus.if.org Git - apache/blob - docs/manual/howto/cgi.html.fr
update transformation
[apache] / docs / manual / howto / cgi.html.fr
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
7       -->
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="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
18 <div id="path">
19 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.3</a> &gt; <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel Apache : Contenu dynamique basé sur CGI</h1>
20 <div class="toplang">
21 <p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
22 <a href="../fr/howto/cgi.html" title="Français">&nbsp;fr&nbsp;</a> |
23 <a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
24 <a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
25 </div>
26 </div>
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>
34 </ul></div>
35 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
36 <div class="section">
37 <h2><a name="intro" id="intro">Introduction</a></h2>
38     
39
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>
41
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
49     CGI.</p>
50   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
51 <div class="section">
52 <h2><a name="configuring" id="configuring">Configurer Apache pour autoriser CGI</a></h2>
53     
54
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>
58
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 :
64
65     <div class="example"><p><code>
66       LoadModule cgi_module modules/mod_cgi.so
67     </code></p></div></div>
68
69     <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>
70       
71
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>
77
78       <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> se présente comme suit
79       :</p>
80
81       <div class="example"><p><code>
82         ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
83       </code></p></div>
84
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>
102
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>
110     
111
112     <h3><a name="nonscriptalias" id="nonscriptalias">CGI en dehors des répertoires ScripAlias</a></h3>
113       
114
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
128       répertoire.</p>
129
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>
135     
136
137     <h3><a name="options" id="options">Utilisation d'options explicites pour permettre l'exécution
138       des programmes CGI</a></h3>
139       
140
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
145       particulier :</p>
146
147       <div class="example"><p><code>
148         &lt;Directory /usr/local/apache2/htdocs/un-repertoire&gt;<br />
149         <span class="indent">
150           Options +ExecCGI<br />
151         </span>
152         &lt;/Directory&gt;
153       </code></p></div>
154
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
160       programmes CGI :</p>
161
162       <div class="example"><p><code>
163         AddHandler cgi-script .cgi .pl
164       </code></p></div>
165     
166
167     <h3><a name="htaccess" id="htaccess">Fichiers .htaccess</a></h3>
168       
169
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>
174     
175
176     <h3><a name="userdir" id="userdir">Répertoires utilisateurs</a></h3>
177       
178
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
182       suivante :</p>
183
184       <div class="example"><p><code>
185       &lt;Directory /home/*/public_html&gt;<br />
186       <span class="indent">
187         Options +ExecCGI<br />
188         AddHandler cgi-script .cgi<br />
189       </span>
190       &lt;/Directory&gt;
191       </code></p></div>
192
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>
196
197       <div class="example"><p><code>
198       &lt;Directory /home/*/public_html/cgi-bin&gt;<br />
199       <span class="indent">
200         Options ExecCGI<br />
201         SetHandler cgi-script<br />
202       </span>
203       &lt;/Directory&gt;
204       </code></p></div>
205
206     
207
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>
211     
212
213     <p>Il y a deux différences principales entre la programmation
214     "standard" et la programmation CGI.</p>
215
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>
220
221     <div class="example"><p><code>
222       Content-type: text/html
223     </code></p></div>
224
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>
230
231     <p>A part ces deux différences, un programme CGI ressemblera à tout
232     autre programme que vous pourriez être amené à écrire.</p>
233
234     <h3><a name="firstcgi" id="firstcgi">Votre premier programme CGI</a></h3>
235       
236
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>
242
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 . . .";
247       </code></p></div>
248
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>
261
262       <p>Si vous ouvrez votre navigateur favori et lui indiquez
263       l'adresse</p>
264
265       <div class="example"><p><code>
266         http://www.exemple.com/cgi-bin/premier.pl
267       </code></p></div>
268
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
274       sophistiqué.</p>
275     
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>
279     
280
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>
284
285     <dl>
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
291       programme CGI.</dd>
292
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>
299
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>
304
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>
313     </dl>
314
315     <h3><a name="permissions" id="permissions">Droits des fichiers</a></h3>
316       
317
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>
327
328       <div class="example"><p><code>
329         chmod a+x premier.pl
330       </code></p></div>
331
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>
335
336     
337
338     <h3><a name="pathinformation" id="pathinformation">Chemin des exécutables (PATH) et variables
339       d'environnement</a></h3>
340       
341
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
346       référence.</p>
347
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
354       CGI.</p>
355
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>
360
361       <div class="example"><p><code>
362         #!/usr/bin/perl
363       </code></p></div>
364
365       <p>Assurez-vous qu'il s'agit bien du chemin correct vers
366       l'interpréteur.</p>
367
368       <p>De plus, si votre programme CGI dépend d'autres <a href="#env">variables d'environnement</a>, vous devrez vous
369       assurer qu'elles lui sont bien transmises par Apache.</p>
370
371     
372
373     <h3><a name="syntaxerrors" id="syntaxerrors">Erreurs inhérentes au programme</a></h3>
374       
375
376       <p>La plupart des échecs dans l'exécution d'un programme CGI
377       proviennent du programme lui-même. Ceci est particulièrement vrai
378       lorsque ce satané programme CGI se bloque, alors que vous avez
379       appris à ne plus commettre les deux erreurs précédentes. La
380       première chose à faire est de vous assurer que votre programme
381       s'exécute depuis la ligne de commande, avant de le tester à partir
382       du serveur web. Par exemple, essayez :</p>
383
384       <div class="example"><p><code>
385       cd /usr/local/apache2/cgi-bin<br />
386       ./premier.pl
387       </code></p></div>
388
389       <p>(N'invoquez pas l'interpréteur <code>perl</code>. Le shell et
390       Apache doivent être capable de le déterminer à partir de <a href="#pathinformation">l'information sur le chemin</a> située sur
391       la première ligne du script.)</p>
392
393       <p>La première chose que vous devriez voir affichée par votre
394       programme est un ensemble d'en-têtes HTTP, comprenant entre autres
395       le <code>Content-Type</code>, et suivi d'une ligne vide. Si vous
396       voyez quoi que ce soit d'autre, Apache renverra l'erreur
397       <code>Premature end of script headers</code> si vous tentez
398       d'exécuter le programme depuis le serveur. Voir <a href="#writing">Ecriture d'un programme CGI</a> ci-dessus pour
399       plus de détails.</p>
400     
401
402     <h3><a name="errorlogs" id="errorlogs">Journalisation des erreurs</a></h3>
403       
404
405       <p>Les journaux d'erreurs sont vos amis. Toute anomalie de
406       fonctionnement est consignée dans le journal des erreurs et c'est
407       ici que vous devez regarder en premier en cas de problème. Si
408       l'hébergeur de votre site ne vous donne pas accès au journal des
409       erreurs, vous avez tout intérêt à vous tourner vers quelqu'un
410       d'autre. Apprenez à déchiffrer les journaux d'erreurs, et vous
411       vous apercevrez que la plupart des problèmes seront rapidement
412       identifiés . . . et résolus.</p>
413     
414
415     <h3><a name="suexec" id="suexec">Suexec</a></h3>
416       
417
418       <p>Le programme <a href="../suexec.html">suexec</a> permet
419       d'exécuter les programmes CGI avec des droits différents selon le
420       serveur virtuel ou le répertoire utilisateur dans lequel ils
421       se situent. Suexec effectue une vérification des droits très
422       stricte, et toute anomalie détectée au cours de cette vérification
423       entraînera un echec d'exécution de votre programme CGI avec
424       affichage de l'erreur <code>Premature end of script
425       headers</code>.</p>
426
427       <p>Pour savoir si vous pouvez utiliser suexec, tapez la commande
428       <code>apachectl -V</code>, et regardez le chemin indiqué par
429       <code>SUEXEC_BIN</code>. Si au démarrage d'Apache, ce dernier
430       trouve un exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code> dans ce chemin,
431       suexec sera activé.</p>
432
433       <p>Si vous ne maîtrisez pas le fonctionnement de suexec, il vous
434       est déconseillé de l'utiliser. Pour désactiver suexec, supprimer
435       simplement (ou renommez) l'exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code>
436       pointé par <code>SUEXEC_BIN</code> et redémarrez le serveur. Si
437       après une lecture de <a href="../suexec.html">suexec</a>, vous
438       décidez quand-même de l'utiliser, tapez la commande <code>suexec
439       -V</code> pour voir où se situe le journal de suexec, et utilisez
440       ce dernier pour déterminer quelles règles vous violez
441       éventuellement.</p>
442     
443   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
444 <div class="section">
445 <h2><a name="behindscenes" id="behindscenes">Que se passe-t-il en coulisse</a></h2>
446     
447
448     <p>Lorsque vos compétences en programmation CGI seront plus
449     poussées, il s'avérera intéressant pour vous de mieux comprendre ce
450     qui se passe en coulisse, et en particulier la manière dont le
451     navigateur et le serveur dialoguent entre eux. En effet, bien qu'il
452     soit tout à fait louable d'écrire un programme qui affiche "Bonjour
453     tout le monde . . .", cela ne sert pas à grand chose.</p>
454
455     <h3><a name="env" id="env">Variables d'environnement</a></h3>
456       
457
458       <p>Les variables d'environnement sont des valeurs qui gravitent
459       autour de vous lorsque vous utilisez votre ordinateur. Elles sont
460       très utiles, à l'instar de votre chemin par défaut (où votre
461       ordinateur va rechercher le fichier physique correspondant à la
462       commande que vous avez tapée), votre nom d'utilisateur, le type de
463       votre terminal, etc... Pour obtenir une liste complète des
464       variables d'environnement standards que vous utilisez tous les
465       jours, tapez <code>env</code> dans votre interpréteur
466       de commandes.</p>
467
468       <p>Au cours de la transaction CGI, le serveur et le navigateur
469       définissent aussi des variables d'environnement, de façon à ce
470       qu'ils puissent communiquer entre eux. Ces variables définissent
471       entre autre le type de navigateur (Netscape, IE, Lynx), le type de
472       serveur (Apache, IIS, WebSite), le nom du programme CGI en cours
473       d'exécution, etc...</p>
474
475       <p>Ces variables sont à la disposition du programmeur CGI, et
476       elles constituent 50% de la communication client-serveur. La liste
477       complète des variables requises se trouve à
478       <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>.</p>
479
480       <p>Ce programme CGI basique en Perl permet d'afficher toutes les
481       variables d'environnement qui sont échangées. Deux programmes
482       similaires sont fournis avec la distribution d'Apache et situés
483       dans le répertoire <code>cgi-bin</code>.
484       Notez que certaines variables sont
485       obligatoires, alors que d'autres sont optionnelles, si bien que
486       vous verrez s'afficher certaines variables qui ne font pas partie
487       de la liste officielle. De plus, Apache vous propose de nombreuses
488       méthodes pour <a href="../env.html">ajouter vos propres
489       variables d'environnement</a> aux variables de base fournies par
490       défaut.</p>
491
492       <div class="example"><p><code>
493         #!/usr/bin/perl<br />
494         print "Content-type: text/html\n\n";<br />
495         foreach $key (keys %ENV) {<br />
496         <span class="indent">
497           print "$key --&gt; $ENV{$key}&lt;br&gt;";<br />
498         </span>
499         }
500       </code></p></div>
501     
502
503     <h3><a name="stdin" id="stdin">STDIN et STDOUT</a></h3>
504       
505
506       <p>L'entrée standard (<code>STDIN</code>) et la sortie standard
507       (<code>STDOUT</code>) constituent d'autres voies de communication
508       entre le client et le serveur. Dans un contexte normal,
509       <code>STDIN</code> correspond au clavier, ou à un fichier fourni
510       au programme à des fins de traitement, et <code>STDOUT</code> à la
511       console ou à l'écran.</p>
512
513       <p>Lorsque vous transmettez un formulaire web à un programme CGI
514       par la méthode <code>POST</code>, les données de ce formulaire
515       sont transcrites dans un format spécial et transmises à votre
516       programme CGI via <code>STDIN</code>. Le programme peut alors les
517       traiter comme si elles provenaient du clavier ou d'un
518       fichier.</p>
519
520       <p>Ce "format spécial" est très simple. Un nom de champ et sa
521       valeur sont reliés entre eux par un signe "égal" (=), et chacune
522       de ces paires nom champ/valeur est séparée de la suivante par un
523       "et" commercial (&amp;). Les caractères
524       spéciaux comme les espaces, les "et" commerciaux, et les signes
525       "égal" sont convertis en leur équivalent hexadécimal pour éviter
526       qu'ils ne gâchent le travail. La chaîne contenant les données doit
527       ressembler à ceci :</p>
528
529       <div class="example"><p><code>
530         name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
531       </code></p></div>
532
533       <p>Vous verrez aussi parfois une chaîne de ce type accolée à une
534       URL. Dans ce cas, le serveur enregistre cette chaîne dans la
535       variable d'environnement appelée <code>QUERY_STRING</code>. On a
536       alors affaire à une requête de type <code>GET</code>. Votre
537       formulaire HTML indique laquelle des méthodes <code>GET</code> ou
538       <code>POST</code> est utilisée pour transmettre les données, en
539       définissant l'attribut <code>METHOD</code> au niveau de la balise
540       <code>FORM</code>.</p>
541
542       <p>Votre programme est ensuite chargé d'extraire les informations
543       utiles de cette chaîne. Heureusement, des bibliothèques et des
544       modules sont à votre disposition pour vous aider à traiter ces
545       données, et à gérer les différents aspects de votre programme
546       CGI.</p>
547     
548   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
549 <div class="section">
550 <h2><a name="libraries" id="libraries">Bibliothèques et modules CGI</a></h2>
551     
552
553     <p>Pour écrire un programme CGI, il vous est conseillé d'utiliser
554     une bibliothèque de code, ou un module, qui effectueront une grande
555     partie du travail de base pour vous. Ceci vous permettra de diminuer
556     le nombre d'erreurs et d'accélérer le développement.</p>
557
558     <p>Si vous écrivez des programmes CGI en Perl, des modules sont à
559     votre disposition à <a href="http://www.cpan.org/">CPAN</a>. A ce
560     sujet, le module le plus populaire est <code>CGI.pm</code>. Vous
561     pouvez aussi essayer <code>CGI::Lite</code>, qui implémente les
562     fonctionnalités strictement nécessaires, mais suffisantes pour
563     la majorité des programmes.</p>
564
565     <p>Si vous écrivez des programmes CGI en C, vous disposez de
566     nombreuses options. L'une d'elles est la bibliothèque
567     <code>CGIC</code> de <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>.</p>
568   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
569 <div class="section">
570 <h2><a name="moreinfo" id="moreinfo">Pour plus d'informations</a></h2>
571     
572
573     <p>Il existe un grand nombre de ressources CGI sur le web. Vous
574     pouvez discuter de problèmes CGI avec d'autres utilisateurs dans le
575     groupe Usenet <a href="news:comp.infosystems.www.authoring.cgi">
576     comp.infosystems.www.authoring.cgi</a>. En outre, la liste de
577     diffusion de la Guilde des Ecrivains HTML est une source
578     intarissable de réponses à vos questions. Vous en saurez plus en
579     vous rendant à <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a>.</p>
580
581     <p>Et bien entendu, vous devez lire la spécification CGI, qui
582     présente tous les détails en rapport avec les opérations des
583     programmes CGI. La version originale se trouve au <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>, et
584     dans la RFC IETF actuelle <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway
585     Interface RFC</a>.</p>
586
587     <p>Lorsque vous postez une question à propos d'un problème CGI que
588     vous rencontrez, que ce soit dans une liste de diffusion ou dans un
589     newsgroup, faites en sorte de fournir suffisamment d'informations
590     sur le problème rencontré, ce que vous attendiez exactement, et en
591     quoi ce qui se produit est réellement différent de ce que vous
592     attendiez, quel serveur vous utilisez, en quel langage votre
593     programme CGI a été écrit, et, si possible, son code source. Ceci
594     permettra une résolution plus aisée de votre problème.</p>
595
596     <p>Notez que les questions à propos de problèmes CGI ne doivent
597     <strong>jamais</strong> être postées dans la base de données de
598     bogues d'Apache, à moins que vous ne soyez sûr d'avoir trouvé un
599     problème dans le code source d'Apache.</p>
600   </div></div>
601 <div class="bottomlang">
602 <p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
603 <a href="../fr/howto/cgi.html" title="Français">&nbsp;fr&nbsp;</a> |
604 <a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
605 <a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
606 </div><div id="footer">
607 <p class="apache">Copyright 2009 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
608 <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>
609 </body></html>