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 -->
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
16 http://www.apache.org/licenses/LICENSE-2.0
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.
25 <manualpage metafile="cgi.xml.meta">
26 <parentdocument href="./">Recettes et tutoriels</parentdocument>
28 <title>Tutoriel Apache : Contenu dynamique basé sur CGI</title>
31 <title>Introduction</title>
35 <module>mod_alias</module>
36 <module>mod_cgi</module>
40 <directive module="mod_mime">AddHandler</directive>
41 <directive module="core">Options</directive>
42 <directive module="mod_alias">ScriptAlias</directive>
46 <p>CGI (Common Gateway Interface) définit une méthode d'interaction
47 entre un serveur web et des programmes générateurs de contenu
48 externes, plus souvent appelés programmes CGI ou scripts CGI. Il
49 s'agit de la méthode la plus simple, et la plus
50 courante, pour ajouter du contenu dynamique à votre site web. Ce
51 document est une introduction à la configuration de CGI sur votre
52 serveur web Apache, et une initiation à l'écriture de programmes
56 <section id="configuring">
57 <title>Configurer Apache pour autoriser CGI</title>
59 <p>Apache doit être configuré pour permettre l'exécution des
60 programmes CGI, pour que vos programmes CGI puissent fonctionner
61 correctement. Il existe plusieurs méthodes pour y parvenir.</p>
63 <note type="warning">Note: si Apache a été compilé avec le support
64 des modules partagés (DSO), vous devez vous assurer que le module CGI est
65 chargé ; vous devez pour cela vérifier que la directive <directive
66 module="mod_so">LoadModule</directive> correspondante n'a pas été
67 commentée dans votre <code>httpd.conf</code>. Une directive correcte
68 doit ressembler à ceci :
70 <highlight language="config">
71 LoadModule cgi_module modules/mod_cgi.so
74 <section id="scriptalias">
75 <title>ScriptAlias</title>
77 <p>La directive <directive
78 module="mod_alias">ScriptAlias</directive> indique à Apache qu'un
79 répertoire particulier est dédié aux programmes CGI. Apache
80 considérera que tout fichier situé dans ce répertoire est un
81 programme CGI, et tentera de l'exécuter lorsque cette ressource
82 fera l'objet d'une requête client.</p>
84 <p>La directive <directive
85 module="mod_alias">ScriptAlias</directive> se présente comme suit
88 <highlight language="config">
89 ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
92 <p>Cet exemple est tiré de votre fichier de configuration
93 <code>httpd.conf</code> par défaut, si vous avez installé Apache
94 dans son répertoire par défaut. La directive <directive
95 module="mod_alias">ScriptAlias</directive> est similaire à la
96 directive <directive module="mod_alias">Alias</directive>, qui
97 définit à quel répertoire particulier doit correspondre un préfixe
98 d'URL. <directive>Alias</directive> et
99 <directive>ScriptAlias</directive> sont généralement utilisés pour
100 accéder à des répertoires situés en dehors du répertoire défini
101 par la directive <directive
102 module="core">DocumentRoot</directive>. La différence entre
103 <directive>Alias</directive> et <directive>ScriptAlias</directive>
104 réside dans le fait que <directive>ScriptAlias</directive> indique
105 en plus que tout ce qui se trouve sous le préfixe d'URL doit être
106 considéré comme un programme CGI. Ainsi, l'exemple ci-dessus
107 indique à Apache que toute requête pour une ressource commençant
108 par <code>/cgi-bin/</code> doit être servie depuis le répertoire
109 <code>/usr/local/apache2/cgi-bin/</code>, et doit être traitée en
110 tant que programme CGI.</p>
112 <p>Par exemple, si une requête pour l'URL
113 <code>http://www.example.com/cgi-bin/test.pl</code> est
114 effectuée, Apache tentera d'exé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, être exécutable, et
117 retourner sa sortie d'une manière particulière, sinon Apache
118 renverra un message d'erreur.</p>
121 <section id="nonscriptalias">
122 <title>CGI en dehors des répertoires ScripAlias</title>
124 <p>Pour des raisons de sécurité, la localisation des programmes
125 CGI est souvent restreinte aux
126 répertoires définis par <directive module="mod_alias"
127 >ScriptAlias</directive>. De cette manière, les administrateurs
128 peuvent contrôler précisément qui est autorisé à utiliser les
129 programmes CGI. Cependant, si les précautions adéquates quant à
130 la sécurité sont prises, il n'y a aucune raison pour que les
131 programmes CGI ne puissent pas être exécutés depuis d'autres
132 répertoires. Par exemple, vous pouvez autoriser les utilisateurs à
133 enregistrer des contenus web dans leurs répertoires home à 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ès au répertoire <code>cgi-bin</code> principal, ils devront
138 être en mesure d'exécuter ces programmes depuis un autre
139 répertoire.</p>
141 <p>L'autorisation d'exécution des programmes CGI dans un
142 répertoire arbitraire se fait en deux étapes. En premier lieu, le
143 gestionnaire <code>cgi-script</code> doit être activé à 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 être spécifié dans la directive <directive
148 module="core">Options</directive>.</p>
151 <section id="options">
152 <title>Utilisation d'options explicites pour permettre l'exécution
153 des programmes CGI</title>
155 <p>Vous pouvez utiliser de maniè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écution des programmes CGI est permise depuis un répertoire
161 <highlight language="config">
162 <Directory /usr/local/apache2/htdocs/somedir>
167 <p>La directive ci-dessus indique à Apache qu'il doit permettre
168 l'exé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édant une
172 extension <code>cgi</code> ou <code>pl</code> en tant que
175 <highlight language="config">
176 AddHandler cgi-script .cgi .pl
180 <section id="htaccess">
181 <title>Fichiers .htaccess</title>
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ès au
186 fichier <code>httpd.conf</code>.</p>
189 <section id="userdir">
190 <title>Répertoires utilisateurs</title>
192 <p>Pour permettre l'exécution en tant que programme CGI de tout
193 fichier possédant l'extension <code>.cgi</code> et situé dans un
194 répertoire utilisateur, vous pouvez utiliser la configuration
197 <highlight language="config">
198 <Directory /home/*/public_html>
200 AddHandler cgi-script .cgi
204 <p>Pour indiquer un sous-répertoire <code>cgi-bin</code> d'un
205 répertoire utilisateur où tout fichier sera traité en tant que
206 programme CGI, vous pouvez utiliser ceci :</p>
208 <highlight language="config">
209 <Directory /home/*/public_html/cgi-bin>
211 SetHandler cgi-script
219 <section id="writing">
220 <title>Ecrire un programme CGI</title>
222 <p>Il y a deux différences principales entre la programmation
223 "standard" et la programmation CGI.</p>
225 <p>En premier lieu, toute sortie de votre programme CGI doit être
226 précédée d'un en-tête <glossary>MIME-type</glossary>. Il s'agit d'un
227 en-tête HTTP qui indique au client quel type de contenu il reçoit.
228 La plupart du temps, il se présente comme suit :</p>
231 Content-type: text/html
234 <p>En second lieu, votre sortie doit ê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 être
237 amené à écrire un programme CGI qui renvoie une image gif, ou un
238 autre type de contenu non-HTML.</p>
240 <p>A part ces deux différences, un programme CGI ressemblera à tout
241 autre programme que vous pourriez être amené à écrire.</p>
243 <section id="firstcgi">
244 <title>Votre premier programme CGI</title>
246 <p>L'exemple suivant est un exemple de programme CGI qui permet
247 d'afficher une ligne de caractères dans votre navigateur. Ecrivez
248 ce qui suit, enregistrez le dans un fichier nommé
249 <code>premier.pl</code>, et placez le dans votre répertoire
250 <code>cgi-bin</code>.</p>
252 <highlight language="perl">
254 print "Content-type: text/html\n\n";
255 print "Hello, World.";
258 <p>Même si Perl ne vous est pas familier, vous devriez être
259 capable de comprendre le fonctionnement de ce programme. La
260 première ligne indique à Apache (ou à toute interface à partir de
261 laquelle le programme s'exécute) que ce programme peut être
262 exécuté en fournissant son fichier à l'interpréteur
263 <code>/usr/bin/perl</code>. La seconde ligne affiche la
264 déclaration du type de contenu considéré, suivie de deux paires
265 "Retour chariot - Nouvelle ligne". Ceci a pour effet d'insérer une
266 ligne vide après l'en-tête pour marquer la fin des en-têtes HTTP,
267 et le début du corps du document. La troisième ligne affiche la
268 chaîne de caractères "Bonjour tout le monde . . .". Et c'est tout
269 ce dont vous avez besoin.</p>
271 <p>Si vous ouvrez votre navigateur favori et lui indiquez
275 http://www.example.com/cgi-bin/premier.pl
278 <p>ou toute autre URL correspondant à votre programme CGI, Vous
279 verrez la ligne <code>Bonjour tout le monde . . .</code>
280 s'afficher dans la fenêtre de votre navigateur. Ce n'est pas
281 extraordinaire, mais si vous y êtes parvenu, vous avez de bonnes
282 chances d'y parvenir pour tout autre programme plus
283 sophistiqué.</p>
287 <section id="troubleshoot">
288 <title>Mais ça ne marche toujours pas !</title>
290 <p>Vous devriez voir au moins une des quatre sorties suivantes dans
291 votre navigateur lorsque vous essayez d'accéder à votre programme
292 CGI depuis le web :</p>
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ée correctement par
298 le navigateur, assurez-vous d'avoir défini
299 <code>Content-Type</code> de manière appropriée dans votre
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é Apache de manière
305 à 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>
309 <dt>Un message commençant par "Forbidden"</dt>
310 <dd>Ce type de message est révélateur d'un problè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>
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ématurée des en-têtes de
319 script), éventuellement accompagnés d'un message d'erreur généré
320 par votre programme CGI. Dans ce cas, il va vous falloir lire
321 chacune des sections ci-dessous pour déterminer ce qui empêche
322 votre programme CGI de générer les en-têtes appropriés.</dd>
325 <section id="permissions">
326 <title>Droits des fichiers</title>
328 <p>Souvenez-vous que le serveur ne s'exécute pas sous votre nom.
329 En d'autres termes, lorsque le serveur a démarré, il s'exécute
330 avec les droits d'un utilisateur non privilégié - en général
331 <code>nobody</code>, ou <code>www</code> - et en conséquence, il
332 aura besoin de droits supplémentaires pour pouvoir exécuter des
333 fichiers dont vous êtes le propriétaire. En général, pour qu'un
334 fichier ait des droits suffisants pour être exécutable par
335 <code>nobody</code>, il suffit de lui attribuer des droits
336 d'exécution pour tout le monde :</p>
342 <p>En outre, si votre programme doit pouvoir accéder en lecture
343 et/ou écriture à d'autres fichiers, ces derniers devront avoir les
344 droits appropriés.</p>
348 <section id="pathinformation">
349 <title>Chemin des exécutables (PATH) et variables
350 d'environnement</title>
352 <p>Lorsque vous lancez un programme depuis la ligne de commande,
353 certaines informations sont passées au shell sans que vous vous en
354 doutiez. Par exemple, la variable <code>PATH</code> indique au
355 shell où il doit rechercher les exécutables auxquels vous faites
356 référence.</p>
358 <p>Lorsqu'un programme s'exécute depuis le serveur web en tant que
359 programme CGI, sa variable <code>PATH</code> n'aura peut-être pas
360 la même valeur. Tout programme que vous invoquez dans votre
361 programme CGI ( comme par exemple <code>sendmail</code>) devra
362 être spécifié par son chemin complet, de façon à ce que le shell
363 puisse le trouver lorsqu'il tentera d'exécuter votre programme
366 <p>Un exemple typique de spécification de programme est le chemin
367 vers l'interpréteur de script (souvent <code>perl</code>) que l'on
368 trouve à la première ligne de votre programme CGI et qui va
369 ressembler à ceci :</p>
371 <highlight language="perl">
375 <p>Assurez-vous qu'il s'agit bien du chemin correct vers
376 l'interpréteur.</p>
378 <note type="warning">
379 Lors de l'édition de scripts CGI sous Windows, il se peut que des
380 caractères de fin de ligne soient ajoutés au chemin de
381 l'interpré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" à cause des
384 caractères de fin de ligne non reconnus car considérés comme
385 faisant partie du nom de fichier de l'interpréteur.
390 <section id="missingenv">
391 <title>Variables d'environnement manquantes</title>
393 <p>Si votre programme CGI dé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>
397 <p>Lorsque des en-têtes HTTP ne sont pas transmis à
398 l'environnement, assurez-vous qu'ils sont bien formatés selon la
399 <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, section
400 4.2 : les noms d'en-têtes doivent commencer par une lettre,
401 elle-même suivie de lettres, chiffres ou traits d'union. Tout
402 en-tête dont le nom viole cette règle sera ignoré.</p>
406 <section id="syntaxerrors">
407 <title>Erreurs inhérentes au programme</title>
409 <p>La plupart des échecs dans l'exécution d'un programme CGI
410 proviennent du programme lui-même. Ceci est particulièrement vrai
411 lorsque ce satané programme CGI se bloque, alors que vous avez
412 appris à ne plus commettre les deux erreurs précédentes. La
413 première chose à faire est de vous assurer que votre programme
414 s'exécute depuis la ligne de commande, avant de le tester à partir
415 du serveur web. Par exemple, essayez :</p>
418 cd /usr/local/apache2/cgi-bin<br/>
422 <p>(N'invoquez pas l'interpréteur <code>perl</code>. Le shell et
423 Apache doivent être capable de le déterminer à partir de <a
424 href="#pathinformation">l'information sur le chemin</a> située sur
425 la première ligne du script.)</p>
427 <p>La première chose que vous devriez voir affichée par votre
428 programme est un ensemble d'en-tê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écuter le programme depuis le serveur. Voir <a
433 href="#writing">Ecriture d'un programme CGI</a> ci-dessus pour
434 plus de détails.</p>
437 <section id="errorlogs">
438 <title>Journalisation des erreurs</title>
440 <p>Les journaux d'erreurs sont vos amis. Toute anomalie de
441 fonctionnement est consignée dans le journal des erreurs et c'est
442 ici que vous devez regarder en premier en cas de problème. Si
443 l'hébergeur de votre site ne vous donne pas accès au journal des
444 erreurs, vous avez tout intérêt à vous tourner vers quelqu'un
445 d'autre. Apprenez à déchiffrer les journaux d'erreurs, et vous
446 vous apercevrez que la plupart des problèmes seront rapidement
447 identifiés . . . et résolus.</p>
450 <section id="suexec">
451 <title>Suexec</title>
453 <p>Le programme <a href="../suexec.html">suexec</a> permet
454 d'exécuter les programmes CGI avec des droits différents selon le
455 serveur virtuel ou le répertoire utilisateur dans lequel ils
456 se situent. Suexec effectue une vérification des droits très
457 stricte, et toute anomalie détectée au cours de cette vérification
458 entraînera un echec d'exécution de votre programme CGI avec
459 affichage de l'erreur <code>Premature end of script
462 <p>Pour savoir si vous pouvez utiliser suexec, tapez la commande
463 <code>apachectl -V</code>, et regardez le chemin indiqué par
464 <code>SUEXEC_BIN</code>. Si au démarrage d'Apache, ce dernier
465 trouve un exécutable <program>suexec</program> dans ce chemin,
466 suexec sera activé.</p>
468 <p>Si vous ne maîtrisez pas le fonctionnement de suexec, il vous
469 est déconseillé de l'utiliser. Pour désactiver suexec, supprimer
470 simplement (ou renommez) l'exécutable <program>suexec</program>
471 pointé par <code>SUEXEC_BIN</code> et redémarrez le serveur. Si
472 après une lecture de <a href="../suexec.html">suexec</a>, vous
473 décidez quand-même de l'utiliser, tapez la commande <code>suexec
474 -V</code> pour voir où se situe le journal de suexec, et utilisez
475 ce dernier pour déterminer quelles règles vous violez
476 éventuellement.</p>
480 <section id="behindscenes">
481 <title>Que se passe-t-il en coulisse</title>
483 <p>Lorsque vos compétences en programmation CGI seront plus
484 poussées, il s'avérera intéressant pour vous de mieux comprendre ce
485 qui se passe en coulisse, et en particulier la manière dont le
486 navigateur et le serveur dialoguent entre eux. En effet, bien qu'il
487 soit tout à fait louable d'écrire un programme qui affiche "Bonjour
488 tout le monde . . .", cela ne sert pas à grand chose.</p>
491 <title>Variables d'environnement</title>
493 <p>Les variables d'environnement sont des valeurs qui gravitent
494 autour de vous lorsque vous utilisez votre ordinateur. Elles sont
495 très utiles, à l'instar de votre chemin par défaut (où votre
496 ordinateur va rechercher le fichier physique correspondant à la
497 commande que vous avez tapée), votre nom d'utilisateur, le type de
498 votre terminal, etc... Pour obtenir une liste complète des
499 variables d'environnement standards que vous utilisez tous les
500 jours, tapez <code>env</code> dans votre interpréteur
503 <p>Au cours de la transaction CGI, le serveur et le navigateur
504 définissent aussi des variables d'environnement, de façon à ce
505 qu'ils puissent communiquer entre eux. Ces variables dé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écution, etc...</p>
510 <p>Ces variables sont à la disposition du programmeur CGI, et
511 elles constituent 50% de la communication client-serveur. La liste
512 complète des variables requises se trouve à
513 <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway
514 Interface RFC</a>.</p>
516 <p>Ce programme CGI basique en Perl permet d'afficher toutes les
517 variables d'environnement qui sont échangées. Deux programmes
518 similaires sont fournis avec la distribution d'Apache et situés
519 dans le ré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éthodes pour <a href="../env.html">ajouter vos propres
525 variables d'environnement</a> aux variables de base fournies par
528 <highlight language="perl">
533 print "Content-type: text/html\n\n";
534 foreach my $key (keys %ENV) {
535 print "$key --> $ENV{$key}<br>";
541 <title>STDIN et STDOUT</title>
543 <p>L'entré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 à un fichier fourni
547 au programme à des fins de traitement, et <code>STDOUT</code> à la
548 console ou à l'écran.</p>
550 <p>Lorsque vous transmettez un formulaire web à un programme CGI
551 par la méthode <code>POST</code>, les données de ce formulaire
552 sont transcrites dans un format spécial et transmises à votre
553 programme CGI via <code>STDIN</code>. Le programme peut alors les
554 traiter comme si elles provenaient du clavier ou d'un
557 <p>Ce "format spécial" est très simple. Un nom de champ et sa
558 valeur sont reliés entre eux par un signe "égal" (=), et chacune
559 de ces paires nom champ/valeur est séparée de la suivante par un
560 "et" commercial (&). Les caractères
561 spéciaux comme les espaces, les "et" commerciaux, et les signes
562 "égal" sont convertis en leur équivalent hexadécimal pour éviter
563 qu'ils ne gâchent le travail. La chaîne contenant les données doit
564 ressembler à ceci :</p>
567 name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey
570 <p>Vous verrez aussi parfois une chaîne de ce type accolée à une
571 URL. Dans ce cas, le serveur enregistre cette chaîne dans la
572 variable d'environnement appelée <code>QUERY_STRING</code>. On a
573 alors affaire à une requête de type <code>GET</code>. Votre
574 formulaire HTML indique laquelle des méthodes <code>GET</code> ou
575 <code>POST</code> est utilisée pour transmettre les données, en
576 définissant l'attribut <code>METHOD</code> au niveau de la balise
577 <code>FORM</code>.</p>
579 <p>Votre programme est ensuite chargé d'extraire les informations
580 utiles de cette chaîne. Heureusement, des bibliothèques et des
581 modules sont à votre disposition pour vous aider à traiter ces
582 données, et à gérer les différents aspects de votre programme
586 <!-- reprendre ici -->
587 <section id="libraries">
588 <title>Bibliothèques et modules CGI</title>
590 <p>Pour écrire un programme CGI, il vous est conseillé d'utiliser
591 une bibliothè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élérer le développement.</p>
595 <p>Si vous écrivez des programmes CGI en Perl, des modules sont à
596 votre disposition à <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émente les
599 fonctionnalités strictement nécessaires, mais suffisantes pour
600 la majorité des programmes.</p>
602 <p>Si vous écrivez des programmes CGI en C, vous disposez de
603 nombreuses options. L'une d'elles est la bibliothèque
604 <code>CGIC</code> de <a href="http://www.boutell.com/cgic/"
605 >http://www.boutell.com/cgic/</a>.</p>
608 <section id="moreinfo">
609 <title>Pour plus d'informations</title>
611 <p>La spécification CGI actuelle est disponible dans la <a
612 href="http://www.ietf.org/rfc/rfc3875">Common Gateway
613 Interface RFC</a>.</p>
615 <p>Lorsque vous postez une question à propos d'un problè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ème rencontré, ce que vous attendiez exactement, et en
619 quoi ce qui se produit est réellement différent de ce que vous
620 attendiez, quel serveur vous utilisez, en quel langage votre
621 programme CGI a été écrit, et, si possible, son code source. Ceci
622 permettra une résolution plus aisée de votre problème.</p>
624 <p>Notez que les questions à propos de problèmes CGI ne doivent
625 <strong>jamais</strong> être postées dans la base de données de
626 bogues d'Apache, à moins que vous ne soyez sûr d'avoir trouvé un
627 problème dans le code source d'Apache.</p>