<-
Apache > Serveur HTTP > Documentation > Version 2.4 > Modules

Module Apache mod_ext_filter

Langues Disponibles:  en  |  fr  |  ja  |  ko 

Description:Fait traiter le corps de la r�ponse par un programme externe avant de l'envoyer au client
Statut:Extension
Identificateur�de�Module:ext_filter_module
Fichier�Source:mod_ext_filter.c

Sommaire

mod_ext_filter repr�sente un mod�le de programmation simple et bien connu pour les filtres. 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 :

M�me dans le cas o� le niveau de performance est insuffisant pour une utilisation en production, on peut utiliser mod_ext_filter comme prototype d'environnement pour les filtres.

Directives

Sujets

Voir aussi

top

Exemples

G�n�rer du HTML � partir d'un autre type de contenu

# 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 - -"

<Directory "/export/home/trawick/apacheinst/htdocs/c">
    # 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
</Directory>
      

Impl�mentation d'un filtre de codage de contenu

Note : cet exemple avec gzip n'est fourni qu'� titre d'illustration. Veuillez vous reporter � la documentation de mod_deflate pour un exemple d'impl�mentation plus r�aliste.

# la directive de mod_ext_filter qui d�finit le filtre externe
ExtFilterDefine gzip mode=output cmd=/bin/gzip

<Location /gzipped>

    # 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
</Location>
      

Ralentissement du serveur

# 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

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

Utilisation de sed pour remplacer du texte dans la r�ponse

# 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"

<Location />
    # directive de base permettant de traiter la sortie avec le
    # filtre fixtext
    SetOutputFilter fixtext
</Location>
      

Tracer un autre filtre

# 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

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

Voici le filtre qui trace les donn�es :

#!/usr/local/bin/perl -w
use strict;

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

while (<STDIN>) {
    print SAVE $_;
    print $_;
}

close(SAVE);
        
top

ExtFilterDefine Directive

Description:D�finit un filtre externe
Syntaxe:ExtFilterDefine nom filtre param�tres
Contexte:configuration du serveur
Statut:Extension
Module:mod_ext_filter

La directive ExtFilterDefine permet de d�finir les caract�ristiques d'un filtre externe, et en particulier le programme � ex�cuter ainsi que ses arguments.

nom filtre 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 SetOutputFilter. Il doit �tre unique parmi les noms de tous les filtres enregistr�s. 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.

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 cmd=. Voici la liste de ces param�tres :

cmd=ligne de commande
Le mot-cl� cmd= 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 cmd="/bin/mypgm arg1 arg2"). 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.
mode=mode
Utilisez mode=output (valeur par d�faut) pour les filtres qui traitent les r�ponses. Utilisez mode=input pour les filtres qui traitent les requ�tes. mode=input est disponible depuis la version 2.1 d'Apache.
intype=type MIME
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 intype= ne seront pas filtr�s.
outtype=type MIME
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�.
PreservesContentLength
Le mot-cl� PreservesContentLength 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.
ftype=type de filtre
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.
disableenv=env
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.
enableenv=env
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�.
top

ExtFilterOptions Directive

Description:Configure les options de mod_ext_filter
Syntaxe:ExtFilterOptions option [option] ...
D�faut:ExtFilterOptions NoLogStderr
Contexte:r�pertoire
Statut:Extension
Module:mod_ext_filter

La directive ExtFilterOptions permet de sp�cifier des options de traitement particuli�res pour mod_ext_filter. Les arguments option peuvent contenir :

LogStderr | NoLogStderr
Le mot-cl� LogStderr 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. NoLogStderr inverse ce comportement.
Onfail=[abort|remove]
Indique la marche � suivre si le programme de filtrage externe ne peut pas d�marrer. Avec abort (la valeur par d�faut), la requ�te sera abandonn�e. Avec remove, le filtre est supprim�, et le traitement de la requ�te se poursuit sans lui.
      ExtFilterOptions LogStderr
    

Les messages envoy�s vers la sortie d'erreurs standard du filtre seront enregistr�s dans le journal des erreurs d'Apache..

Langues Disponibles:  en  |  fr  |  ja  |  ko 

top

Commentaires

Notice:
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 mailing lists.