httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gry...@apache.org
Subject svn commit: r740484 - in /httpd/httpd/trunk/docs/manual/howto: cgi.html cgi.html.en cgi.html.fr cgi.xml.fr cgi.xml.meta
Date Tue, 03 Feb 2009 22:16:22 GMT
Author: gryzor
Date: Tue Feb  3 22:16:22 2009
New Revision: 740484

URL: http://svn.apache.org/viewvc?rev=740484&view=rev
Log:
Added french translation for the CGI howto

Added:
    httpd/httpd/trunk/docs/manual/howto/cgi.html.fr
    httpd/httpd/trunk/docs/manual/howto/cgi.xml.fr
Modified:
    httpd/httpd/trunk/docs/manual/howto/cgi.html
    httpd/httpd/trunk/docs/manual/howto/cgi.html.en
    httpd/httpd/trunk/docs/manual/howto/cgi.xml.meta

Modified: httpd/httpd/trunk/docs/manual/howto/cgi.html
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/howto/cgi.html?rev=740484&r1=740483&r2=740484&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/howto/cgi.html (original)
+++ httpd/httpd/trunk/docs/manual/howto/cgi.html Tue Feb  3 22:16:22 2009
@@ -4,6 +4,10 @@
 Content-Language: en
 Content-type: text/html; charset=ISO-8859-1
 
+URI: cgi.html.fr
+Content-Language: fr
+Content-type: text/html; charset=ISO-8859-1
+
 URI: cgi.html.ja.utf8
 Content-Language: ja
 Content-type: text/html; charset=UTF-8

Modified: httpd/httpd/trunk/docs/manual/howto/cgi.html.en
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/howto/cgi.html.en?rev=740484&r1=740483&r2=740484&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/howto/cgi.html.en (original)
+++ httpd/httpd/trunk/docs/manual/howto/cgi.html.en Tue Feb  3 22:16:22 2009
@@ -19,6 +19,7 @@
 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.3</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Apache Tutorial: Dynamic Content with CGI</h1>
 <div class="toplang">
 <p><span>Available Languages: </span><a href="../en/howto/cgi.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
 </div>
@@ -558,6 +559,7 @@
   </div></div>
 <div class="bottomlang">
 <p><span>Available Languages: </span><a href="../en/howto/cgi.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
 </div><div id="footer">

Added: httpd/httpd/trunk/docs/manual/howto/cgi.html.fr
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/howto/cgi.html.fr?rev=740484&view=auto
==============================================================================
--- httpd/httpd/trunk/docs/manual/howto/cgi.html.fr (added)
+++ httpd/httpd/trunk/docs/manual/howto/cgi.html.fr Tue Feb  3 22:16:22 2009
@@ -0,0 +1,609 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
+        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+              This file is generated from xml source: DO NOT EDIT
+        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+      -->
+<title>Tutoriel Apache : Contenu dynamique basé sur CGI - Serveur Apache HTTP</title>
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
+<p class="apache">Serveur Apache HTTP Version 2.3</p>
+<img alt="" src="../images/feather.gif" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.3</a> &gt; <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel Apache : Contenu dynamique basé sur CGI</h1>
+<div class="toplang">
+<p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../fr/howto/cgi.html" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div>
+</div>
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introduction</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurer Apache pour autoriser CGI</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#writing">Ecrire un programme CGI</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Mais ça ne marche toujours pas !</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">Que se passe-t-il en coulisse</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#libraries">Bibliothèques et modules CGI</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">Pour plus d'informations</a></li>
+</ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="intro" id="intro">Introduction</a></h2>
+    
+
+    <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>
+
+    <p>CGI (Common Gateway Interface) définit une méthode d'interaction
+    entre un serveur web et des programmes générateurs de contenu
+    externes, plus souvent appelés programmes CGI ou scripts CGI. Il
+    s'agit de la méthode la plus simple, et la plus
+    courante, pour ajouter du contenu dynamique à votre site web. Ce
+    document est une introduction à la configuration de CGI sur votre
+    serveur web Apache, et une initiation à l'écriture de programmes
+    CGI.</p>
+  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="configuring" id="configuring">Configurer Apache pour autoriser CGI</a></h2>
+    
+
+    <p>Apache doit être configuré pour permettre l'exécution des
+    programmes CGI, pour que vos programmes CGI puissent fonctionner
+    correctement. Il existe plusieurs méthodes pour y parvenir.</p>
+
+    <div class="warning">Note: si Apache a été compilé avec le support
+    des modules partagés (DSO), vous devez vous assurer que le module CGI est
+    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é
+    commentée dans votre <code>httpd.conf</code>. Une directive correcte
+    doit ressembler à ceci :
+
+    <div class="example"><p><code>
+      LoadModule cgi_module modules/mod_cgi.so
+    </code></p></div></div>
+
+    <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>
+      
+
+      <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> indique à Apache qu'un
+      répertoire particulier est dédié aux programmes CGI. Apache
+      considérera que tout fichier situé dans ce répertoire est un
+      programme CGI, et tentera de l'exécuter lorsque cette ressource
+      fera l'objet d'une requête client.</p>
+
+      <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> se présente comme suit
+      :</p>
+
+      <div class="example"><p><code>
+        ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
+      </code></p></div>
+
+      <p>Cet exemple est tiré de votre fichier de configuration
+      <code>httpd.conf</code> par défaut, si vous avez installé Apache
+      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
+      directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>, qui
+      définit à quel répertoire particulier doit correspondre un préfixe
+      d'URL. <code class="directive">Alias</code> et
+      <code class="directive">ScriptAlias</code> sont généralement utilisés pour
+      accéder à des répertoires situés en dehors du répertoire défini
+      par la directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. La différence entre
+      <code class="directive">Alias</code> et <code class="directive">ScriptAlias</code>
+      réside dans le fait que <code class="directive">ScriptAlias</code> indique
+      en plus que tout ce qui se trouve sous le préfixe d'URL doit être
+      considéré comme un programme CGI. Ainsi, l'exemple ci-dessus
+      indique à Apache que toute requête pour une ressource commençant
+      par <code>/cgi-bin/</code> doit être servie depuis le répertoire
+      <code>/usr/local/apache2/cgi-bin/</code>, et doit être traitée en
+      tant que programme CGI.</p>
+
+      <p>Par exemple, si une requête pour l'URL
+      <code>http://www.example.com/cgi-bin/test.pl</code> est
+      effectuée, Apache tentera d'exécuter le fichier
+      <code>/usr/local/apache2/cgi-bin/test.pl</code> et en renverra la
+      sortie. Bien entendu, le fichier doit exister, être exécutable, et
+      retourner sa sortie d'une manière particulière, sinon Apache
+      renverra un message d'erreur.</p>
+    
+
+    <h3><a name="nonscriptalias" id="nonscriptalias">CGI en dehors des répertoires ScripAlias</a></h3>
+      
+
+      <p>Pour des raisons de sécurité, la localisation des programmes
+      CGI est souvent restreinte aux
+      répertoires définis par <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>. De cette manière, les administrateurs
+      peuvent contrôler précisément qui est autorisé à utiliser les
+      programmes CGI. Cependant, si les précautions adéquates quant à
+      la sécurité sont prises, il n'y a aucune raison pour que les
+      programmes CGI ne puissent pas être exécutés depuis d'autres
+      répertoires. Par exemple, vous pouvez autoriser les utilisateurs à
+      enregistrer des contenus web dans leurs répertoires home à l'aide
+      de la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. S'ils veulent mettre en
+      oeuvre leurs propres programmes CGI, mais n'ont pas l'autorisation
+      d'accès au répertoire <code>cgi-bin</code> principal, ils devront
+      être en mesure d'exécuter ces programmes depuis un autre
+      répertoire.</p>
+
+      <p>L'autorisation d'exécution des programmes CGI dans un
+      répertoire arbitraire se fait en deux étapes. En premier lieu, le
+      gestionnaire <code>cgi-script</code> doit être activé à l'aide
+      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,
+      <code>ExecCGI</code> doit être spécifié dans la directive <code class="directive"><a href="../mod/core.html#options">Options</a></code>.</p>
+    
+
+    <h3><a name="options" id="options">Utilisation d'options explicites pour permettre l'exécution
+      des programmes CGI</a></h3>
+      
+
+      <p>Vous pouvez utiliser de manière explicite la directive
+      <code class="directive"><a href="../mod/core.html#options">Options</a></code> dans le fichier de
+      configuration de votre serveur principal, pour indiquer que
+      l'exécution des programmes CGI est permise depuis un répertoire
+      particulier :</p>
+
+      <div class="example"><p><code>
+        &lt;Directory /usr/local/apache2/htdocs/un-repertoire&gt;<br />
+        <span class="indent">
+          Options +ExecCGI<br />
+        </span>
+        &lt;/Directory&gt;
+      </code></p></div>
+
+      <p>La directive ci-dessus indique à Apache qu'il doit permettre
+      l'exécution des fichiers CGI. Vous devez aussi indiquer au serveur
+      quels fichiers sont des fichiers CGI. La directive <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> suivante indique au
+      serveur qu'il doit traiter tous les fichiers possédant une
+      extension <code>cgi</code> ou <code>pl</code> en tant que
+      programmes CGI :</p>
+
+      <div class="example"><p><code>
+        AddHandler cgi-script .cgi .pl
+      </code></p></div>
+    
+
+    <h3><a name="htaccess" id="htaccess">Fichiers .htaccess</a></h3>
+      
+
+      <p>Le <a href="htaccess.html"><code>tutoriel
+      .htaccess</code></a> montre comment activer les programmes
+      CGI si vous n'avez pas accès au
+      fichier <code>httpd.conf</code>.</p>
+    
+
+    <h3><a name="userdir" id="userdir">Répertoires utilisateurs</a></h3>
+      
+
+      <p>Pour permettre l'exécution en tant que programme CGI de tout
+      fichier possédant l'extension <code>.cgi</code> et situé dans un
+      répertoire utilisateur, vous pouvez utiliser la configuration
+      suivante :</p>
+
+      <div class="example"><p><code>
+      &lt;Directory /home/*/public_html&gt;<br />
+      <span class="indent">
+        Options +ExecCGI<br />
+        AddHandler cgi-script .cgi<br />
+      </span>
+      &lt;/Directory&gt;
+      </code></p></div>
+
+      <p>Pour indiquer un sous-répertoire <code>cgi-bin</code> d'un
+      répertoire utilisateur où tout fichier sera traité en tant que
+      programme CGI, vous pouvez utiliser ceci :</p>
+
+      <div class="example"><p><code>
+      &lt;Directory /home/*/public_html/cgi-bin&gt;<br />
+      <span class="indent">
+        Options ExecCGI<br />
+        SetHandler cgi-script<br />
+      </span>
+      &lt;/Directory&gt;
+      </code></p></div>
+
+    
+
+  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="writing" id="writing">Ecrire un programme CGI</a></h2>
+    
+
+    <p>Il y a deux différences principales entre la programmation
+    "standard" et la programmation CGI.</p>
+
+    <p>En premier lieu, toute sortie de votre programme CGI doit être
+    précédée d'un en-tête <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a>. Il s'agit d'un
+    en-tête HTTP qui indique au client quel type de contenu il reçoit.
+    La plupart du temps, il se présente comme suit :</p>
+
+    <div class="example"><p><code>
+      Content-type: text/html
+    </code></p></div>
+
+    <p>En second lieu, votre sortie doit être en HTML, ou tout autre
+    format qu'un navigateur est en mesure d'afficher. La plupart du
+    temps, il s'agira de HTML, mais occasionnellement, vous pouvez être
+    amené à écrire un programme CGI qui renvoie une image gif, ou un
+    autre type de contenu non-HTML.</p>
+
+    <p>A part ces deux différences, un programme CGI ressemblera à tout
+    autre programme que vous pourriez être amené à écrire.</p>
+
+    <h3><a name="firstcgi" id="firstcgi">Votre premier programme CGI</a></h3>
+      
+
+      <p>L'exemple suivant est un exemple de programme CGI qui permet
+      d'afficher une ligne de caractères dans votre navigateur. Ecrivez
+      ce qui suit, enregistrez le dans un fichier nommé
+      <code>premier.pl</code>, et placez le dans votre répertoire
+      <code>cgi-bin</code>.</p>
+
+      <div class="example"><p><code>
+        #!/usr/bin/perl<br />
+        print "Content-type: text/html\n\n";<br />
+        print "Bonjour tout le monde . . .";
+      </code></p></div>
+
+      <p>Même si Perl ne vous est pas familier, vous devriez être
+      capable de comprendre le fonctionnement de ce programme. La
+      première ligne indique à Apache (ou à toute interface à partir de
+      laquelle le programme s'exécute) que ce programme peut être
+      exécuté en fournissant son fichier à l'interpréteur
+      <code>/usr/bin/perl</code>. La seconde ligne affiche la
+      déclaration du type de contenu considéré, suivie de deux paires
+      "Retour chariot - Nouvelle ligne". Ceci a pour effet d'insérer une
+      ligne vide après l'en-tête pour marquer la fin des en-têtes HTTP,
+      et le début du corps du document. La troisième ligne affiche la
+      chaîne de caractères "Bonjour tout le monde . . .". Et c'est tout
+      ce dont vous avez besoin.</p>
+
+      <p>Si vous ouvrez votre navigateur favori et lui indiquez
+      l'adresse</p>
+
+      <div class="example"><p><code>
+        http://www.exemple.com/cgi-bin/premier.pl
+      </code></p></div>
+
+      <p>ou toute autre URL correspondant à votre programme CGI, Vous
+      verrez la ligne <code>Bonjour tout le monde . . .</code>
+      s'afficher dans la fenêtre de votre navigateur. Ce n'est pas
+      extraordinaire, mais si vous y êtes parvenu, vous avez de bonnes
+      chances d'y parvenir pour tout autre programme plus
+      sophistiqué.</p>
+    
+  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="troubleshoot" id="troubleshoot">Mais ça ne marche toujours pas !</a></h2>
+    
+
+    <p>Vous devriez voir au moins une des quatre sorties suivantes dans
+    votre navigateur lorsque vous essayez d'accéder à votre programme
+    CGI depuis le web :</p>
+
+    <dl>
+      <dt>Le flux de sortie de votre programme CGI</dt>
+      <dd>Impeccable ! Cela signifie que tout fonctionne correctement.
+      Si la sortie est correcte mais n'est pas traitée correctement par
+      le navigateur, assurez-vous d'avoir défini
+      <code>Content-Type</code> de manière appropriée dans votre
+      programme CGI.</dd>
+
+      <dt>Le code source de votre programme CGI ou un message "POST
+      Method Not Allowed"</dt>
+      <dd>Cela signifie que vous n'avez pas configuré Apache de manière
+      à ce qu'il puisse traiter votre programme CGI. Relisez la section
+      sur la <a href="#configuring">configuration d'Apache</a>, et
+      essayez de trouver votre erreur.</dd>
+
+      <dt>Un message commençant par "Forbidden"</dt>
+      <dd>Ce type de message est révélateur d'un problème de
+      droits. Consultez le <a href="#errorlogs">journal des erreurs
+      d'Apache</a> et la section ci-dessous sur les <a href="#permissions">droits des fichiers</a>.</dd>
+
+      <dt>Un message contenant "Internal Server Error"</dt>
+      <dd>Si vous consultez le <a href="#errorlogs">journal des erreurs
+      d'Apache</a>, vous y trouverez probablement des messages du type
+      "Premature end of script headers" (Fin prématurée des en-têtes de
+      script), éventuellement accompagnés d'un message d'erreur généré
+      par votre programme CGI. Dans ce cas, il va vous falloir lire
+      chacune des sections ci-dessous pour déterminer ce qui empêche
+      votre programme CGI de générer les en-têtes appropriés.</dd>
+    </dl>
+
+    <h3><a name="permissions" id="permissions">Droits des fichiers</a></h3>
+      
+
+      <p>Souvenez-vous que le serveur ne s'exécute pas sous votre nom.
+      En d'autres termes, lorsque le serveur a démarré, il s'exécute
+      avec les droits d'un utilisateur non privilégié - en général
+      <code>nobody</code>, ou <code>www</code> - et en conséquence, il
+      aura besoin de droits supplémentaires pour pouvoir exécuter des
+      fichiers dont vous êtes le propriétaire. En général, pour qu'un
+      fichier ait des droits suffisants pour être exécutable par
+      <code>nobody</code>, il suffit de lui attribuer des droits
+      d'exécution pour tout le monde :</p>
+
+      <div class="example"><p><code>
+        chmod a+x premier.pl
+      </code></p></div>
+
+      <p>En outre, si votre programme doit pouvoir accéder en lecture
+      et/ou écriture à d'autres fichiers, ces derniers devront avoir les
+      droits appropriés.</p>
+
+    
+
+    <h3><a name="pathinformation" id="pathinformation">Chemin des exécutables (PATH) et variables
+      d'environnement</a></h3>
+      
+
+      <p>Lorsque vous lancez un programme depuis la ligne de commande,
+      certaines informations sont passées au shell sans que vous vous en
+      doutiez. Par exemple, la variable <code>PATH</code> indique au
+      shell où il doit rechercher les exécutables auxquels vous faites
+      référence.</p>
+
+      <p>Lorsqu'un programme s'exécute depuis le serveur web en tant que
+      programme CGI, sa variable <code>PATH</code> n'aura peut-être pas
+      la même valeur. Tout programme que vous invoquez dans votre
+      programme CGI ( comme par exemple <code>sendmail</code>) devra
+      être spécifié par son chemin complet, de façon à ce que le shell
+      puisse le trouver lorsqu'il tentera d'exécuter votre programme
+      CGI.</p>
+
+      <p>Un exemple typique de spécification de programme est le chemin
+      vers l'interpréteur de script (souvent <code>perl</code>) que l'on
+      trouve à la première ligne de votre programme CGI et qui va
+      ressembler à ceci :</p>
+
+      <div class="example"><p><code>
+        #!/usr/bin/perl
+      </code></p></div>
+
+      <p>Assurez-vous qu'il s'agit bien du chemin correct vers
+      l'interpréteur.</p>
+
+      <p>De plus, si votre programme CGI dépend d'autres <a href="#env">variables d'environnement</a>, vous devrez vous
+      assurer qu'elles lui sont bien transmises par Apache.</p>
+
+    
+
+    <h3><a name="syntaxerrors" id="syntaxerrors">Erreurs inhérentes au programme</a></h3>
+      
+
+      <p>La plupart des échecs dans l'exécution d'un programme CGI
+      proviennent du programme lui-même. Ceci est particulièrement vrai
+      lorsque ce satané programme CGI se bloque, alors que vous avez
+      appris à ne plus commettre les deux erreurs précédentes. La
+      première chose à faire est de vous assurer que votre programme
+      s'exécute depuis la ligne de commande, avant de le tester à partir
+      du serveur web. Par exemple, essayez :</p>
+
+      <div class="example"><p><code>
+      cd /usr/local/apache2/cgi-bin<br />
+      ./premier.pl
+      </code></p></div>
+
+      <p>(N'invoquez pas l'interpréteur <code>perl</code>. Le shell et
+      Apache doivent être capable de le déterminer à partir de <a href="#pathinformation">l'information sur le chemin</a> située sur
+      la première ligne du script.)</p>
+
+      <p>La première chose que vous devriez voir affichée par votre
+      programme est un ensemble d'en-têtes HTTP, comprenant entre autres
+      le <code>Content-Type</code>, et suivi d'une ligne vide. Si vous
+      voyez quoi que ce soit d'autre, Apache renverra l'erreur
+      <code>Premature end of script headers</code> si vous tentez
+      d'exécuter le programme depuis le serveur. Voir <a href="#writing">Ecriture d'un programme CGI</a> ci-dessus pour
+      plus de détails.</p>
+    
+
+    <h3><a name="errorlogs" id="errorlogs">Journalisation des erreurs</a></h3>
+      
+
+      <p>Les journaux d'erreurs sont vos amis. Toute anomalie de
+      fonctionnement est consignée dans le journal des erreurs et c'est
+      ici que vous devez regarder en premier en cas de problème. Si
+      l'hébergeur de votre site ne vous donne pas accès au journal des
+      erreurs, vous avez tout intérêt à vous tourner vers quelqu'un
+      d'autre. Apprenez à déchiffrer les journaux d'erreurs, et vous
+      vous apercevrez que la plupart des problèmes seront rapidement
+      identifiés . . . et résolus.</p>
+    
+
+    <h3><a name="suexec" id="suexec">Suexec</a></h3>
+      
+
+      <p>Le programme <a href="../suexec.html">suexec</a> permet
+      d'exécuter les programmes CGI avec des droits différents selon le
+      serveur virtuel ou le répertoire utilisateur dans lequel ils
+      se situent. Suexec effectue une vérification des droits très
+      stricte, et toute anomalie détectée au cours de cette vérification
+      entraînera un echec d'exécution de votre programme CGI avec
+      affichage de l'erreur <code>Premature end of script
+      headers</code>.</p>
+
+      <p>Pour savoir si vous pouvez utiliser suexec, tapez la commande
+      <code>apachectl -V</code>, et regardez le chemin indiqué par
+      <code>SUEXEC_BIN</code>. Si au démarrage d'Apache, ce dernier
+      trouve un exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code> dans ce chemin,
+      suexec sera activé.</p>
+
+      <p>Si vous ne maîtrisez pas le fonctionnement de suexec, il vous
+      est déconseillé de l'utiliser. Pour désactiver suexec, supprimer
+      simplement (ou renommez) l'exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code>
+      pointé par <code>SUEXEC_BIN</code> et redémarrez le serveur. Si
+      après une lecture de <a href="../suexec.html">suexec</a>, vous
+      décidez quand-même de l'utiliser, tapez la commande <code>suexec
+      -V</code> pour voir où se situe le journal de suexec, et utilisez
+      ce dernier pour déterminer quelles règles vous violez
+      éventuellement.</p>
+    
+  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="behindscenes" id="behindscenes">Que se passe-t-il en coulisse</a></h2>
+    
+
+    <p>Lorsque vos compétences en programmation CGI seront plus
+    poussées, il s'avérera intéressant pour vous de mieux comprendre ce
+    qui se passe en coulisse, et en particulier la manière dont le
+    navigateur et le serveur dialoguent entre eux. En effet, bien qu'il
+    soit tout à fait louable d'écrire un programme qui affiche "Bonjour
+    tout le monde . . .", cela ne sert pas à grand chose.</p>
+
+    <h3><a name="env" id="env">Variables d'environnement</a></h3>
+      
+
+      <p>Les variables d'environnement sont des valeurs qui gravitent
+      autour de vous lorsque vous utilisez votre ordinateur. Elles sont
+      très utiles, à l'instar de votre chemin par défaut (où votre
+      ordinateur va rechercher le fichier physique correspondant à la
+      commande que vous avez tapée), votre nom d'utilisateur, le type de
+      votre terminal, etc... Pour obtenir une liste complète des
+      variables d'environnement standards que vous utilisez tous les
+      jours, tapez <code>env</code> dans votre interpréteur
+      de commandes.</p>
+
+      <p>Au cours de la transaction CGI, le serveur et le navigateur
+      définissent aussi des variables d'environnement, de façon à ce
+      qu'ils puissent communiquer entre eux. Ces variables définissent
+      entre autre le type de navigateur (Netscape, IE, Lynx), le type de
+      serveur (Apache, IIS, WebSite), le nom du programme CGI en cours
+      d'exécution, etc...</p>
+
+      <p>Ces variables sont à la disposition du programmeur CGI, et
+      elles constituent 50% de la communication client-serveur. La liste
+      complète des variables requises se trouve à
+      <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>.</p>
+
+      <p>Ce programme CGI basique en Perl permet d'afficher toutes les
+      variables d'environnement qui sont échangées. Deux programmes
+      similaires sont fournis avec la distribution d'Apache et situés
+      dans le répertoire <code>cgi-bin</code>.
+      Notez que certaines variables sont
+      obligatoires, alors que d'autres sont optionnelles, si bien que
+      vous verrez s'afficher certaines variables qui ne font pas partie
+      de la liste officielle. De plus, Apache vous propose de nombreuses
+      méthodes pour <a href="../env.html">ajouter vos propres
+      variables d'environnement</a> aux variables de base fournies par
+      défaut.</p>
+
+      <div class="example"><p><code>
+        #!/usr/bin/perl<br />
+        print "Content-type: text/html\n\n";<br />
+        foreach $key (keys %ENV) {<br />
+        <span class="indent">
+          print "$key --&gt; $ENV{$key}&lt;br&gt;";<br />
+        </span>
+        }
+      </code></p></div>
+    
+
+    <h3><a name="stdin" id="stdin">STDIN et STDOUT</a></h3>
+      
+
+      <p>L'entrée standard (<code>STDIN</code>) et la sortie standard
+      (<code>STDOUT</code>) constituent d'autres voies de communication
+      entre le client et le serveur. Dans un contexte normal,
+      <code>STDIN</code> correspond au clavier, ou à un fichier fourni
+      au programme à des fins de traitement, et <code>STDOUT</code> à la
+      console ou à l'écran.</p>
+
+      <p>Lorsque vous transmettez un formulaire web à un programme CGI
+      par la méthode <code>POST</code>, les données de ce formulaire
+      sont transcrites dans un format spécial et transmises à votre
+      programme CGI via <code>STDIN</code>. Le programme peut alors les
+      traiter comme si elles provenaient du clavier ou d'un
+      fichier.</p>
+
+      <p>Ce "format spécial" est très simple. Un nom de champ et sa
+      valeur sont reliés entre eux par un signe "égal" (=), et chacune
+      de ces paires nom champ/valeur est séparée de la suivante par un
+      "et" commercial (&amp;). Les caractères
+      spéciaux comme les espaces, les "et" commerciaux, et les signes
+      "égal" sont convertis en leur équivalent hexadécimal pour éviter
+      qu'ils ne gâchent le travail. La chaîne contenant les données doit
+      ressembler à ceci :</p>
+
+      <div class="example"><p><code>
+        name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
+      </code></p></div>
+
+      <p>Vous verrez aussi parfois une chaîne de ce type accolée à une
+      URL. Dans ce cas, le serveur enregistre cette chaîne dans la
+      variable d'environnement appelée <code>QUERY_STRING</code>. On a
+      alors affaire à une requête de type <code>GET</code>. Votre
+      formulaire HTML indique laquelle des méthodes <code>GET</code> ou
+      <code>POST</code> est utilisée pour transmettre les données, en
+      définissant l'attribut <code>METHOD</code> au niveau de la balise
+      <code>FORM</code>.</p>
+
+      <p>Votre programme est ensuite chargé d'extraire les informations
+      utiles de cette chaîne. Heureusement, des bibliothèques et des
+      modules sont à votre disposition pour vous aider à traiter ces
+      données, et à gérer les différents aspects de votre programme
+      CGI.</p>
+    
+  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="libraries" id="libraries">Bibliothèques et modules CGI</a></h2>
+    
+
+    <p>Pour écrire un programme CGI, il vous est conseillé d'utiliser
+    une bibliothèque de code, ou un module, qui effectueront une grande
+    partie du travail de base pour vous. Ceci vous permettra de diminuer
+    le nombre d'erreurs et d'accélérer le développement.</p>
+
+    <p>Si vous écrivez des programmes CGI en Perl, des modules sont à
+    votre disposition à <a href="http://www.cpan.org/">CPAN</a>. A ce
+    sujet, le module le plus populaire est <code>CGI.pm</code>. Vous
+    pouvez aussi essayer <code>CGI::Lite</code>, qui implémente les
+    fonctionnalités strictement nécessaires, mais suffisantes pour
+    la majorité des programmes.</p>
+
+    <p>Si vous écrivez des programmes CGI en C, vous disposez de
+    nombreuses options. L'une d'elles est la bibliothèque
+    <code>CGIC</code> de <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>.</p>
+  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="moreinfo" id="moreinfo">Pour plus d'informations</a></h2>
+    
+
+    <p>Il existe un grand nombre de ressources CGI sur le web. Vous
+    pouvez discuter de problèmes CGI avec d'autres utilisateurs dans le
+    groupe Usenet <a href="news:comp.infosystems.www.authoring.cgi">
+    comp.infosystems.www.authoring.cgi</a>. En outre, la liste de
+    diffusion de la Guilde des Ecrivains HTML est une source
+    intarissable de réponses à vos questions. Vous en saurez plus en
+    vous rendant à <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a>.</p>
+
+    <p>Et bien entendu, vous devez lire la spécification CGI, qui
+    présente tous les détails en rapport avec les opérations des
+    programmes CGI. La version originale se trouve au <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>, et
+    dans la RFC IETF actuelle <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway
+    Interface RFC</a>.</p>
+
+    <p>Lorsque vous postez une question à propos d'un problème CGI que
+    vous rencontrez, que ce soit dans une liste de diffusion ou dans un
+    newsgroup, faites en sorte de fournir suffisamment d'informations
+    sur le problème rencontré, ce que vous attendiez exactement, et en
+    quoi ce qui se produit est réellement différent de ce que vous
+    attendiez, quel serveur vous utilisez, en quel langage votre
+    programme CGI a été écrit, et, si possible, son code source. Ceci
+    permettra une résolution plus aisée de votre problème.</p>
+
+    <p>Notez que les questions à propos de problèmes CGI ne doivent
+    <strong>jamais</strong> être postées dans la base de données de
+    bogues d'Apache, à moins que vous ne soyez sûr d'avoir trouvé un
+    problème dans le code source d'Apache.</p>
+  </div></div>
+<div class="bottomlang">
+<p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../fr/howto/cgi.html" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div><div id="footer">
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+</body></html>
\ No newline at end of file

Added: httpd/httpd/trunk/docs/manual/howto/cgi.xml.fr
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/howto/cgi.xml.fr?rev=740484&view=auto
==============================================================================
--- httpd/httpd/trunk/docs/manual/howto/cgi.xml.fr (added)
+++ httpd/httpd/trunk/docs/manual/howto/cgi.xml.fr Tue Feb  3 22:16:22 2009
@@ -0,0 +1,627 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
+<!-- English Revision : 705116 -->
+<!-- French translation : Lucien GENTIS -->
+<!-- Reviewed by : Vincent Deffontaines -->
+<!-- $LastChangedRevision: 2008051801 $ -->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<manualpage metafile="cgi.xml.meta">
+  <parentdocument href="./">Recettes et tutoriels</parentdocument>
+
+  <title>Tutoriel Apache : Contenu dynamique bas&eacute; sur CGI</title>
+
+  <section id="intro">
+    <title>Introduction</title>
+
+    <related>
+      <modulelist>
+        <module>mod_alias</module>
+        <module>mod_cgi</module>
+      </modulelist>
+
+      <directivelist>
+        <directive module="mod_mime">AddHandler</directive>
+        <directive module="core">Options</directive>
+        <directive module="mod_alias">ScriptAlias</directive>
+      </directivelist>
+    </related>
+
+    <p>CGI (Common Gateway Interface) d&eacute;finit une m&eacute;thode d'interaction
+    entre un serveur web et des programmes g&eacute;n&eacute;rateurs de contenu
+    externes, plus souvent appel&eacute;s programmes CGI ou scripts CGI. Il
+    s'agit de la m&eacute;thode la plus simple, et la plus
+    courante, pour ajouter du contenu dynamique &agrave; votre site web. Ce
+    document est une introduction &agrave; la configuration de CGI sur votre
+    serveur web Apache, et une initiation &agrave; l'&eacute;criture de programmes
+    CGI.</p>
+  </section>
+
+  <section id="configuring">
+    <title>Configurer Apache pour autoriser CGI</title>
+
+    <p>Apache doit &ecirc;tre configur&eacute; pour permettre l'ex&eacute;cution des
+    programmes CGI, pour que vos programmes CGI puissent fonctionner
+    correctement. Il existe plusieurs m&eacute;thodes pour y parvenir.</p>
+
+    <note type="warning">Note: si Apache a &eacute;t&eacute; compil&eacute; avec le support
+    des modules partag&eacute;s (DSO), vous devez vous assurer que le module CGI est
+    charg&eacute; ; vous devez pour cela v&eacute;rifier que la directive <directive
+    module="mod_so">LoadModule</directive> correspondante n'a pas &eacute;t&eacute;
+    comment&eacute;e dans votre <code>httpd.conf</code>. Une directive correcte
+    doit ressembler &agrave; ceci :
+
+    <example>
+      LoadModule cgi_module modules/mod_cgi.so
+    </example></note>
+
+    <section id="scriptalias">
+      <title>ScriptAlias</title>
+
+      <p>La directive <directive
+      module="mod_alias">ScriptAlias</directive> indique &agrave; Apache qu'un
+      r&eacute;pertoire particulier est d&eacute;di&eacute; aux programmes CGI. Apache
+      consid&eacute;rera que tout fichier situ&eacute; dans ce r&eacute;pertoire est un
+      programme CGI, et tentera de l'ex&eacute;cuter lorsque cette ressource
+      fera l'objet d'une requ&ecirc;te client.</p>
+
+      <p>La directive <directive
+      module="mod_alias">ScriptAlias</directive> se pr&eacute;sente comme suit
+      :</p>
+
+      <example>
+        ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
+      </example>
+
+      <p>Cet exemple est tir&eacute; de votre fichier de configuration
+      <code>httpd.conf</code> par d&eacute;faut, si vous avez install&eacute; Apache
+      dans son r&eacute;pertoire par d&eacute;faut. La directive <directive
+      module="mod_alias">ScriptAlias</directive> est similaire &agrave; la
+      directive <directive module="mod_alias">Alias</directive>, qui
+      d&eacute;finit &agrave; quel r&eacute;pertoire particulier doit correspondre un pr&eacute;fixe
+      d'URL. <directive>Alias</directive> et
+      <directive>ScriptAlias</directive> sont g&eacute;n&eacute;ralement utilis&eacute;s pour
+      acc&eacute;der &agrave; des r&eacute;pertoires situ&eacute;s en dehors du r&eacute;pertoire d&eacute;fini
+      par la directive <directive
+      module="core">DocumentRoot</directive>. La diff&eacute;rence entre
+      <directive>Alias</directive> et <directive>ScriptAlias</directive>
+      r&eacute;side dans le fait que <directive>ScriptAlias</directive> indique
+      en plus que tout ce qui se trouve sous le pr&eacute;fixe d'URL doit &ecirc;tre
+      consid&eacute;r&eacute; comme un programme CGI. Ainsi, l'exemple ci-dessus
+      indique &agrave; Apache que toute requ&ecirc;te pour une ressource commen&ccedil;ant
+      par <code>/cgi-bin/</code> doit &ecirc;tre servie depuis le r&eacute;pertoire
+      <code>/usr/local/apache2/cgi-bin/</code>, et doit &ecirc;tre trait&eacute;e en
+      tant que programme CGI.</p>
+
+      <p>Par exemple, si une requ&ecirc;te pour l'URL
+      <code>http://www.example.com/cgi-bin/test.pl</code> est
+      effectu&eacute;e, Apache tentera d'ex&eacute;cuter le fichier
+      <code>/usr/local/apache2/cgi-bin/test.pl</code> et en renverra la
+      sortie. Bien entendu, le fichier doit exister, &ecirc;tre ex&eacute;cutable, et
+      retourner sa sortie d'une mani&egrave;re particuli&egrave;re, sinon Apache
+      renverra un message d'erreur.</p>
+    </section>
+
+    <section id="nonscriptalias">
+      <title>CGI en dehors des r&eacute;pertoires ScripAlias</title>
+
+      <p>Pour des raisons de s&eacute;curit&eacute;, la localisation des programmes
+      CGI est souvent restreinte aux
+      r&eacute;pertoires d&eacute;finis par <directive module="mod_alias"
+      >ScriptAlias</directive>. De cette mani&egrave;re, les administrateurs
+      peuvent contr&ocirc;ler pr&eacute;cis&eacute;ment qui est autoris&eacute; &agrave; utiliser les
+      programmes CGI. Cependant, si les pr&eacute;cautions ad&eacute;quates quant &agrave;
+      la s&eacute;curit&eacute; sont prises, il n'y a aucune raison pour que les
+      programmes CGI ne puissent pas &ecirc;tre ex&eacute;cut&eacute;s depuis d'autres
+      r&eacute;pertoires. Par exemple, vous pouvez autoriser les utilisateurs &agrave;
+      enregistrer des contenus web dans leurs r&eacute;pertoires home &agrave; l'aide
+      de la directive <directive
+      module="mod_userdir">UserDir</directive>. S'ils veulent mettre en
+      oeuvre leurs propres programmes CGI, mais n'ont pas l'autorisation
+      d'acc&egrave;s au r&eacute;pertoire <code>cgi-bin</code> principal, ils devront
+      &ecirc;tre en mesure d'ex&eacute;cuter ces programmes depuis un autre
+      r&eacute;pertoire.</p>
+
+      <p>L'autorisation d'ex&eacute;cution des programmes CGI dans un
+      r&eacute;pertoire arbitraire se fait en deux &eacute;tapes. En premier lieu, le
+      gestionnaire <code>cgi-script</code> doit &ecirc;tre activ&eacute; &agrave; l'aide
+      d'une directive <directive
+      module="mod_mime">AddHandler</directive> ou <directive
+      module="core">SetHandler</directive>. En second lieu,
+      <code>ExecCGI</code> doit &ecirc;tre sp&eacute;cifi&eacute; dans la directive <directive
+      module="core">Options</directive>.</p>
+    </section>
+
+    <section id="options">
+      <title>Utilisation d'options explicites pour permettre l'ex&eacute;cution
+      des programmes CGI</title>
+
+      <p>Vous pouvez utiliser de mani&egrave;re explicite la directive
+      <directive module="core">Options</directive> dans le fichier de
+      configuration de votre serveur principal, pour indiquer que
+      l'ex&eacute;cution des programmes CGI est permise depuis un r&eacute;pertoire
+      particulier :</p>
+
+      <example>
+        &lt;Directory /usr/local/apache2/htdocs/un-repertoire&gt;<br />
+        <indent>
+          Options +ExecCGI<br />
+        </indent>
+        &lt;/Directory&gt;
+      </example>
+
+      <p>La directive ci-dessus indique &agrave; Apache qu'il doit permettre
+      l'ex&eacute;cution des fichiers CGI. Vous devez aussi indiquer au serveur
+      quels fichiers sont des fichiers CGI. La directive <directive
+      module="mod_mime">AddHandler</directive> suivante indique au
+      serveur qu'il doit traiter tous les fichiers poss&eacute;dant une
+      extension <code>cgi</code> ou <code>pl</code> en tant que
+      programmes CGI :</p>
+
+      <example>
+        AddHandler cgi-script .cgi .pl
+      </example>
+    </section>
+
+    <section id="htaccess">
+      <title>Fichiers .htaccess</title>
+
+      <p>Le <a href="htaccess.html"><code>tutoriel
+      .htaccess</code></a> montre comment activer les programmes
+      CGI si vous n'avez pas acc&egrave;s au
+      fichier <code>httpd.conf</code>.</p>
+    </section>
+
+    <section id="userdir">
+      <title>R&eacute;pertoires utilisateurs</title>
+
+      <p>Pour permettre l'ex&eacute;cution en tant que programme CGI de tout
+      fichier poss&eacute;dant l'extension <code>.cgi</code> et situ&eacute; dans un
+      r&eacute;pertoire utilisateur, vous pouvez utiliser la configuration
+      suivante :</p>
+
+      <example>
+      &lt;Directory /home/*/public_html&gt;<br/>
+      <indent>
+        Options +ExecCGI<br/>
+        AddHandler cgi-script .cgi<br/>
+      </indent>
+      &lt;/Directory&gt;
+      </example>
+
+      <p>Pour indiquer un sous-r&eacute;pertoire <code>cgi-bin</code> d'un
+      r&eacute;pertoire utilisateur o&ugrave; tout fichier sera trait&eacute; en tant que
+      programme CGI, vous pouvez utiliser ceci :</p>
+
+      <example>
+      &lt;Directory /home/*/public_html/cgi-bin&gt;<br/>
+      <indent>
+        Options ExecCGI<br/>
+        SetHandler cgi-script<br/>
+      </indent>
+      &lt;/Directory&gt;
+      </example>
+
+    </section>
+
+  </section>
+
+  <section id="writing">
+    <title>Ecrire un programme CGI</title>
+
+    <p>Il y a deux diff&eacute;rences principales entre la programmation
+    "standard" et la programmation CGI.</p>
+
+    <p>En premier lieu, toute sortie de votre programme CGI doit &ecirc;tre
+    pr&eacute;c&eacute;d&eacute;e d'un en-t&ecirc;te <glossary>MIME-type</glossary>. Il s'agit d'un
+    en-t&ecirc;te HTTP qui indique au client quel type de contenu il re&ccedil;oit.
+    La plupart du temps, il se pr&eacute;sente comme suit :</p>
+
+    <example>
+      Content-type: text/html
+    </example>
+
+    <p>En second lieu, votre sortie doit &ecirc;tre en HTML, ou tout autre
+    format qu'un navigateur est en mesure d'afficher. La plupart du
+    temps, il s'agira de HTML, mais occasionnellement, vous pouvez &ecirc;tre
+    amen&eacute; &agrave; &eacute;crire un programme CGI qui renvoie une image gif, ou un
+    autre type de contenu non-HTML.</p>
+
+    <p>A part ces deux diff&eacute;rences, un programme CGI ressemblera &agrave; tout
+    autre programme que vous pourriez &ecirc;tre amen&eacute; &agrave; &eacute;crire.</p>
+
+    <section id="firstcgi">
+      <title>Votre premier programme CGI</title>
+
+      <p>L'exemple suivant est un exemple de programme CGI qui permet
+      d'afficher une ligne de caract&egrave;res dans votre navigateur. Ecrivez
+      ce qui suit, enregistrez le dans un fichier nomm&eacute;
+      <code>premier.pl</code>, et placez le dans votre r&eacute;pertoire
+      <code>cgi-bin</code>.</p>
+
+      <example>
+        #!/usr/bin/perl<br />
+        print "Content-type: text/html\n\n";<br />
+        print "Bonjour tout le monde . . .";
+      </example>
+
+      <p>M&ecirc;me si Perl ne vous est pas familier, vous devriez &ecirc;tre
+      capable de comprendre le fonctionnement de ce programme. La
+      premi&egrave;re ligne indique &agrave; Apache (ou &agrave; toute interface &agrave; partir de
+      laquelle le programme s'ex&eacute;cute) que ce programme peut &ecirc;tre
+      ex&eacute;cut&eacute; en fournissant son fichier &agrave; l'interpr&eacute;teur
+      <code>/usr/bin/perl</code>. La seconde ligne affiche la
+      d&eacute;claration du type de contenu consid&eacute;r&eacute;, suivie de deux paires
+      "Retour chariot - Nouvelle ligne". Ceci a pour effet d'ins&eacute;rer une
+      ligne vide apr&egrave;s l'en-t&ecirc;te pour marquer la fin des en-t&ecirc;tes HTTP,
+      et le d&eacute;but du corps du document. La troisi&egrave;me ligne affiche la
+      cha&icirc;ne de caract&egrave;res "Bonjour tout le monde . . .". Et c'est tout
+      ce dont vous avez besoin.</p>
+
+      <p>Si vous ouvrez votre navigateur favori et lui indiquez
+      l'adresse</p>
+
+      <example>
+        http://www.exemple.com/cgi-bin/premier.pl
+      </example>
+
+      <p>ou toute autre URL correspondant &agrave; votre programme CGI, Vous
+      verrez la ligne <code>Bonjour tout le monde . . .</code>
+      s'afficher dans la fen&ecirc;tre de votre navigateur. Ce n'est pas
+      extraordinaire, mais si vous y &ecirc;tes parvenu, vous avez de bonnes
+      chances d'y parvenir pour tout autre programme plus
+      sophistiqu&eacute;.</p>
+    </section>
+  </section>
+
+  <section id="troubleshoot">
+    <title>Mais &ccedil;a ne marche toujours pas !</title>
+
+    <p>Vous devriez voir au moins une des quatre sorties suivantes dans
+    votre navigateur lorsque vous essayez d'acc&eacute;der &agrave; votre programme
+    CGI depuis le web :</p>
+
+    <dl>
+      <dt>Le flux de sortie de votre programme CGI</dt>
+      <dd>Impeccable ! Cela signifie que tout fonctionne correctement.
+      Si la sortie est correcte mais n'est pas trait&eacute;e correctement par
+      le navigateur, assurez-vous d'avoir d&eacute;fini
+      <code>Content-Type</code> de mani&egrave;re appropri&eacute;e dans votre
+      programme CGI.</dd>
+
+      <dt>Le code source de votre programme CGI ou un message "POST
+      Method Not Allowed"</dt>
+      <dd>Cela signifie que vous n'avez pas configur&eacute; Apache de mani&egrave;re
+      &agrave; ce qu'il puisse traiter votre programme CGI. Relisez la section
+      sur la <a href="#configuring">configuration d'Apache</a>, et
+      essayez de trouver votre erreur.</dd>
+
+      <dt>Un message commen&ccedil;ant par "Forbidden"</dt>
+      <dd>Ce type de message est r&eacute;v&eacute;lateur d'un probl&egrave;me de
+      droits. Consultez le <a href="#errorlogs">journal des erreurs
+      d'Apache</a> et la section ci-dessous sur les <a
+      href="#permissions">droits des fichiers</a>.</dd>
+
+      <dt>Un message contenant "Internal Server Error"</dt>
+      <dd>Si vous consultez le <a href="#errorlogs">journal des erreurs
+      d'Apache</a>, vous y trouverez probablement des messages du type
+      "Premature end of script headers" (Fin pr&eacute;matur&eacute;e des en-t&ecirc;tes de
+      script), &eacute;ventuellement accompagn&eacute;s d'un message d'erreur g&eacute;n&eacute;r&eacute;
+      par votre programme CGI. Dans ce cas, il va vous falloir lire
+      chacune des sections ci-dessous pour d&eacute;terminer ce qui emp&ecirc;che
+      votre programme CGI de g&eacute;n&eacute;rer les en-t&ecirc;tes appropri&eacute;s.</dd>
+    </dl>
+
+    <section id="permissions">
+      <title>Droits des fichiers</title>
+
+      <p>Souvenez-vous que le serveur ne s'ex&eacute;cute pas sous votre nom.
+      En d'autres termes, lorsque le serveur a d&eacute;marr&eacute;, il s'ex&eacute;cute
+      avec les droits d'un utilisateur non privil&eacute;gi&eacute; - en g&eacute;n&eacute;ral
+      <code>nobody</code>, ou <code>www</code> - et en cons&eacute;quence, il
+      aura besoin de droits suppl&eacute;mentaires pour pouvoir ex&eacute;cuter des
+      fichiers dont vous &ecirc;tes le propri&eacute;taire. En g&eacute;n&eacute;ral, pour qu'un
+      fichier ait des droits suffisants pour &ecirc;tre ex&eacute;cutable par
+      <code>nobody</code>, il suffit de lui attribuer des droits
+      d'ex&eacute;cution pour tout le monde :</p>
+
+      <example>
+        chmod a+x premier.pl
+      </example>
+
+      <p>En outre, si votre programme doit pouvoir acc&eacute;der en lecture
+      et/ou &eacute;criture &agrave; d'autres fichiers, ces derniers devront avoir les
+      droits appropri&eacute;s.</p>
+
+    </section>
+
+    <section id="pathinformation">
+      <title>Chemin des ex&eacute;cutables (PATH) et variables
+      d'environnement</title>
+
+      <p>Lorsque vous lancez un programme depuis la ligne de commande,
+      certaines informations sont pass&eacute;es au shell sans que vous vous en
+      doutiez. Par exemple, la variable <code>PATH</code> indique au
+      shell o&ugrave; il doit rechercher les ex&eacute;cutables auxquels vous faites
+      r&eacute;f&eacute;rence.</p>
+
+      <p>Lorsqu'un programme s'ex&eacute;cute depuis le serveur web en tant que
+      programme CGI, sa variable <code>PATH</code> n'aura peut-&ecirc;tre pas
+      la m&ecirc;me valeur. Tout programme que vous invoquez dans votre
+      programme CGI ( comme par exemple <code>sendmail</code>) devra
+      &ecirc;tre sp&eacute;cifi&eacute; par son chemin complet, de fa&ccedil;on &agrave; ce que le shell
+      puisse le trouver lorsqu'il tentera d'ex&eacute;cuter votre programme
+      CGI.</p>
+
+      <p>Un exemple typique de sp&eacute;cification de programme est le chemin
+      vers l'interpr&eacute;teur de script (souvent <code>perl</code>) que l'on
+      trouve &agrave; la premi&egrave;re ligne de votre programme CGI et qui va
+      ressembler &agrave; ceci :</p>
+
+      <example>
+        #!/usr/bin/perl
+      </example>
+
+      <p>Assurez-vous qu'il s'agit bien du chemin correct vers
+      l'interpr&eacute;teur.</p>
+
+      <p>De plus, si votre programme CGI d&eacute;pend d'autres <a
+      href="#env">variables d'environnement</a>, vous devrez vous
+      assurer qu'elles lui sont bien transmises par Apache.</p>
+
+    </section>
+
+    <section id="syntaxerrors">
+      <title>Erreurs inh&eacute;rentes au programme</title>
+
+      <p>La plupart des &eacute;checs dans l'ex&eacute;cution d'un programme CGI
+      proviennent du programme lui-m&ecirc;me. Ceci est particuli&egrave;rement vrai
+      lorsque ce satan&eacute; programme CGI se bloque, alors que vous avez
+      appris &agrave; ne plus commettre les deux erreurs pr&eacute;c&eacute;dentes. La
+      premi&egrave;re chose &agrave; faire est de vous assurer que votre programme
+      s'ex&eacute;cute depuis la ligne de commande, avant de le tester &agrave; partir
+      du serveur web. Par exemple, essayez :</p>
+
+      <example>
+      cd /usr/local/apache2/cgi-bin<br/>
+      ./premier.pl
+      </example>
+
+      <p>(N'invoquez pas l'interpr&eacute;teur <code>perl</code>. Le shell et
+      Apache doivent &ecirc;tre capable de le d&eacute;terminer &agrave; partir de <a
+      href="#pathinformation">l'information sur le chemin</a> situ&eacute;e sur
+      la premi&egrave;re ligne du script.)</p>
+
+      <p>La premi&egrave;re chose que vous devriez voir affich&eacute;e par votre
+      programme est un ensemble d'en-t&ecirc;tes HTTP, comprenant entre autres
+      le <code>Content-Type</code>, et suivi d'une ligne vide. Si vous
+      voyez quoi que ce soit d'autre, Apache renverra l'erreur
+      <code>Premature end of script headers</code> si vous tentez
+      d'ex&eacute;cuter le programme depuis le serveur. Voir <a
+      href="#writing">Ecriture d'un programme CGI</a> ci-dessus pour
+      plus de d&eacute;tails.</p>
+    </section>
+
+    <section id="errorlogs">
+      <title>Journalisation des erreurs</title>
+
+      <p>Les journaux d'erreurs sont vos amis. Toute anomalie de
+      fonctionnement est consign&eacute;e dans le journal des erreurs et c'est
+      ici que vous devez regarder en premier en cas de probl&egrave;me. Si
+      l'h&eacute;bergeur de votre site ne vous donne pas acc&egrave;s au journal des
+      erreurs, vous avez tout int&eacute;r&ecirc;t &agrave; vous tourner vers quelqu'un
+      d'autre. Apprenez &agrave; d&eacute;chiffrer les journaux d'erreurs, et vous
+      vous apercevrez que la plupart des probl&egrave;mes seront rapidement
+      identifi&eacute;s . . . et r&eacute;solus.</p>
+    </section>
+
+    <section id="suexec">
+      <title>Suexec</title>
+
+      <p>Le programme <a href="../suexec.html">suexec</a> permet
+      d'ex&eacute;cuter les programmes CGI avec des droits diff&eacute;rents selon le
+      serveur virtuel ou le r&eacute;pertoire utilisateur dans lequel ils
+      se situent. Suexec effectue une v&eacute;rification des droits tr&egrave;s
+      stricte, et toute anomalie d&eacute;tect&eacute;e au cours de cette v&eacute;rification
+      entra&icirc;nera un echec d'ex&eacute;cution de votre programme CGI avec
+      affichage de l'erreur <code>Premature end of script
+      headers</code>.</p>
+
+      <p>Pour savoir si vous pouvez utiliser suexec, tapez la commande
+      <code>apachectl -V</code>, et regardez le chemin indiqu&eacute; par
+      <code>SUEXEC_BIN</code>. Si au d&eacute;marrage d'Apache, ce dernier
+      trouve un ex&eacute;cutable <program>suexec</program> dans ce chemin,
+      suexec sera activ&eacute;.</p>
+
+      <p>Si vous ne ma&icirc;trisez pas le fonctionnement de suexec, il vous
+      est d&eacute;conseill&eacute; de l'utiliser. Pour d&eacute;sactiver suexec, supprimer
+      simplement (ou renommez) l'ex&eacute;cutable <program>suexec</program>
+      point&eacute; par <code>SUEXEC_BIN</code> et red&eacute;marrez le serveur. Si
+      apr&egrave;s une lecture de <a href="../suexec.html">suexec</a>, vous
+      d&eacute;cidez quand-m&ecirc;me de l'utiliser, tapez la commande <code>suexec
+      -V</code> pour voir o&ugrave; se situe le journal de suexec, et utilisez
+      ce dernier pour d&eacute;terminer quelles r&egrave;gles vous violez
+      &eacute;ventuellement.</p>
+    </section>
+  </section>
+
+  <section id="behindscenes">
+    <title>Que se passe-t-il en coulisse</title>
+
+    <p>Lorsque vos comp&eacute;tences en programmation CGI seront plus
+    pouss&eacute;es, il s'av&eacute;rera int&eacute;ressant pour vous de mieux comprendre ce
+    qui se passe en coulisse, et en particulier la mani&egrave;re dont le
+    navigateur et le serveur dialoguent entre eux. En effet, bien qu'il
+    soit tout &agrave; fait louable d'&eacute;crire un programme qui affiche "Bonjour
+    tout le monde . . .", cela ne sert pas &agrave; grand chose.</p>
+
+    <section id="env">
+      <title>Variables d'environnement</title>
+
+      <p>Les variables d'environnement sont des valeurs qui gravitent
+      autour de vous lorsque vous utilisez votre ordinateur. Elles sont
+      tr&egrave;s utiles, &agrave; l'instar de votre chemin par d&eacute;faut (o&ugrave; votre
+      ordinateur va rechercher le fichier physique correspondant &agrave; la
+      commande que vous avez tap&eacute;e), votre nom d'utilisateur, le type de
+      votre terminal, etc... Pour obtenir une liste compl&egrave;te des
+      variables d'environnement standards que vous utilisez tous les
+      jours, tapez <code>env</code> dans votre interpr&eacute;teur
+      de commandes.</p>
+
+      <p>Au cours de la transaction CGI, le serveur et le navigateur
+      d&eacute;finissent aussi des variables d'environnement, de fa&ccedil;on &agrave; ce
+      qu'ils puissent communiquer entre eux. Ces variables d&eacute;finissent
+      entre autre le type de navigateur (Netscape, IE, Lynx), le type de
+      serveur (Apache, IIS, WebSite), le nom du programme CGI en cours
+      d'ex&eacute;cution, etc...</p>
+
+      <p>Ces variables sont &agrave; la disposition du programmeur CGI, et
+      elles constituent 50% de la communication client-serveur. La liste
+      compl&egrave;te des variables requises se trouve &agrave;
+      <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html"
+      >http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>.</p>
+
+      <p>Ce programme CGI basique en Perl permet d'afficher toutes les
+      variables d'environnement qui sont &eacute;chang&eacute;es. Deux programmes
+      similaires sont fournis avec la distribution d'Apache et situ&eacute;s
+      dans le r&eacute;pertoire <code>cgi-bin</code>.
+      Notez que certaines variables sont
+      obligatoires, alors que d'autres sont optionnelles, si bien que
+      vous verrez s'afficher certaines variables qui ne font pas partie
+      de la liste officielle. De plus, Apache vous propose de nombreuses
+      m&eacute;thodes pour <a href="../env.html">ajouter vos propres
+      variables d'environnement</a> aux variables de base fournies par
+      d&eacute;faut.</p>
+
+      <example>
+        #!/usr/bin/perl<br />
+        print "Content-type: text/html\n\n";<br />
+        foreach $key (keys %ENV) {<br />
+        <indent>
+          print "$key --&gt; $ENV{$key}&lt;br&gt;";<br />
+        </indent>
+        }
+      </example>
+    </section>
+
+    <section id="stdin">
+      <title>STDIN et STDOUT</title>
+
+      <p>L'entr&eacute;e standard (<code>STDIN</code>) et la sortie standard
+      (<code>STDOUT</code>) constituent d'autres voies de communication
+      entre le client et le serveur. Dans un contexte normal,
+      <code>STDIN</code> correspond au clavier, ou &agrave; un fichier fourni
+      au programme &agrave; des fins de traitement, et <code>STDOUT</code> &agrave; la
+      console ou &agrave; l'&eacute;cran.</p>
+
+      <p>Lorsque vous transmettez un formulaire web &agrave; un programme CGI
+      par la m&eacute;thode <code>POST</code>, les donn&eacute;es de ce formulaire
+      sont transcrites dans un format sp&eacute;cial et transmises &agrave; votre
+      programme CGI via <code>STDIN</code>. Le programme peut alors les
+      traiter comme si elles provenaient du clavier ou d'un
+      fichier.</p>
+
+      <p>Ce "format sp&eacute;cial" est tr&egrave;s simple. Un nom de champ et sa
+      valeur sont reli&eacute;s entre eux par un signe "&eacute;gal" (=), et chacune
+      de ces paires nom champ/valeur est s&eacute;par&eacute;e de la suivante par un
+      "et" commercial (&amp;). Les caract&egrave;res
+      sp&eacute;ciaux comme les espaces, les "et" commerciaux, et les signes
+      "&eacute;gal" sont convertis en leur &eacute;quivalent hexad&eacute;cimal pour &eacute;viter
+      qu'ils ne g&acirc;chent le travail. La cha&icirc;ne contenant les donn&eacute;es doit
+      ressembler &agrave; ceci :</p>
+
+      <example>
+        name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
+      </example>
+
+      <p>Vous verrez aussi parfois une cha&icirc;ne de ce type accol&eacute;e &agrave; une
+      URL. Dans ce cas, le serveur enregistre cette cha&icirc;ne dans la
+      variable d'environnement appel&eacute;e <code>QUERY_STRING</code>. On a
+      alors affaire &agrave; une requ&ecirc;te de type <code>GET</code>. Votre
+      formulaire HTML indique laquelle des m&eacute;thodes <code>GET</code> ou
+      <code>POST</code> est utilis&eacute;e pour transmettre les donn&eacute;es, en
+      d&eacute;finissant l'attribut <code>METHOD</code> au niveau de la balise
+      <code>FORM</code>.</p>
+
+      <p>Votre programme est ensuite charg&eacute; d'extraire les informations
+      utiles de cette cha&icirc;ne. Heureusement, des biblioth&egrave;ques et des
+      modules sont &agrave; votre disposition pour vous aider &agrave; traiter ces
+      donn&eacute;es, et &agrave; g&eacute;rer les diff&eacute;rents aspects de votre programme
+      CGI.</p>
+    </section>
+  </section>
+reprendre ici
+  <section id="libraries">
+    <title>Biblioth&egrave;ques et modules CGI</title>
+
+    <p>Pour &eacute;crire un programme CGI, il vous est conseill&eacute; d'utiliser
+    une biblioth&egrave;que de code, ou un module, qui effectueront une grande
+    partie du travail de base pour vous. Ceci vous permettra de diminuer
+    le nombre d'erreurs et d'acc&eacute;l&eacute;rer le d&eacute;veloppement.</p>
+
+    <p>Si vous &eacute;crivez des programmes CGI en Perl, des modules sont &agrave;
+    votre disposition &agrave; <a href="http://www.cpan.org/">CPAN</a>. A ce
+    sujet, le module le plus populaire est <code>CGI.pm</code>. Vous
+    pouvez aussi essayer <code>CGI::Lite</code>, qui impl&eacute;mente les
+    fonctionnalit&eacute;s strictement n&eacute;cessaires, mais suffisantes pour
+    la majorit&eacute; des programmes.</p>
+
+    <p>Si vous &eacute;crivez des programmes CGI en C, vous disposez de
+    nombreuses options. L'une d'elles est la biblioth&egrave;que
+    <code>CGIC</code> de <a href="http://www.boutell.com/cgic/"
+    >http://www.boutell.com/cgic/</a>.</p>
+  </section>
+
+  <section id="moreinfo">
+    <title>Pour plus d'informations</title>
+
+    <p>Il existe un grand nombre de ressources CGI sur le web. Vous
+    pouvez discuter de probl&egrave;mes CGI avec d'autres utilisateurs dans le
+    groupe Usenet <a href="news:comp.infosystems.www.authoring.cgi">
+    comp.infosystems.www.authoring.cgi</a>. En outre, la liste de
+    diffusion de la Guilde des Ecrivains HTML est une source
+    intarissable de r&eacute;ponses &agrave; vos questions. Vous en saurez plus en
+    vous rendant &agrave; <a href="http://www.hwg.org/lists/hwg-servers/"
+    >http://www.hwg.org/lists/hwg-servers/</a>.</p>
+
+    <p>Et bien entendu, vous devez lire la sp&eacute;cification CGI, qui
+    pr&eacute;sente tous les d&eacute;tails en rapport avec les op&eacute;rations des
+    programmes CGI. La version originale se trouve au <a
+    href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>, et
+    dans la RFC IETF actuelle <a
+    href="http://www.ietf.org/rfc/rfc3875">Common Gateway
+    Interface RFC</a>.</p>
+
+    <p>Lorsque vous postez une question &agrave; propos d'un probl&egrave;me CGI que
+    vous rencontrez, que ce soit dans une liste de diffusion ou dans un
+    newsgroup, faites en sorte de fournir suffisamment d'informations
+    sur le probl&egrave;me rencontr&eacute;, ce que vous attendiez exactement, et en
+    quoi ce qui se produit est r&eacute;ellement diff&eacute;rent de ce que vous
+    attendiez, quel serveur vous utilisez, en quel langage votre
+    programme CGI a &eacute;t&eacute; &eacute;crit, et, si possible, son code source. Ceci
+    permettra une r&eacute;solution plus ais&eacute;e de votre probl&egrave;me.</p>
+
+    <p>Notez que les questions &agrave; propos de probl&egrave;mes CGI ne doivent
+    <strong>jamais</strong> &ecirc;tre post&eacute;es dans la base de donn&eacute;es de
+    bogues d'Apache, &agrave; moins que vous ne soyez s&ucirc;r d'avoir trouv&eacute; un
+    probl&egrave;me dans le code source d'Apache.</p>
+  </section>
+</manualpage>
+

Modified: httpd/httpd/trunk/docs/manual/howto/cgi.xml.meta
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/howto/cgi.xml.meta?rev=740484&r1=740483&r2=740484&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/howto/cgi.xml.meta (original)
+++ httpd/httpd/trunk/docs/manual/howto/cgi.xml.meta Tue Feb  3 22:16:22 2009
@@ -8,6 +8,7 @@
 
   <variants>
     <variant>en</variant>
+    <variant>fr</variant>
     <variant outdated="yes">ja</variant>
     <variant outdated="yes">ko</variant>
   </variants>



Mime
View raw message