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="<-" alt="<-" src="/images/left.gif" /></a></div> 21<div id="path"> 22<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <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"> en </a> | 25<a href="/fr/howto/cgi.html" title="Fran�ais"> fr </a> | 26<a href="/ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 27<a href="/ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </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"><Directory /usr/local/apache2/htdocs/somedir> 149 Options +ExecCGI 150</Directory></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"><Directory /home/*/public_html> 182 Options +ExecCGI 183 AddHandler cgi-script .cgi 184</Directory></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"><Directory /home/*/public_html/cgi-bin> 192 Options ExecCGI 193 SetHandler cgi-script 194</Directory></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 --> $ENV{$key}<br>"; 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 (&). 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&city=Lexington&state=KY&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"> en </a> | 605<a href="/fr/howto/cgi.html" title="Fran�ais"> fr </a> | 606<a href="/ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 607<a href="/ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </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&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>