<?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>mod_ext_filter - 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 rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
<script src="../style/scripts/prettify.js" type="text/javascript">
</script>

<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body>
<div id="page-header">
<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>
<p class="apache">Serveur Apache HTTP Version 2.4</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.4</a> &gt; <a href="./">Modules</a></div>
<div id="page-content">
<div id="preamble"><h1>Module Apache mod_ext_filter</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_ext_filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_ext_filter.html" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/mod_ext_filter.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/mod_ext_filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Fait traiter le corps de la réponse par un programme
externe avant de l'envoyer au client</td></tr>
<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>ext_filter_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_ext_filter.c</td></tr></table>
<h3>Sommaire</h3>

    <p><code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> représente un modèle de
    programmation simple et bien connu pour les <a href="../filter.html">filtres</a>. Avec ce module, tout programme
    qui lit l'entrée standard stdin et écrit sur la sortie standard
    stdout (autrement dit une commande filtre de style Unix) peut
    servir de filtre pour Apache. Ce mécanisme de filtrage est beaucoup
    plus lent qu'un filtre spécialement écrit pour
    l'API d'Apache et faisant partie intégrante du processus du serveur
    Apache, mais il présente les avantages suivants :</p>

    <ul>
      <li>le modèle de programmation est beaucoup plus simple</li>

      <li>tout langage de script ou de programmation peut être utilisé,
      pourvu qu'il permette au programme de lire l'entrée standard et
      d'écrire sur la sortie standard.</li>

      <li>on peut utiliser des programmes existants comme filtres Apache
      sans modification.</li>
    </ul>

    <p>Même dans le cas où le niveau de performance est insuffisant pour
    une utilisation en production, on peut utiliser
    <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> comme prototype d'environnement pour
    les filtres.</p>

</div>
<div id="quickview"><h3 class="directives">Directives</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif" /> <a href="#extfilterdefine">ExtFilterDefine</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#extfilteroptions">ExtFilterOptions</a></li>
</ul>
<h3>Sujets</h3>
<ul id="topics">
<li><img alt="" src="../images/down.gif" /> <a href="#examples">Exemples</a></li>
</ul><h3>Voir aussi</h3>
<ul class="seealso">
<li><a href="../filter.html">Filtres</a></li>
</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</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="examples" id="examples">Exemples</a></h2>

    <h3>Générer du HTML à partir d'un autre type de
    contenu</h3>

      <pre class="prettyprint lang-config">
# la directive de mod_ext_filter définissant un filtre
# permettant de mettre des fichiers text/c au format HTML en
# utilisant le programme externe /usr/bin/enscript, le type du
# fichier résultant étant défini à text/html
ExtFilterDefine c-to-html mode=output \
    intype=text/c outtype=text/html \
    cmd="/usr/bin/enscript --color -W html -Ec -o - -"

&lt;Directory "/export/home/trawick/apacheinst/htdocs/c"&gt;
    # directive de base permettant de traiter la sortie avec le
    # nouveau filtre
    SetOutputFilter c-to-html

    # directive de mod_mime définissant le type des fichiers dont
    # le nom possède l'extension .c à text/c
    AddType text/c .c
&lt;/Directory&gt;
      </pre>

    

    <h3>Implémentation d'un filtre de codage de
    contenu</h3>
      <p>Note : cet exemple avec gzip n'est fourni qu'à titre
      d'illustration. Veuillez vous reporter à la documentation de
      <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> pour un exemple d'implémentation plus
      réaliste.</p>

      <pre class="prettyprint lang-config">
# la directive de mod_ext_filter qui définit le filtre externe
ExtFilterDefine gzip mode=output cmd=/bin/gzip

&lt;Location /gzipped&gt;

    # directive de base permettant de traiter la sortie avec le
    # filtre gzip
    SetOutputFilter gzip

    # la directive de mod_header permettant d'ajouter le champ
    # d'en-tête "Content-Encoding: gzip"
    Header set Content-Encoding gzip
&lt;/Location&gt;
      </pre>


    

    <h3>Ralentissement du serveur</h3>
      <pre class="prettyprint lang-config">
# directive de mod_ext_filter définissant un filtre qui fait
# passer tout les flux en sortie par la commande cat ; cat ne
# modifie rien ; elle ne fait que compliquer le cheminement des
# flux et consommer des ressources supplémentaires
ExtFilterDefine slowdown mode=output cmd=/bin/cat \
    preservescontentlength

&lt;Location /&gt;
    # directive de base permettant de traiter plusieurs fois la
    # sortie avec le filtre slowdown
    #
    SetOutputFilter slowdown;slowdown;slowdown
&lt;/Location&gt;
      </pre>

    

    <h3>Utilisation de sed pour remplacer du texte dans la
    réponse</h3>

      <pre class="prettyprint lang-config">
# directive de mod_ext_filter définissant un filtre qui
# remplace du texte dans la réponse
#
ExtFilterDefine fixtext mode=output intype=text/html \
    cmd="/bin/sed s/verdana/arial/g"

&lt;Location /&gt;
    # directive de base permettant de traiter la sortie avec le
    # filtre fixtext
    SetOutputFilter fixtext
&lt;/Location&gt;
      </pre>


    

    <h3>Tracer un autre filtre</h3>
      <pre class="prettyprint lang-config">
# Trace les données lues et écrites par mod_deflate pour un
# client particulier (IP 192.168.1.31) qui a des problèmes de
# compression.
# Ce premier filtre va tracer ce qui entre dans mod_deflate.
ExtFilterDefine tracebefore \
    cmd="/bin/tracefilter.pl /tmp/tracebefore" \
    EnableEnv=trace_this_client

# Ce second filtre va tracer ce qui sort de mod_deflate.
# Notez que sans le paramètre ftype, le type de filtre par
# défaut AP_FTYPE_RESOURCE placerait le filtre *avant*
# mod_deflate dans la chaîne de filtrage. Le fait d'affecter
# à ce paramètre une valeur numérique sensiblement supérieure à
# AP_FTYPE_CONTENT_SET permet de s'assurer que le filtre sera
# placé après mod_deflate.
ExtFilterDefine traceafter \
    cmd="/bin/tracefilter.pl /tmp/traceafter" \
    EnableEnv=trace_this_client ftype=21

&lt;Directory /usr/local/docs&gt;
    SetEnvIf Remote_Addr 192.168.1.31 trace_this_client
    SetOutputFilter tracebefore;deflate;traceafter
&lt;/Directory&gt;
      </pre>


      <div class="example"><h3>Voici le filtre qui trace les données :</h3><pre class="prettyprint lang-perl">
#!/usr/local/bin/perl -w
use strict;

open(SAVE, "&gt;$ARGV[0]")
    or die "can't open $ARGV[0]: $?";

while (&lt;STDIN&gt;) {
    print SAVE $_;
    print $_;
}

close(SAVE);
        </pre>
</div>
    
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ExtFilterDefine" id="ExtFilterDefine">ExtFilterDefine</a> <a name="extfilterdefine" id="extfilterdefine">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit un filtre externe</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ExtFilterDefine <var>nom filtre</var> <var>paramètres</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ext_filter</td></tr>
</table>
    <p>La directive <code class="directive">ExtFilterDefine</code> permet de
    définir les caractéristiques d'un filtre externe, et en particulier
    le programme à exécuter ainsi que ses arguments.</p>

    <p><var>nom filtre</var> spécifie le nom du filtre en cours de
    définition. On peut ensuite utiliser ce nom pour référencer le
    filtre dans les directives <code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code>. Il doit être unique parmi les noms de
    tous les filtres enregistrés. <em>Pour le moment, aucune erreur
    n'est signalée par l'API register-filter, si bien qu'un problème de
    noms dupliqués ne sera pas porté à la connaissance de
    l'utilisateur.</em></p>

    <p>Viennent ensuite un ou plusieurs paramètres dans un ordre
    indéfini, qui permettent de spécifier la commande externe à exécuter
    et certaines autres caractéristiques. Le seul paramètre obligatoire
    est <code>cmd=</code>. Voici la liste de ces paramètres :</p>

    <dl>
      <dt><code>cmd=<var>ligne de commande</var></code></dt>

      <dd>Le mot-clé <code>cmd=</code> permet de spécifier la commande
      externe à exécuter. Si la ligne de commande comporte des
      arguments, elle doit être entourée de guillemets (par exemple
      <code>cmd="<var>/bin/mypgm</var> <var>arg1</var>
      <var>arg2</var>"</code>). Les guillemets habituels du shell ne
      sont pas nécessaires car le programme est lancé directement, sans
      passer par le shell. Les arguments du programme doivent être
      séparés par des espaces. Si un argument contient des espaces, ces
      derniers doivent être échappés par un antislash '\'. Si un
      argument contient des antislashes '\', ces derniers doivent être
      eux-mêmes échappés par un antislash '\'. Outre les variables
      d'environnement CGI standards, les variables DOCUMENT_URI,
      DOCUMENT_PATH_INFO, et QUERY_STRING_UNESCAPED seront aussi
      définies pour le programme.</dd>

      <dt><code>mode=<var>mode</var></code></dt>

      <dd>Utilisez <code>mode=output</code> (valeur par défaut) pour les
      filtres qui traitent les réponses. Utilisez
      <code>mode=input</code> pour les filtres qui traitent les
      requêtes. <code>mode=input</code> est disponible depuis la version
      2.1 d'Apache.</dd>

      <dt><code>intype=<var>type MIME</var></code></dt>

      <dd>Ce paramètre permet de spécifier le type de médium Internet
      (c'est à dire le type MIME) des documents qui doivent être
      filtrés. Par défaut, tous les documents sont filtrés. Tous les
      documents possédant un type MIME autre que celui spécifié par
      <code>intype=</code> ne seront pas filtrés.</dd>

      <dt><code>outtype=<var>type MIME</var></code></dt>

      <dd>Ce paramètre permet de spécifier le type de médium Internet
      (c'est à dire le type MIME) des documents filtrés. Il intervient
      lorsque les opérations de filtrage comprennent une modification du
      type MIME. Par défaut, le type MIME n'est pas modifié.</dd>

      <dt><code>PreservesContentLength</code></dt>

      <dd>Le mot-clé <code>PreservesContentLength</code> indique que le
      filtre doit conserver la taille du contenu. Ce n'est pas le
      comportement par défaut, car la plupart des filtres modifient cette
      taille. Ce mot-clé doit être spécifié si le filtre ne doit pas
      modifier la taille du contenu.</dd>

      <dt><code>ftype=<var>type de filtre</var></code></dt>

      <dd>Ce paramètre permet de spécifier une valeur numérique
      représentant le type de filtre sous lequel le filtre doit être
      enregistré. La valeur par défaut, AP_FTYPE_RESOURCE, convient dans
      la plupart des situations. Si le filtre doit opérer dans la chaîne
      de filtrage à un autre point que les filtres de ressources, ce
      paramètre est nécessaire. Voir les définitions de AP_FTYPE_...
      dans util_filter.h pour trouver une valeur appropriée.</dd>

      <dt><code>disableenv=<var>env</var></code></dt>

      <dd>Ce paramètre permet de spécifier le nom d'une variable
      d'environnement qui, si elle est définie, va désactiver le
      filtre.</dd>

      <dt><code>enableenv=<var>env</var></code></dt>

      <dd>Ce paramètre permet de spécifier le nom d'une variable
      d'environnement qui doit être définie pour que le filtre ne soit
      pas désactivé.</dd>
    </dl>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ExtFilterOptions" id="ExtFilterOptions">ExtFilterOptions</a> <a name="extfilteroptions" id="extfilteroptions">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure les options de
<code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code></td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ExtFilterOptions <var>option</var> [<var>option</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ExtFilterOptions NoLogStderr</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ext_filter</td></tr>
</table>
    <p>La directive <code class="directive">ExtFilterOptions</code> permet de
    spécifier des options de traitement particulières pour
    <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>. Les arguments <var>option</var>
    peuvent contenir :</p>

    <dl>
      <dt><code>LogStderr | NoLogStderr</code></dt>

      <dd>Le mot-clé <code>LogStderr</code> indique que les messages
      envoyés par le programme de filtrage externe sur la sortie
      d'erreurs standard doivent être enregistrés dans le journal des
      erreurs d'Apache. <code>NoLogStderr</code> inverse ce
      comportement.</dd>

      <dt><code>Onfail=[abort|remove]</code></dt>
      <dd>Indique la marche à suivre si le programme de filtrage externe
      ne peut pas démarrer. Avec <code>abort</code> (la valeur par
      défaut), la requête sera abandonnée. Avec <code>remove</code>, le
      filtre est supprimé, et le traitement de la requête se poursuit
      sans lui.</dd>
    </dl>

    <pre class="prettyprint lang-config">
      ExtFilterOptions LogStderr
    </pre>


    <p>Les messages envoyés vers la sortie d'erreurs standard du filtre
    seront enregistrés dans le journal des erreurs d'Apache..</p>

</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_ext_filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_ext_filter.html" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/mod_ext_filter.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/mod_ext_filter.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_ext_filter.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else { 
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2013 The Apache Software Foundation.<br />Autorisé 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="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[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>