]> granicus.if.org Git - apache/blob - docs/manual/howto/cgi.xml.fr
xforms
[apache] / docs / manual / howto / cgi.xml.fr
1 <?xml version="1.0" encoding="ISO-8859-1" ?>
2 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English Revision : 1336196 -->
5 <!-- French translation : Lucien GENTIS -->
6 <!-- Reviewed by : Vincent Deffontaines -->
7
8 <!--
9  Licensed to the Apache Software Foundation (ASF) under one or more
10  contributor license agreements.  See the NOTICE file distributed with
11  this work for additional information regarding copyright ownership.
12  The ASF licenses this file to You under the Apache License, Version 2.0
13  (the "License"); you may not use this file except in compliance with
14  the License.  You may obtain a copy of the License at
15
16      http://www.apache.org/licenses/LICENSE-2.0
17
18  Unless required by applicable law or agreed to in writing, software
19  distributed under the License is distributed on an "AS IS" BASIS,
20  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  See the License for the specific language governing permissions and
22  limitations under the License.
23 -->
24
25 <manualpage metafile="cgi.xml.meta">
26   <parentdocument href="./">Recettes et tutoriels</parentdocument>
27
28   <title>Tutoriel Apache : Contenu dynamique bas&eacute; sur CGI</title>
29
30   <section id="intro">
31     <title>Introduction</title>
32
33     <related>
34       <modulelist>
35         <module>mod_alias</module>
36         <module>mod_cgi</module>
37       </modulelist>
38
39       <directivelist>
40         <directive module="mod_mime">AddHandler</directive>
41         <directive module="core">Options</directive>
42         <directive module="mod_alias">ScriptAlias</directive>
43       </directivelist>
44     </related>
45
46     <p>CGI (Common Gateway Interface) d&eacute;finit une m&eacute;thode d'interaction
47     entre un serveur web et des programmes g&eacute;n&eacute;rateurs de contenu
48     externes, plus souvent appel&eacute;s programmes CGI ou scripts CGI. Il
49     s'agit de la m&eacute;thode la plus simple, et la plus
50     courante, pour ajouter du contenu dynamique &agrave; votre site web. Ce
51     document est une introduction &agrave; la configuration de CGI sur votre
52     serveur web Apache, et une initiation &agrave; l'&eacute;criture de programmes
53     CGI.</p>
54   </section>
55
56   <section id="configuring">
57     <title>Configurer Apache pour autoriser CGI</title>
58
59     <p>Apache doit &ecirc;tre configur&eacute; pour permettre l'ex&eacute;cution des
60     programmes CGI, pour que vos programmes CGI puissent fonctionner
61     correctement. Il existe plusieurs m&eacute;thodes pour y parvenir.</p>
62
63     <note type="warning">Note: si Apache a &eacute;t&eacute; compil&eacute; avec le support
64     des modules partag&eacute;s (DSO), vous devez vous assurer que le module CGI est
65     charg&eacute; ; vous devez pour cela v&eacute;rifier que la directive <directive
66     module="mod_so">LoadModule</directive> correspondante n'a pas &eacute;t&eacute;
67     comment&eacute;e dans votre <code>httpd.conf</code>. Une directive correcte
68     doit ressembler &agrave; ceci :
69
70     <highlight language="config">
71       LoadModule cgi_module modules/mod_cgi.so
72     </highlight></note>
73
74     <section id="scriptalias">
75       <title>ScriptAlias</title>
76
77       <p>La directive <directive
78       module="mod_alias">ScriptAlias</directive> indique &agrave; Apache qu'un
79       r&eacute;pertoire particulier est d&eacute;di&eacute; aux programmes CGI. Apache
80       consid&eacute;rera que tout fichier situ&eacute; dans ce r&eacute;pertoire est un
81       programme CGI, et tentera de l'ex&eacute;cuter lorsque cette ressource
82       fera l'objet d'une requ&ecirc;te client.</p>
83
84       <p>La directive <directive
85       module="mod_alias">ScriptAlias</directive> se pr&eacute;sente comme suit
86       :</p>
87
88       <highlight language="config">
89         ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
90       </highlight>
91
92       <p>Cet exemple est tir&eacute; de votre fichier de configuration
93       <code>httpd.conf</code> par d&eacute;faut, si vous avez install&eacute; Apache
94       dans son r&eacute;pertoire par d&eacute;faut. La directive <directive
95       module="mod_alias">ScriptAlias</directive> est similaire &agrave; la
96       directive <directive module="mod_alias">Alias</directive>, qui
97       d&eacute;finit &agrave; quel r&eacute;pertoire particulier doit correspondre un pr&eacute;fixe
98       d'URL. <directive>Alias</directive> et
99       <directive>ScriptAlias</directive> sont g&eacute;n&eacute;ralement utilis&eacute;s pour
100       acc&eacute;der &agrave; des r&eacute;pertoires situ&eacute;s en dehors du r&eacute;pertoire d&eacute;fini
101       par la directive <directive
102       module="core">DocumentRoot</directive>. La diff&eacute;rence entre
103       <directive>Alias</directive> et <directive>ScriptAlias</directive>
104       r&eacute;side dans le fait que <directive>ScriptAlias</directive> indique
105       en plus que tout ce qui se trouve sous le pr&eacute;fixe d'URL doit &ecirc;tre
106       consid&eacute;r&eacute; comme un programme CGI. Ainsi, l'exemple ci-dessus
107       indique &agrave; Apache que toute requ&ecirc;te pour une ressource commen&ccedil;ant
108       par <code>/cgi-bin/</code> doit &ecirc;tre servie depuis le r&eacute;pertoire
109       <code>/usr/local/apache2/cgi-bin/</code>, et doit &ecirc;tre trait&eacute;e en
110       tant que programme CGI.</p>
111
112       <p>Par exemple, si une requ&ecirc;te pour l'URL
113       <code>http://www.example.com/cgi-bin/test.pl</code> est
114       effectu&eacute;e, Apache tentera d'ex&eacute;cuter le fichier
115       <code>/usr/local/apache2/cgi-bin/test.pl</code> et en renverra la
116       sortie. Bien entendu, le fichier doit exister, &ecirc;tre ex&eacute;cutable, et
117       retourner sa sortie d'une mani&egrave;re particuli&egrave;re, sinon Apache
118       renverra un message d'erreur.</p>
119     </section>
120
121     <section id="nonscriptalias">
122       <title>CGI en dehors des r&eacute;pertoires ScripAlias</title>
123
124       <p>Pour des raisons de s&eacute;curit&eacute;, la localisation des programmes
125       CGI est souvent restreinte aux
126       r&eacute;pertoires d&eacute;finis par <directive module="mod_alias"
127       >ScriptAlias</directive>. De cette mani&egrave;re, les administrateurs
128       peuvent contr&ocirc;ler pr&eacute;cis&eacute;ment qui est autoris&eacute; &agrave; utiliser les
129       programmes CGI. Cependant, si les pr&eacute;cautions ad&eacute;quates quant &agrave;
130       la s&eacute;curit&eacute; sont prises, il n'y a aucune raison pour que les
131       programmes CGI ne puissent pas &ecirc;tre ex&eacute;cut&eacute;s depuis d'autres
132       r&eacute;pertoires. Par exemple, vous pouvez autoriser les utilisateurs &agrave;
133       enregistrer des contenus web dans leurs r&eacute;pertoires home &agrave; l'aide
134       de la directive <directive
135       module="mod_userdir">UserDir</directive>. S'ils veulent mettre en
136       oeuvre leurs propres programmes CGI, mais n'ont pas l'autorisation
137       d'acc&egrave;s au r&eacute;pertoire <code>cgi-bin</code> principal, ils devront
138       &ecirc;tre en mesure d'ex&eacute;cuter ces programmes depuis un autre
139       r&eacute;pertoire.</p>
140
141       <p>L'autorisation d'ex&eacute;cution des programmes CGI dans un
142       r&eacute;pertoire arbitraire se fait en deux &eacute;tapes. En premier lieu, le
143       gestionnaire <code>cgi-script</code> doit &ecirc;tre activ&eacute; &agrave; l'aide
144       d'une directive <directive
145       module="mod_mime">AddHandler</directive> ou <directive
146       module="core">SetHandler</directive>. En second lieu,
147       <code>ExecCGI</code> doit &ecirc;tre sp&eacute;cifi&eacute; dans la directive <directive
148       module="core">Options</directive>.</p>
149     </section>
150
151     <section id="options">
152       <title>Utilisation d'options explicites pour permettre l'ex&eacute;cution
153       des programmes CGI</title>
154
155       <p>Vous pouvez utiliser de mani&egrave;re explicite la directive
156       <directive module="core">Options</directive> dans le fichier de
157       configuration de votre serveur principal, pour indiquer que
158       l'ex&eacute;cution des programmes CGI est permise depuis un r&eacute;pertoire
159       particulier :</p>
160
161       <highlight language="config">
162 &lt;Directory /usr/local/apache2/htdocs/somedir&gt;
163     Options +ExecCGI
164 &lt;/Directory&gt;
165       </highlight>
166
167       <p>La directive ci-dessus indique &agrave; Apache qu'il doit permettre
168       l'ex&eacute;cution des fichiers CGI. Vous devez aussi indiquer au serveur
169       quels fichiers sont des fichiers CGI. La directive <directive
170       module="mod_mime">AddHandler</directive> suivante indique au
171       serveur qu'il doit traiter tous les fichiers poss&eacute;dant une
172       extension <code>cgi</code> ou <code>pl</code> en tant que
173       programmes CGI :</p>
174
175       <highlight language="config">
176         AddHandler cgi-script .cgi .pl
177       </highlight>
178     </section>
179
180     <section id="htaccess">
181       <title>Fichiers .htaccess</title>
182
183       <p>Le <a href="htaccess.html"><code>tutoriel
184       .htaccess</code></a> montre comment activer les programmes
185       CGI si vous n'avez pas acc&egrave;s au
186       fichier <code>httpd.conf</code>.</p>
187     </section>
188
189     <section id="userdir">
190       <title>R&eacute;pertoires utilisateurs</title>
191
192       <p>Pour permettre l'ex&eacute;cution en tant que programme CGI de tout
193       fichier poss&eacute;dant l'extension <code>.cgi</code> et situ&eacute; dans un
194       r&eacute;pertoire utilisateur, vous pouvez utiliser la configuration
195       suivante :</p>
196
197       <highlight language="config">
198 &lt;Directory /home/*/public_html&gt;
199     Options +ExecCGI
200     AddHandler cgi-script .cgi
201 &lt;/Directory&gt;
202       </highlight>
203
204       <p>Pour indiquer un sous-r&eacute;pertoire <code>cgi-bin</code> d'un
205       r&eacute;pertoire utilisateur o&ugrave; tout fichier sera trait&eacute; en tant que
206       programme CGI, vous pouvez utiliser ceci :</p>
207
208       <highlight language="config">
209 &lt;Directory /home/*/public_html/cgi-bin&gt;
210     Options ExecCGI
211     SetHandler cgi-script
212 &lt;/Directory&gt;
213       </highlight>
214
215     </section>
216
217   </section>
218
219   <section id="writing">
220     <title>Ecrire un programme CGI</title>
221
222     <p>Il y a deux diff&eacute;rences principales entre la programmation
223     "standard" et la programmation CGI.</p>
224
225     <p>En premier lieu, toute sortie de votre programme CGI doit &ecirc;tre
226     pr&eacute;c&eacute;d&eacute;e d'un en-t&ecirc;te <glossary>MIME-type</glossary>. Il s'agit d'un
227     en-t&ecirc;te HTTP qui indique au client quel type de contenu il re&ccedil;oit.
228     La plupart du temps, il se pr&eacute;sente comme suit :</p>
229
230     <example>
231       Content-type: text/html
232     </example>
233
234     <p>En second lieu, votre sortie doit &ecirc;tre en HTML, ou tout autre
235     format qu'un navigateur est en mesure d'afficher. La plupart du
236     temps, il s'agira de HTML, mais occasionnellement, vous pouvez &ecirc;tre
237     amen&eacute; &agrave; &eacute;crire un programme CGI qui renvoie une image gif, ou un
238     autre type de contenu non-HTML.</p>
239
240     <p>A part ces deux diff&eacute;rences, un programme CGI ressemblera &agrave; tout
241     autre programme que vous pourriez &ecirc;tre amen&eacute; &agrave; &eacute;crire.</p>
242
243     <section id="firstcgi">
244       <title>Votre premier programme CGI</title>
245
246       <p>L'exemple suivant est un exemple de programme CGI qui permet
247       d'afficher une ligne de caract&egrave;res dans votre navigateur. Ecrivez
248       ce qui suit, enregistrez le dans un fichier nomm&eacute;
249       <code>premier.pl</code>, et placez le dans votre r&eacute;pertoire
250       <code>cgi-bin</code>.</p>
251
252       <highlight language="perl">
253 #!/usr/bin/perl
254 print "Content-type: text/html\n\n";
255 print "Hello, World.";
256       </highlight>
257
258       <p>M&ecirc;me si Perl ne vous est pas familier, vous devriez &ecirc;tre
259       capable de comprendre le fonctionnement de ce programme. La
260       premi&egrave;re ligne indique &agrave; Apache (ou &agrave; toute interface &agrave; partir de
261       laquelle le programme s'ex&eacute;cute) que ce programme peut &ecirc;tre
262       ex&eacute;cut&eacute; en fournissant son fichier &agrave; l'interpr&eacute;teur
263       <code>/usr/bin/perl</code>. La seconde ligne affiche la
264       d&eacute;claration du type de contenu consid&eacute;r&eacute;, suivie de deux paires
265       "Retour chariot - Nouvelle ligne". Ceci a pour effet d'ins&eacute;rer une
266       ligne vide apr&egrave;s l'en-t&ecirc;te pour marquer la fin des en-t&ecirc;tes HTTP,
267       et le d&eacute;but du corps du document. La troisi&egrave;me ligne affiche la
268       cha&icirc;ne de caract&egrave;res "Bonjour tout le monde . . .". Et c'est tout
269       ce dont vous avez besoin.</p>
270
271       <p>Si vous ouvrez votre navigateur favori et lui indiquez
272       l'adresse</p>
273
274       <example>
275         http://www.example.com/cgi-bin/premier.pl
276       </example>
277
278       <p>ou toute autre URL correspondant &agrave; votre programme CGI, Vous
279       verrez la ligne <code>Bonjour tout le monde . . .</code>
280       s'afficher dans la fen&ecirc;tre de votre navigateur. Ce n'est pas
281       extraordinaire, mais si vous y &ecirc;tes parvenu, vous avez de bonnes
282       chances d'y parvenir pour tout autre programme plus
283       sophistiqu&eacute;.</p>
284     </section>
285   </section>
286
287   <section id="troubleshoot">
288     <title>Mais &ccedil;a ne marche toujours pas !</title>
289
290     <p>Vous devriez voir au moins une des quatre sorties suivantes dans
291     votre navigateur lorsque vous essayez d'acc&eacute;der &agrave; votre programme
292     CGI depuis le web :</p>
293
294     <dl>
295       <dt>Le flux de sortie de votre programme CGI</dt>
296       <dd>Impeccable ! Cela signifie que tout fonctionne correctement.
297       Si la sortie est correcte mais n'est pas trait&eacute;e correctement par
298       le navigateur, assurez-vous d'avoir d&eacute;fini
299       <code>Content-Type</code> de mani&egrave;re appropri&eacute;e dans votre
300       programme CGI.</dd>
301
302       <dt>Le code source de votre programme CGI ou un message "POST
303       Method Not Allowed"</dt>
304       <dd>Cela signifie que vous n'avez pas configur&eacute; Apache de mani&egrave;re
305       &agrave; ce qu'il puisse traiter votre programme CGI. Relisez la section
306       sur la <a href="#configuring">configuration d'Apache</a>, et
307       essayez de trouver votre erreur.</dd>
308
309       <dt>Un message commen&ccedil;ant par "Forbidden"</dt>
310       <dd>Ce type de message est r&eacute;v&eacute;lateur d'un probl&egrave;me de
311       droits. Consultez le <a href="#errorlogs">journal des erreurs
312       d'Apache</a> et la section ci-dessous sur les <a
313       href="#permissions">droits des fichiers</a>.</dd>
314
315       <dt>Un message contenant "Internal Server Error"</dt>
316       <dd>Si vous consultez le <a href="#errorlogs">journal des erreurs
317       d'Apache</a>, vous y trouverez probablement des messages du type
318       "Premature end of script headers" (Fin pr&eacute;matur&eacute;e des en-t&ecirc;tes de
319       script), &eacute;ventuellement accompagn&eacute;s d'un message d'erreur g&eacute;n&eacute;r&eacute;
320       par votre programme CGI. Dans ce cas, il va vous falloir lire
321       chacune des sections ci-dessous pour d&eacute;terminer ce qui emp&ecirc;che
322       votre programme CGI de g&eacute;n&eacute;rer les en-t&ecirc;tes appropri&eacute;s.</dd>
323     </dl>
324
325     <section id="permissions">
326       <title>Droits des fichiers</title>
327
328       <p>Souvenez-vous que le serveur ne s'ex&eacute;cute pas sous votre nom.
329       En d'autres termes, lorsque le serveur a d&eacute;marr&eacute;, il s'ex&eacute;cute
330       avec les droits d'un utilisateur non privil&eacute;gi&eacute; - en g&eacute;n&eacute;ral
331       <code>nobody</code>, ou <code>www</code> - et en cons&eacute;quence, il
332       aura besoin de droits suppl&eacute;mentaires pour pouvoir ex&eacute;cuter des
333       fichiers dont vous &ecirc;tes le propri&eacute;taire. En g&eacute;n&eacute;ral, pour qu'un
334       fichier ait des droits suffisants pour &ecirc;tre ex&eacute;cutable par
335       <code>nobody</code>, il suffit de lui attribuer des droits
336       d'ex&eacute;cution pour tout le monde :</p>
337
338       <example>
339         chmod a+x premier.pl
340       </example>
341
342       <p>En outre, si votre programme doit pouvoir acc&eacute;der en lecture
343       et/ou &eacute;criture &agrave; d'autres fichiers, ces derniers devront avoir les
344       droits appropri&eacute;s.</p>
345
346     </section>
347
348     <section id="pathinformation">
349       <title>Chemin des ex&eacute;cutables (PATH) et variables
350       d'environnement</title>
351
352       <p>Lorsque vous lancez un programme depuis la ligne de commande,
353       certaines informations sont pass&eacute;es au shell sans que vous vous en
354       doutiez. Par exemple, la variable <code>PATH</code> indique au
355       shell o&ugrave; il doit rechercher les ex&eacute;cutables auxquels vous faites
356       r&eacute;f&eacute;rence.</p>
357
358       <p>Lorsqu'un programme s'ex&eacute;cute depuis le serveur web en tant que
359       programme CGI, sa variable <code>PATH</code> n'aura peut-&ecirc;tre pas
360       la m&ecirc;me valeur. Tout programme que vous invoquez dans votre
361       programme CGI ( comme par exemple <code>sendmail</code>) devra
362       &ecirc;tre sp&eacute;cifi&eacute; par son chemin complet, de fa&ccedil;on &agrave; ce que le shell
363       puisse le trouver lorsqu'il tentera d'ex&eacute;cuter votre programme
364       CGI.</p>
365
366       <p>Un exemple typique de sp&eacute;cification de programme est le chemin
367       vers l'interpr&eacute;teur de script (souvent <code>perl</code>) que l'on
368       trouve &agrave; la premi&egrave;re ligne de votre programme CGI et qui va
369       ressembler &agrave; ceci :</p>
370
371       <highlight language="perl">
372         #!/usr/bin/perl
373       </highlight>
374
375       <p>Assurez-vous qu'il s'agit bien du chemin correct vers
376       l'interpr&eacute;teur.</p>
377
378       <note type="warning">
379       Lors de l'&eacute;dition de scripts CGI sous Windows, il se peut que des
380       caract&egrave;res de fin de ligne soient ajout&eacute;s au chemin de
381       l'interpr&eacute;teur. Assurez-vous donc que les fichiers sont bien
382       transmis au serveur en mode ASCII. Dans le cas contraire, l'OS
383       pourra envoyer des avertissements "Command not found" &agrave; cause des
384       caract&egrave;res de fin de ligne non reconnus car consid&eacute;r&eacute;s comme
385       faisant partie du nom de fichier de l'interpr&eacute;teur.
386       </note>
387
388       </section>
389
390     <section id="missingenv">
391       <title>Variables d'environnement manquantes</title>
392
393       <p>Si votre programme CGI d&eacute;pend de <a href="#env">variables
394       d'environnement</a> non standards, vous devrez vous assurez que
395       ces variables lui sont bien transmises par Apache.</p>
396
397       <p>Lorsque des en-t&ecirc;tes HTTP ne sont pas transmis &agrave;
398       l'environnement, assurez-vous qu'ils sont bien format&eacute;s selon la
399       <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, section
400       4.2 : les noms d'en-t&ecirc;tes doivent commencer par une lettre,
401       elle-m&ecirc;me suivie de lettres, chiffres ou traits d'union. Tout
402       en-t&ecirc;te dont le nom viole cette r&egrave;gle sera ignor&eacute;.</p>
403
404     </section>
405
406     <section id="syntaxerrors">
407       <title>Erreurs inh&eacute;rentes au programme</title>
408
409       <p>La plupart des &eacute;checs dans l'ex&eacute;cution d'un programme CGI
410       proviennent du programme lui-m&ecirc;me. Ceci est particuli&egrave;rement vrai
411       lorsque ce satan&eacute; programme CGI se bloque, alors que vous avez
412       appris &agrave; ne plus commettre les deux erreurs pr&eacute;c&eacute;dentes. La
413       premi&egrave;re chose &agrave; faire est de vous assurer que votre programme
414       s'ex&eacute;cute depuis la ligne de commande, avant de le tester &agrave; partir
415       du serveur web. Par exemple, essayez :</p>
416
417       <example>
418       cd /usr/local/apache2/cgi-bin<br/>
419       ./premier.pl
420       </example>
421
422       <p>(N'invoquez pas l'interpr&eacute;teur <code>perl</code>. Le shell et
423       Apache doivent &ecirc;tre capable de le d&eacute;terminer &agrave; partir de <a
424       href="#pathinformation">l'information sur le chemin</a> situ&eacute;e sur
425       la premi&egrave;re ligne du script.)</p>
426
427       <p>La premi&egrave;re chose que vous devriez voir affich&eacute;e par votre
428       programme est un ensemble d'en-t&ecirc;tes HTTP, comprenant entre autres
429       le <code>Content-Type</code>, et suivi d'une ligne vide. Si vous
430       voyez quoi que ce soit d'autre, Apache renverra l'erreur
431       <code>Premature end of script headers</code> si vous tentez
432       d'ex&eacute;cuter le programme depuis le serveur. Voir <a
433       href="#writing">Ecriture d'un programme CGI</a> ci-dessus pour
434       plus de d&eacute;tails.</p>
435     </section>
436
437     <section id="errorlogs">
438       <title>Journalisation des erreurs</title>
439
440       <p>Les journaux d'erreurs sont vos amis. Toute anomalie de
441       fonctionnement est consign&eacute;e dans le journal des erreurs et c'est
442       ici que vous devez regarder en premier en cas de probl&egrave;me. Si
443       l'h&eacute;bergeur de votre site ne vous donne pas acc&egrave;s au journal des
444       erreurs, vous avez tout int&eacute;r&ecirc;t &agrave; vous tourner vers quelqu'un
445       d'autre. Apprenez &agrave; d&eacute;chiffrer les journaux d'erreurs, et vous
446       vous apercevrez que la plupart des probl&egrave;mes seront rapidement
447       identifi&eacute;s . . . et r&eacute;solus.</p>
448     </section>
449
450     <section id="suexec">
451       <title>Suexec</title>
452
453       <p>Le programme <a href="../suexec.html">suexec</a> permet
454       d'ex&eacute;cuter les programmes CGI avec des droits diff&eacute;rents selon le
455       serveur virtuel ou le r&eacute;pertoire utilisateur dans lequel ils
456       se situent. Suexec effectue une v&eacute;rification des droits tr&egrave;s
457       stricte, et toute anomalie d&eacute;tect&eacute;e au cours de cette v&eacute;rification
458       entra&icirc;nera un echec d'ex&eacute;cution de votre programme CGI avec
459       affichage de l'erreur <code>Premature end of script
460       headers</code>.</p>
461
462       <p>Pour savoir si vous pouvez utiliser suexec, tapez la commande
463       <code>apachectl -V</code>, et regardez le chemin indiqu&eacute; par
464       <code>SUEXEC_BIN</code>. Si au d&eacute;marrage d'Apache, ce dernier
465       trouve un ex&eacute;cutable <program>suexec</program> dans ce chemin,
466       suexec sera activ&eacute;.</p>
467
468       <p>Si vous ne ma&icirc;trisez pas le fonctionnement de suexec, il vous
469       est d&eacute;conseill&eacute; de l'utiliser. Pour d&eacute;sactiver suexec, supprimer
470       simplement (ou renommez) l'ex&eacute;cutable <program>suexec</program>
471       point&eacute; par <code>SUEXEC_BIN</code> et red&eacute;marrez le serveur. Si
472       apr&egrave;s une lecture de <a href="../suexec.html">suexec</a>, vous
473       d&eacute;cidez quand-m&ecirc;me de l'utiliser, tapez la commande <code>suexec
474       -V</code> pour voir o&ugrave; se situe le journal de suexec, et utilisez
475       ce dernier pour d&eacute;terminer quelles r&egrave;gles vous violez
476       &eacute;ventuellement.</p>
477     </section>
478   </section>
479
480   <section id="behindscenes">
481     <title>Que se passe-t-il en coulisse</title>
482
483     <p>Lorsque vos comp&eacute;tences en programmation CGI seront plus
484     pouss&eacute;es, il s'av&eacute;rera int&eacute;ressant pour vous de mieux comprendre ce
485     qui se passe en coulisse, et en particulier la mani&egrave;re dont le
486     navigateur et le serveur dialoguent entre eux. En effet, bien qu'il
487     soit tout &agrave; fait louable d'&eacute;crire un programme qui affiche "Bonjour
488     tout le monde . . .", cela ne sert pas &agrave; grand chose.</p>
489
490     <section id="env">
491       <title>Variables d'environnement</title>
492
493       <p>Les variables d'environnement sont des valeurs qui gravitent
494       autour de vous lorsque vous utilisez votre ordinateur. Elles sont
495       tr&egrave;s utiles, &agrave; l'instar de votre chemin par d&eacute;faut (o&ugrave; votre
496       ordinateur va rechercher le fichier physique correspondant &agrave; la
497       commande que vous avez tap&eacute;e), votre nom d'utilisateur, le type de
498       votre terminal, etc... Pour obtenir une liste compl&egrave;te des
499       variables d'environnement standards que vous utilisez tous les
500       jours, tapez <code>env</code> dans votre interpr&eacute;teur
501       de commandes.</p>
502
503       <p>Au cours de la transaction CGI, le serveur et le navigateur
504       d&eacute;finissent aussi des variables d'environnement, de fa&ccedil;on &agrave; ce
505       qu'ils puissent communiquer entre eux. Ces variables d&eacute;finissent
506       entre autre le type de navigateur (Netscape, IE, Lynx), le type de
507       serveur (Apache, IIS, WebSite), le nom du programme CGI en cours
508       d'ex&eacute;cution, etc...</p>
509
510       <p>Ces variables sont &agrave; la disposition du programmeur CGI, et
511       elles constituent 50% de la communication client-serveur. La liste
512       compl&egrave;te des variables requises se trouve &agrave;
513       <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway
514       Interface RFC</a>.</p>
515
516       <p>Ce programme CGI basique en Perl permet d'afficher toutes les
517       variables d'environnement qui sont &eacute;chang&eacute;es. Deux programmes
518       similaires sont fournis avec la distribution d'Apache et situ&eacute;s
519       dans le r&eacute;pertoire <code>cgi-bin</code>.
520       Notez que certaines variables sont
521       obligatoires, alors que d'autres sont optionnelles, si bien que
522       vous verrez s'afficher certaines variables qui ne font pas partie
523       de la liste officielle. De plus, Apache vous propose de nombreuses
524       m&eacute;thodes pour <a href="../env.html">ajouter vos propres
525       variables d'environnement</a> aux variables de base fournies par
526       d&eacute;faut.</p>
527
528       <highlight language="perl">
529 #!/usr/bin/perl
530 use strict;
531 use warnings;
532
533 print "Content-type: text/html\n\n";
534 foreach my $key (keys %ENV) {
535     print "$key --&gt; $ENV{$key}&lt;br&gt;";
536 }
537       </highlight>
538     </section>
539
540     <section id="stdin">
541       <title>STDIN et STDOUT</title>
542
543       <p>L'entr&eacute;e standard (<code>STDIN</code>) et la sortie standard
544       (<code>STDOUT</code>) constituent d'autres voies de communication
545       entre le client et le serveur. Dans un contexte normal,
546       <code>STDIN</code> correspond au clavier, ou &agrave; un fichier fourni
547       au programme &agrave; des fins de traitement, et <code>STDOUT</code> &agrave; la
548       console ou &agrave; l'&eacute;cran.</p>
549
550       <p>Lorsque vous transmettez un formulaire web &agrave; un programme CGI
551       par la m&eacute;thode <code>POST</code>, les donn&eacute;es de ce formulaire
552       sont transcrites dans un format sp&eacute;cial et transmises &agrave; votre
553       programme CGI via <code>STDIN</code>. Le programme peut alors les
554       traiter comme si elles provenaient du clavier ou d'un
555       fichier.</p>
556
557       <p>Ce "format sp&eacute;cial" est tr&egrave;s simple. Un nom de champ et sa
558       valeur sont reli&eacute;s entre eux par un signe "&eacute;gal" (=), et chacune
559       de ces paires nom champ/valeur est s&eacute;par&eacute;e de la suivante par un
560       "et" commercial (&amp;). Les caract&egrave;res
561       sp&eacute;ciaux comme les espaces, les "et" commerciaux, et les signes
562       "&eacute;gal" sont convertis en leur &eacute;quivalent hexad&eacute;cimal pour &eacute;viter
563       qu'ils ne g&acirc;chent le travail. La cha&icirc;ne contenant les donn&eacute;es doit
564       ressembler &agrave; ceci :</p>
565
566       <example>
567         name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
568       </example>
569
570       <p>Vous verrez aussi parfois une cha&icirc;ne de ce type accol&eacute;e &agrave; une
571       URL. Dans ce cas, le serveur enregistre cette cha&icirc;ne dans la
572       variable d'environnement appel&eacute;e <code>QUERY_STRING</code>. On a
573       alors affaire &agrave; une requ&ecirc;te de type <code>GET</code>. Votre
574       formulaire HTML indique laquelle des m&eacute;thodes <code>GET</code> ou
575       <code>POST</code> est utilis&eacute;e pour transmettre les donn&eacute;es, en
576       d&eacute;finissant l'attribut <code>METHOD</code> au niveau de la balise
577       <code>FORM</code>.</p>
578
579       <p>Votre programme est ensuite charg&eacute; d'extraire les informations
580       utiles de cette cha&icirc;ne. Heureusement, des biblioth&egrave;ques et des
581       modules sont &agrave; votre disposition pour vous aider &agrave; traiter ces
582       donn&eacute;es, et &agrave; g&eacute;rer les diff&eacute;rents aspects de votre programme
583       CGI.</p>
584     </section>
585   </section>
586 <!-- reprendre ici -->
587   <section id="libraries">
588     <title>Biblioth&egrave;ques et modules CGI</title>
589
590     <p>Pour &eacute;crire un programme CGI, il vous est conseill&eacute; d'utiliser
591     une biblioth&egrave;que de code, ou un module, qui effectueront une grande
592     partie du travail de base pour vous. Ceci vous permettra de diminuer
593     le nombre d'erreurs et d'acc&eacute;l&eacute;rer le d&eacute;veloppement.</p>
594
595     <p>Si vous &eacute;crivez des programmes CGI en Perl, des modules sont &agrave;
596     votre disposition &agrave; <a href="http://www.cpan.org/">CPAN</a>. A ce
597     sujet, le module le plus populaire est <code>CGI.pm</code>. Vous
598     pouvez aussi essayer <code>CGI::Lite</code>, qui impl&eacute;mente les
599     fonctionnalit&eacute;s strictement n&eacute;cessaires, mais suffisantes pour
600     la majorit&eacute; des programmes.</p>
601
602     <p>Si vous &eacute;crivez des programmes CGI en C, vous disposez de
603     nombreuses options. L'une d'elles est la biblioth&egrave;que
604     <code>CGIC</code> de <a href="http://www.boutell.com/cgic/"
605     >http://www.boutell.com/cgic/</a>.</p>
606   </section>
607
608   <section id="moreinfo">
609     <title>Pour plus d'informations</title>
610
611     <p>La sp&eacute;cification CGI actuelle est disponible dans la <a
612     href="http://www.ietf.org/rfc/rfc3875">Common Gateway
613     Interface RFC</a>.</p>
614
615     <p>Lorsque vous postez une question &agrave; propos d'un probl&egrave;me CGI que
616     vous rencontrez, que ce soit dans une liste de diffusion ou dans un
617     newsgroup, faites en sorte de fournir suffisamment d'informations
618     sur le probl&egrave;me rencontr&eacute;, ce que vous attendiez exactement, et en
619     quoi ce qui se produit est r&eacute;ellement diff&eacute;rent de ce que vous
620     attendiez, quel serveur vous utilisez, en quel langage votre
621     programme CGI a &eacute;t&eacute; &eacute;crit, et, si possible, son code source. Ceci
622     permettra une r&eacute;solution plus ais&eacute;e de votre probl&egrave;me.</p>
623
624     <p>Notez que les questions &agrave; propos de probl&egrave;mes CGI ne doivent
625     <strong>jamais</strong> &ecirc;tre post&eacute;es dans la base de donn&eacute;es de
626     bogues d'Apache, &agrave; moins que vous ne soyez s&ucirc;r d'avoir trouv&eacute; un
627     probl&egrave;me dans le code source d'Apache.</p>
628   </section>
629 </manualpage>
630