<?xml version="1.0" encoding="UTF-8"?>
<!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>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>mod_example_hooks - Serveur HTTP Apache Version 2.5</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.min.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/quickreference.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 HTTP Apache Version 2.5</p>
<img alt="" src="../images/feather.png" /></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.5</a> &gt; <a href="./">Modules</a></div>
<div id="page-content">
<div id="preamble"><h1>Module Apache mod_example_hooks</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_example_hooks.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_example_hooks.html" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ko/mod/mod_example_hooks.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>Illustration de l'API des modules Apache</td></tr>
<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>example_hooks_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_example_hooks.c</td></tr></table>
<h3>Sommaire</h3>

    <p>Certains fichiers situés dans le répertoire
    <code>modules/examples</code> de l'arborescence de la
    distribution d'Apache sont fournis à titre d'exemples pour ceux qui
    souhaitent écrire des modules qui utilisent l'API d'Apache.</p>

    <p>Le fichier principal est <code>mod_example_hooks.c</code>, qui
    constitue une illustration exhaustive des différents mécanismes et
    syntaxes d'appels. En aucun cas un module additionnel n'aura à
    inclure des routines pour tous les appels - il n'en nécessitera au
    contraire qu'un petit nombre !</p>

    <p>Le module example_hooks fonctionne réellement. Si vous le chargez dans
    votre serveur, activez le gestionnaire "example-hooks-handler" dans une
    section location, et essayez d'accéder à la zone du site web
    correspondante, vous verrez s'afficher certaines sorties que le
    module example_hooks produit au cours des différents appels.</p>
</div>
<div id="quickview"><h3>Sujets</h3>
<ul id="topics">
<li><img alt="" src="../images/down.gif" /> <a href="#compiling">Compilation du module example_hooks</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#using">Utilisation du module
<code>mod_example_hooks</code></a></li>
</ul><h3 class="directives">Directives</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif" /> <a href="#example">Example</a></li>
</ul>
<h3>Traitement des bugs</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">Journal des modifications de httpd</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_example_hooks">Problèmes connus</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_example_hooks">Signaler un bug</a></li></ul><h3>Voir aussi</h3>
<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="compiling" id="compiling">Compilation du module example_hooks</a> <a title="Lien permanent" href="#compiling" class="permalink">&para;</a></h2>

    <p>Pour inclure le module example_hooks dans votre serveur, effectuez les
    étapes suivantes :</p>

    <ol>
      <li>Exécutez <code class="program"><a href="../programs/configure.html">configure</a></code> avec l'option
      <code>--enable-example-hooks</code>.</li>

      <li>Compilez le serveur (exécutez la commande
      "<code>make</code>").</li>
    </ol>

    <p>Pour ajouter votre propre module :</p>

    <ol class="up-A">
      <li><code>cp modules/examples/mod_example_hooks.c
      modules/nouveau_module/<em>mod_monexemple.c</em></code></li>

      <li>Modifiez le fichier.</li>

      <li>Créez <code>modules/nouveau_module/config.m4</code>.
        <ol>
          <li>Ajoutez <code>APACHE_MODPATH_INIT(nouveau_module)</code>.</li>
          <li>Copiez la ligne APACHE_MODULE contenant "example_hooks" depuis
	  <code>modules/examples/config.m4</code>.</li>
          <li>Remplacez le premier argument "example-hooks" par
	  <em>monexemple</em>.</li>
          <li>Remplacez le second argument par une brève description de
	  votre module. Cette description sera utilisée par la commande
	  <code>configure --help</code>.</li>
          <li>Si la compilation de votre module nécessite des drapeaux
	  de compilation C, des drapeaux d'édition de liens, ou de
	  bibliothèques supplémentaires, ajoutez les respectivement à
	  CFLAGS, LDFLAGS et LIBS. Reportez-vous aux fichiers
	  <code>config.m4</code> des répertoires des autres modules pour
	  plus d'exemples.</li>
          <li>Ajoutez <code>APACHE_MODPATH_FINISH</code>.</li>
        </ol>
      </li>

      <li>Créez le fichier
      <code>module/nouveau_module/Makefile.in</code>.
      Si la compilation de votre module ne nécessite pas d'instructions
      particulières, ce fichier ne doit contenir que la ligne
      <code>include $(top_srcdir)/build/special.mk</code>.</li>

      <li>Exécutez ./buildconf à la racine du répertoire.</li>

      <li>Compilez le serveur après avoir exécuté la commande configure
      avec l'option --enable-monexemple.</li>

    </ol>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="using" id="using">Utilisation du module
<code>mod_example_hooks</code></a> <a title="Lien permanent" href="#using" class="permalink">&para;</a></h2>

    <p>Pour activer le module example_hooks, ajoutez à votre fichier
    <code>httpd.conf</code> un bloc du style :</p>
<pre class="prettyprint lang-config">&lt;Location "/example-hooks-info"&gt;
   SetHandler example-hooks-handler
&lt;/Location&gt;</pre>


    <p>Vous pouvez aussi ajouter ce qui suit dans un fichier <a href="core.html#accessfilename"><code>.htaccess</code></a>, puis
    accéder au fichier "test.example" à partir du répertoire
    correspondant :</p>

<pre class="prettyprint lang-config">AddHandler example-hooks-handler .example</pre>



    <p>Après avoir rechargé la configuration ou redémarré votre serveur,
    vous devriez pouvoir accéder à ce fichier et voir s'afficher ce qui
    a été décrit plus haut.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="example" id="example">Directive</a> <a name="Example" id="Example">Example</a> <a title="Lien permanent" href="#example" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Directive de démonstration pour illustrer l'API des modules
Apache</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>Example</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Surcharges autorisées:</a></th><td>Options</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_example_hooks</td></tr>
</table>
    <p>La directive <code class="directive">Example</code> n'a pour fonction que
    de définir un drapeau de démonstration que le gestionnaire de
    contenu du module example_hooks va afficher. Elle ne possède aucun
    argument. Si vous naviguez vers une URL à laquelle le gestionnaire
    de contenu example_hooks s'applique, vous verrez s'afficher les routines
    du module, ainsi que l'ordre dans lequel elles ont été appelées pour
    servir le document demandé. On peut observer l'effet de cette
    directive dans la phrase "<code>Example
    directive declared here: YES/NO</code>".</p>

</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_example_hooks.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_example_hooks.html" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ko/mod/mod_example_hooks.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 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 Libera.chat, or sent to our <a href="https://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/trunk/mod/mod_example_hooks.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 2025 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/quickreference.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>