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