]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_lua.xml.fr
Updates.
[apache] / docs / manual / mod / mod_lua.xml.fr
1 <?xml version="1.0"?>
2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English Revision : 1345917 -->
5 <!-- French translation : Lucien GENTIS -->
6 <!-- Reviewed by : Vincent Deffontaines -->
7
8 <!--
9  Licensed to the Apache Software Foundation (ASF) under one or more
10  contributor license agreements.  See the NOTICE file distributed with
11  this work for additional information regarding copyright ownership.
12  The ASF licenses this file to You under the Apache License, Version 2.0
13  (the "License"); you may not use this file except in compliance with
14  the License.  You may obtain a copy of the License at
15
16      http://www.apache.org/licenses/LICENSE-2.0
17
18  Unless required by applicable law or agreed to in writing, software
19  distributed under the License is distributed on an "AS IS" BASIS,
20  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  See the License for the specific language governing permissions and
22  limitations under the License.
23 -->
24
25 <modulesynopsis metafile="mod_lua.xml.meta">
26
27 <name>mod_lua</name>
28
29 <description>Fournit des points d'entr&eacute;e Lua dans diff&eacute;rentes parties du
30 traitement des requ&ecirc;tes httpd</description>
31 <status>Experimental</status>
32 <sourcefile>mod_lua.c</sourcefile>
33 <identifier>lua_module</identifier>
34 <compatibility>versions 2.3 et sup&eacute;rieures</compatibility>
35
36 <summary>
37 <p>Ce module permet d'ajouter au serveur des extensions sous forme de
38 scripts &eacute;crits dans le langage de programmation Lua.
39 <module>mod_lua</module> fournit de nombreuses extensions
40 (hooks) disponibles avec les modules natifs du serveur HTTP Apache,
41 comme les associations de requ&ecirc;tes &agrave; des fichiers, la g&eacute;n&eacute;ration de
42 r&eacute;ponses dynamiques, le contr&ocirc;le d'acc&egrave;s, l'authentification et
43 l'autorisation.</p>
44
45 <p>Vous trouverez davantage d'informations &agrave; propos du langage de
46 programmation Lua sur <a href="http://www.lua.org/">le site web de
47 Lua</a>.</p>
48
49 <note><code>mod_lua</code> est encore au stade exp&eacute;rimental. Son mode
50 d'utilisation et son comportement pourront changer &agrave; tout moment jusqu'&agrave;
51 ce qu'il passe au stade stable, et ce m&ecirc;me entre deux versions stables
52 2.4.x. N'oublez pas de consulter le fichier CHANGES avant toute mise &agrave;
53 jour.</note>
54
55 </summary>
56
57 <section id="basicconf"><title>Configuration de base</title>
58
59 <p>La directive de base pour le chargement du module est</p>
60
61 <highlight language="config">
62     LoadModule lua_module modules/mod_lua.so
63 </highlight>
64
65 <p>
66 <code>mod_lua</code> fournit un gestionnaire nomm&eacute;
67 <code>lua-script</code> qui peut &ecirc;tre utilis&eacute; avec une directive
68 <code>AddHandler</code> :</p>
69
70 <highlight language="config">
71 AddHandler lua-script .lua
72 </highlight>
73
74 <p>
75 Ceci aura pour effet de faire traiter les requ&ecirc;tes pour les fichiers
76 dont l'extension est <code>.lua</code> par <code>mod_lua</code> en
77 invoquant cette fonction de <code>gestion</code> de fichier.
78 </p>
79
80 <p>Pour plus de d&eacute;tails, voir la directive
81 <directive>LuaMapHandler</directive>.
82  </p>
83 </section>
84
85 <section id="writinghandlers"><title>Ecrire des gestionnaires</title>
86 <p>Dans l'API du serveur HTTP Apache, un gestionnaire est une sorte de
87 point d'accroche (hook) sp&eacute;cifique responsable de la g&eacute;n&eacute;ration de la
88 r&eacute;ponse. <module>mod_proxy</module>, <module>mod_cgi</module> et
89 <module>mod_status</module> sont des exemples de modules comportant un
90 gestionnaire.</p>
91
92 <p><code>mod_lua</code> cherche toujours &agrave; invoquer une fonction Lua pour le
93 gestionnaire, plut&ocirc;t que de simplement &eacute;valuer le corps d'un script dans
94 le style de CGI. Une fonction de gestionnaire se pr&eacute;sente comme suit :</p>
95
96
97 <highlight language="lua">
98 <strong>example.lua</strong>
99 -- exemple de gestionnaire
100
101 require "string"
102
103 --[[
104      Il s'agit du nom de m&eacute;thode par d&eacute;faut pour les gestionnaires Lua ;
105      voir les noms de fonctions optionnels dans la directive
106      LuaMapHandler pour choisir un point d'entr&eacute;e diff&eacute;rent.
107 --]]
108 function handle(r)
109     r.content_type = "text/plain"
110     r:puts("Hello Lua World!\n")
111
112     if r.method == 'GET' then
113         for k, v in pairs( r:parseargs() ) do
114             r:puts( string.format("%s: %s\n", k, v) )
115         end<!--
116 /* Not supported yet */
117     elseif r.method == 'POST' then
118         for k, v in pairs( r:parsebody() ) do
119             r:puts( string.format("%s: %s\n", k, v) )
120         end
121 -->     
122     else
123         r:puts("Unsupported HTTP method " .. r.method)
124     end
125 end
126 </highlight>
127
128 <p>
129 Ce gestionnaire se contente d'afficher les arguments cod&eacute;s d'un uri ou
130 d'un formulaire dans un page au format texte.
131 </p>
132
133 <p>
134 Cela signifie que vous pouvez (et &ecirc;tes encourag&eacute; &agrave;) avoir plusieurs
135 gestionnaires (ou points d'entr&eacute;e, ou filtres) dans le m&ecirc;me script.
136 </p>
137
138 </section>
139
140 <section id="writinghooks"><title>Ecriture de fonctions d'accroche
141 (hooks)</title>
142
143 <p>Les fonctions d'accroche d&eacute;terminent la mani&egrave;re dont les modules (et
144 les scripts Lua) participent au traitement des requ&ecirc;tes. Chaque type
145 d'accroche propos&eacute; par le serveur a un r&ocirc;le sp&eacute;cifique, comme
146 l'association de requ&ecirc;tes au syst&egrave;me de fichiers, le contr&ocirc;le d'acc&egrave;s,
147 ou la d&eacute;finition de types MIME. Il existe aussi des accroches &agrave; usage
148 g&eacute;n&eacute;ral qui s'ex&eacute;cutent simplement &agrave; des moments opportuns du cycle
149 de vie de la requ&ecirc;te.</p>
150
151 <p>Les fonctions d'accroche acceptent l'objet de la requ&ecirc;te comme seul
152 et unique argument. Elles peuvent renvoyer une valeur, selon la
153 fonction, mais il s'agit en g&eacute;n&eacute;ral d'un
154 code d'&eacute;tat HTTP ou des valeurs OK, DONE, ou DECLINED,
155 que vous pouvez &eacute;crire dans lua sous la forme <code>apache2.OK</code>,
156 <code>apache2.DONE</code>, ou <code>apache2.DECLINED</code>.</p>
157
158 <highlight language="lua">
159 <strong>translate_name.lua</strong>
160 -- exemple d'accroche qui r&eacute;&eacute;crit un URI en chemin du syst&egrave;me de
161 fichiers.
162
163 require 'apache2'
164
165 function translate_name(r)
166     if r.uri == "/translate-name" then
167         r.filename = r.document_root .. "/find_me.txt"
168         return apache2.OK
169     end
170     -- on ne g&egrave;re pas cette URL et on donne sa chance &agrave; un autre module
171     return apache2.DECLINED
172 end
173 </highlight>
174
175 <highlight language="lua">
176 <strong>translate_name2.lua</strong>
177 --[[ exemple d'accroche qui r&eacute;&eacute;crit un URI vers un autre URI. Il renvoie
178         un apache2.DECLINED pour permettre &agrave; un autre interpr&eacute;teur d'URL de
179         travailler sur la substitution, y compris l'accroche translate_name
180         de base dont les tables de correspondances se basent sur DocumentRoot.
181
182      Note: actuellement, il est impossible de pr&eacute;voir si cette action
183      s'ex&eacute;cute avant ou apr&egrave;s mod_alias.
184 --]]
185
186 require 'apache2'
187
188 function translate_name(r)
189     if r.uri == "/translate-name" then
190         r.uri = "/find_me.txt"
191         return apache2.DECLINED
192     end
193     return apache2.DECLINED
194 end
195 </highlight>
196 </section>
197
198 <section id="datastructures"><title>Structures de donn&eacute;es</title>
199
200 <dl>
201 <dt>request_rec</dt>
202         <dd>
203         <p>request_rec est consid&eacute;r&eacute;e en tant que donn&eacute;e utilisateur.
204         Elle poss&egrave;de une m&eacute;tatable qui vous permet d'accomplir des
205         choses int&eacute;ressantes. Pour la plus grande partie, elle poss&egrave;de
206         les m&ecirc;mes champs que la structure request_rec (voir httpd.h en
207         attendant que cette documentation soit plus compl&egrave;te), la
208         plupart d'entre eux &eacute;tant accessibles en lecture et &eacute;criture (le
209         contenu des champs de la table peut &ecirc;tre modifi&eacute;, mais les
210         champs eux-m&ecirc;mes ne peuvent pas &ecirc;tre &eacute;tablis en tant que tables
211         distinctes).</p>
212
213         <table border="1">
214
215         <tr>
216           <th><strong>Nom</strong></th>
217           <th><strong>Type Lua</strong></th>
218           <th><strong>Modifiable</strong></th>
219         </tr>
220         <tr>
221           <td><code>ap_auth_type</code></td>
222           <td>string</td>
223           <td>non</td>
224         </tr>
225         <tr>
226           <td><code>args</code></td>
227           <td>string</td>
228           <td>oui</td>
229         </tr>
230         <tr>
231           <td><code>assbackwards</code></td>
232           <td>boolean</td>
233           <td>non</td>
234         </tr>
235
236         <tr>
237           <td><code>canonical_filename</code></td>
238           <td>string</td>
239           <td>non</td>
240         </tr>
241         <tr>
242           <td><code>content_encoding</code></td>
243           <td>string</td>
244           <td>non</td>
245         </tr>
246         <tr>
247           <td><code>content_type</code></td>
248           <td>string</td>
249           <td>oui</td>
250         </tr>
251
252         <tr>
253           <td><code>document_root</code></td>
254           <td>string</td>
255           <td>non</td>
256         </tr>
257         <tr>
258           <td><code>err_headers_out</code></td>
259           <td>table</td>
260           <td>non</td>
261         </tr>
262         <tr>
263           <td><code>filename</code></td>
264           <td>string</td>
265           <td>oui</td>
266         </tr>
267         <tr>
268           <td><code>handler</code></td>
269           <td>string</td>
270           <td>oui</td>
271         </tr>
272         <tr>
273           <td><code>headers_in</code></td>
274           <td>table</td>
275           <td>oui</td>
276         </tr>
277         <tr>
278           <td><code>headers_out</code></td>
279           <td>table</td>
280           <td>oui</td>
281         </tr>
282         <tr>
283           <td><code>hostname</code></td>
284           <td>string</td>
285           <td>non</td>
286         </tr>
287         <tr>
288           <td><code>method</code></td>
289           <td>string</td>
290           <td>non</td>
291         </tr>
292         <tr>
293           <td><code>notes</code></td>
294           <td>table</td>
295           <td>oui</td>
296         </tr>
297         <tr>
298           <td><code>path_info</code></td>
299           <td>string</td>
300           <td>non</td>
301         </tr>
302         <tr>
303           <td><code>protocol</code></td>
304           <td>string</td>
305           <td>non</td>
306         </tr>
307         <tr>
308           <td><code>proxyreq</code></td>
309           <td>string</td>
310           <td>oui</td>
311         </tr>
312         <tr>
313           <td><code>range</code></td>
314           <td>string</td>
315           <td>non</td>
316         </tr>
317         <tr>
318           <td><code>subprocess_env</code></td>
319           <td>table</td>
320           <td>oui</td>
321         </tr>
322         <tr>
323           <td><code>status</code></td>
324           <td>number</td>
325           <td>oui</td>
326         </tr>
327         <tr>
328           <td><code>the_request</code></td>
329           <td>string</td>
330           <td>non</td>
331         </tr>
332         <tr>
333           <td><code>unparsed_uri</code></td>
334           <td>string</td>
335           <td>non</td>
336         </tr>
337         <tr>
338           <td><code>uri</code></td>
339           <td>string</td>
340           <td>oui</td>
341         </tr>
342         <tr>
343           <td><code>user</code></td>
344           <td>string</td>
345           <td>oui</td>
346         </tr>
347         </table>
348
349         <p>La structure request_rec poss&egrave;de (au minimum) les m&eacute;thodes
350         suivantes :</p>
351
352         <highlight language="lua">
353         r:addoutputfilter(name|function) -- ajoute un filtre en sortie
354         </highlight>
355
356         <highlight language="lua">
357         r:parseargs() -- renvoie une table lua contenant la chaîne
358         d'arguments de la requête
359         </highlight>
360 <!--
361 /* Not supported yet */
362         <highlight language="lua">
363         r:parsebody() &dash;- parse the request body as a POST and return  a lua table
364         </highlight>
365 -->
366         <highlight language="lua">
367         r:puts("bonjour", " le monde", "!") -- affichage dans le corps de la r&eacute;ponse
368         </highlight>
369
370         <highlight language="lua">
371         r:write("une simple cha&icirc;ne") -- affichage dans le
372         corps de la r&eacute;ponse
373         </highlight>
374         </dd>
375     </dl>
376
377 </section>
378
379 <section id="logging"><title>Fonctions de journalisation</title>
380
381 <highlight language="lua">
382         -- exemples de messages de journalisation
383         r:trace1("Ceci est un message de journalisation de niveau
384         trace") -- les niveaux valides vont de trace1 &agrave; trace8 <br />
385         r:debug("Ceci est un message de journalisation de niveau debug")<br />
386         r:info("Ceci est un message de journalisation de niveau info")<br />
387         r:notice("Ceci est un message de journalisation de niveau notice")<br />
388         r:warn("Ceci est un message de journalisation de niveau warn")<br />
389         r:err("Ceci est un message de journalisation de niveau err")<br />
390         r:alert("Ceci est un message de journalisation de niveau alert")<br />
391         r:crit("Ceci est un message de journalisation de niveau crit")<br />
392         r:emerg("Ceci est un message de journalisation de niveau emerg")<br />
393 </highlight>
394
395 </section>
396
397 <section id="apache2"><title>Paquet apache2</title>
398 <p>Le paquet nomm&eacute; <code>apache2</code> est fourni avec (au minimum) le
399 contenu suivant :</p>
400 <dl>
401   <dt>apache2.OK</dt>
402   <dd>Constante interne OK. Les gestionnaires renverront cette valeur
403   s'ils ont trait&eacute; la requ&ecirc;te.</dd>
404   <dt>apache2.DECLINED</dt>
405   <dd>Constante interne DECLINED. Les gestionnaires renverront cette
406   valeur s'ils n'ont pas l'intention de traiter la requ&ecirc;te.</dd>
407   <dt>apache2.DONE</dt>
408   <dd>Constante interne DONE.</dd>
409   <dt>apache2.version</dt>
410   <dd>Cha&icirc;ne contenant la version du serveur HTTP Apache</dd>
411   <dt>apache2.HTTP_MOVED_TEMPORARILY</dt>
412   <dd>Code d'&eacute;tat HTTP</dd>
413   <dt>apache2.PROXYREQ_NONE, apache2.PROXYREQ_PROXY, apache2.PROXYREQ_REVERSE, apache2.PROXYREQ_RESPONSE</dt>
414   <dd>Constantes internes utilis&eacute;es par <module>mod_proxy</module></dd>
415 </dl>
416 <p>Les autres codes d'&eacute;tat HTTP ne sont pas encore impl&eacute;ment&eacute;s.</p>
417 </section>
418
419
420
421 <directivesynopsis>
422 <name>LuaRoot</name>
423 <description>Sp&eacute;cifie le chemin de base pour la r&eacute;solution des chemins
424 relatifs dans les directives de mod_lua</description>
425 <syntax>LuaRoot /chemin/vers/un/r&eacute;pertoire</syntax>
426 <contextlist><context>server config</context><context>virtual host</context>
427 <context>directory</context><context>.htaccess</context>
428 </contextlist>
429 <override>All</override>
430
431 <usage>
432     <p>Cette directive permet de sp&eacute;cifier le chemin de base qui sera
433     utilis&eacute; pour &eacute;valuer tous les chemins relatifs dans mod_lua. En
434     l'absence de cette directive, les chemins relatifs sont r&eacute;solus par
435     rapport au r&eacute;pertoire de travail courant, ce qui ne sera pas
436     toujours appropri&eacute; pour un serveur.</p>
437 </usage>
438 </directivesynopsis>
439
440 <directivesynopsis>
441 <name>LuaScope</name>
442 <description>Une valeur parmi once, request, conn, server -- la valeur
443 par d&eacute;faut est once</description>
444 <syntax>LuaScope once|request|conn|server [max|min max]</syntax>
445 <default>LuaScope once</default>
446 <contextlist><context>server config</context><context>virtual host</context>
447 <context>directory</context><context>.htaccess</context>
448 </contextlist>
449 <override>All</override>
450
451 <usage>
452     <p>Cette directive permet de sp&eacute;cifier la dur&eacute;e de vie de
453     l'interpr&eacute;teur Lua qui sera utilis&eacute; dans ce "r&eacute;pertoire". La valeur
454     par d&eacute;faut est "once".</p>
455
456    <dl>
457     <dt>once:</dt> <dd>utilise l'interpr&eacute;teur une fois.</dd>
458
459     <dt>request:</dt> <dd>utilise l'interpr&eacute;teur pour traiter tout ce
460     qui est bas&eacute; sur le m&ecirc;me fichier dans la requ&ecirc;te, et qui se trouve
461     aussi dans la port&eacute;e de la requ&ecirc;te.</dd>
462
463     <dt>conn:</dt> <dd>idem request, mais attach&eacute; &agrave; connection_rec</dd>
464
465     <dt>server:</dt>  <dd>Le comportement est ici diff&eacute;rent, car la
466     port&eacute;e du serveur pr&eacute;sente une dur&eacute;e de vie assez longue, et
467     plusieurs threads vont partager le m&ecirc;me server_rec. Pour g&eacute;rer tout
468     ceci, les interpr&eacute;teurs sont stock&eacute;s dans une liste de ressources
469     apr. Les arguments min et max ont &eacute;t&eacute; pr&eacute;vus pour sp&eacute;cifier une
470     taille de jeu, mais sont inutilis&eacute;s pour le moment.</dd>
471    </dl>
472 </usage>
473 </directivesynopsis>
474
475 <directivesynopsis>
476 <name>LuaMapHandler</name>
477 <description>Met en correspondance un chemin avec un gestionnaire lua</description>
478 <syntax>LuaMapHandler modele-uri /chemin/vers/lua/script.lua
479 [nom-fonction]</syntax>
480 <contextlist><context>server config</context><context>virtual host</context>
481 <context>directory</context><context>.htaccess</context>
482 </contextlist>
483 <override>All</override>
484 <usage>
485     <p>Cette directive permet de faire correspondre un mod&egrave;le d'uri avec
486     une fonction de gestionnaire situ&eacute;e dans un fichier sp&eacute;cifique. Elle
487     utilise les expressions rationnelles PCRE pour mettre en
488     correspondance l'uri, et supporte les groupes de correspondance
489     d'interpolation dans le chemin du fichier et le nom de la fonction.
490     Prenez garde aux probl&egrave;mes de s&eacute;curit&eacute; en &eacute;crivant vos expressions
491     rationnelles.</p>
492    <example><title>Exemples :</title>
493     <highlight language="config">
494     LuaMapHandler /(\w+)/(\w+) /scripts/$1.lua handle_$2
495     </highlight>
496    </example>
497         <p>Cette directive va faire correspondre des uri comme
498         /photos/show?id=9 au fichier /scripts/photos.lua, et invoquera la
499         fonction de gestionnaire handle_show au niveau de la vm lua
500         apr&egrave;s chargement de ce fichier.</p>
501
502 <highlight language="config">
503     LuaMapHandler /bingo /scripts/wombat.lua
504 </highlight>
505         <p>Cette directive invoquera la fonction "handle" qui est la
506         valeur par d&eacute;faut si aucun nom de fonction sp&eacute;cifique n'est
507         sp&eacute;cifi&eacute;.</p>
508 </usage>
509 </directivesynopsis>
510
511 <directivesynopsis>
512 <name>LuaPackagePath</name>
513 <description>Ajoute un r&eacute;pertoire au package.path de lua</description>
514 <syntax>LuaPackagePath /chemin/vers/include/?.lua</syntax>
515 <contextlist><context>server config</context><context>virtual host</context>
516 <context>directory</context><context>.htaccess</context>
517 </contextlist>
518 <override>All</override>
519     <usage><p>Cette directive permet d'ajouter un chemin &agrave; la liste des
520     chemins de recherche du module lua. Elle suit les m&ecirc;mes conventions
521     que lua. Ceci modifie le package.path dans les vms lua.</p>
522
523     <example><title>Exemples :</title>
524         <highlight language="config">
525 LuaPackagePath /scripts/lib/?.lua
526 LuaPackagePath /scripts/lib/?/init.lua
527     </highlight>
528     </example>
529 </usage>
530 </directivesynopsis>
531
532 <directivesynopsis>
533 <name>LuaPackageCPath</name>
534 <description>Ajoute un r&eacute;pertoire au package.cpath de lua</description>
535 <syntax>LuaPackageCPath /chemin/vers/include/?.soa</syntax>
536 <contextlist><context>server config</context><context>virtual host</context>
537 <context>directory</context><context>.htaccess</context>
538 </contextlist>
539 <override>All</override>
540
541 <usage>
542     <p>Cette directive permet d'ajouter un chemin &agrave; la liste des chemins
543     de recherche des biblioth&egrave;ques partag&eacute;es de lua. Ceci modifie le
544     package.cpath dans les vms lua.</p>
545
546 </usage>
547 </directivesynopsis>
548
549 <directivesynopsis>
550 <name>LuaCodeCache</name>
551 <description>Configure le cache de code compil&eacute;.</description>
552 <syntax>LuaCodeCache stat|forever|never</syntax>
553 <default>LuaCodeCache stat</default>
554 <contextlist><context>server config</context><context>virtual host</context>
555 <context>directory</context><context>.htaccess</context>
556 </contextlist>
557 <override>All</override>
558
559 <usage><p>
560     Cette directive permet de d&eacute;finir le comportement du cache de code
561     en m&eacute;moire. La valeur par d&eacute;faut est stat ; dans ce cas, le script
562     du niveau le plus haut (et pas les scripts inclus) est v&eacute;rifi&eacute; &agrave;
563     chaque fois que ce fichier est n&eacute;cessaire, et est recharg&eacute; si la
564     date de modification est plus r&eacute;cente que celle du script d&eacute;j&agrave;
565     charg&eacute;. Les autres valeurs permettent respectivement de garder le
566     fichier en cache perp&eacute;tuellement (forever - jamais v&eacute;rifi&eacute; ni
567     remplac&eacute;), ou de ne jamais le mettre en cache (never).</p>
568
569     <p>En g&eacute;n&eacute;ral, les valeurs stat et forever sont utilis&eacute;es pour un
570     serveur en production, et les valeurs stat ou never pour un serveur
571     en d&eacute;veloppement.</p>
572
573     <example><title>Exemples :</title>
574         <highlight language="config">
575 LuaCodeCache stat
576 LuaCodeCache forever
577 LuaCodeCache never
578     </highlight>
579     </example>
580
581 </usage>
582 </directivesynopsis>
583
584 <directivesynopsis>
585 <name>LuaHookTranslateName</name>
586 <description>Fournit un point d'entr&eacute;e &agrave; la phase du nom de
587 traduction du traitement de la requ&ecirc;te</description>
588 <syntax>LuaHookTranslateName  /chemin/vers/lua/script.lua  nom_fonction_hook [early|late]</syntax>
589 <contextlist><context>server config</context><context>virtual host</context>
590 <context>directory</context>
591 </contextlist>
592 <override>All</override>
593 <compatibility>Le troisi&egrave;me argument optionnel est disponible depuis la
594 version 2.3.15 du serveur HTTP Apache.</compatibility>
595
596 <usage><p>
597     Cette directive permet d'ajouter un point d'entr&eacute;e (&agrave;
598     APR_HOOK_MIDDLE) &agrave; la phase du nom de traduction du traitement de la
599     requ&ecirc;te. La fonction hook accepte un seul argument, le request_rec,
600     et doit renvoyer un code d'&eacute;tat qui est soit un code d'erreur HTTP,
601     ou une constante d&eacute;finie dans le module apache2 :  apache2.OK,
602     apache2.DECLINED, ou apache2.DONE.</p>
603
604     <p>Pour ceux qui ne sont pas familiers avec les points d'entr&eacute;e
605     (hook), en gros, chaque hook sera invoqu&eacute; jusqu'&agrave; ce que l'un
606     d'entre eux renvoie apache2.OK. Si un hook n'effectuer pas la
607     traduction, il doit juste renvoyer apache2.DECLINED. Si le
608     traitement de la requ&ecirc;te doit &ecirc;tre interrompu, la valeur renvoy&eacute;e
609     doit &ecirc;tre apache2.DONE.</p>
610
611     <p>Exemple :</p>
612
613 <highlight language="config">
614 # httpd.conf
615 LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper
616 </highlight>
617
618 <highlight language="lua">
619 -- /scripts/conf/hooks.lua --
620 require "apache2"
621 function silly_mapper(r)
622     if r.uri == "/" then
623         r.filename = "/var/www/home.lua"
624         return apache2.OK
625     else
626         return apache2.DECLINED
627     end
628 end
629 </highlight>
630
631    <note><title>Contexte</title><p>Cette directive ne peut &ecirc;tre
632    utilis&eacute;e ni &agrave; l'int&eacute;rieur d'une section <directive type="section"
633    module="core">Directory</directive> ou <directive type="section"
634    module="core">Files</directive>, ni dans un fichier htaccess.</p></note>
635
636    <note><title>Ordonnancement</title><p>Les arguments optionnels
637    "early" ou "late" permettent de contr&ocirc;ler le moment auquel ce script
638    s'ex&eacute;cute par rapport aux autres modules.</p></note>
639 </usage>
640 </directivesynopsis>
641
642 <directivesynopsis>
643 <name>LuaHookFixups</name>
644 <description>Fournit un point d'entr&eacute;e pour la phase de correction du
645 traitement de la requ&ecirc;te</description>
646 <syntax>LuaHookFixups  /chemin/vers/lua/script.lua hook_function_name</syntax>
647 <contextlist><context>server config</context><context>virtual host</context>
648 <context>directory</context><context>.htaccess</context>
649 </contextlist>
650 <override>All</override>
651 <usage>
652 <p>
653     Idem LuaHookTranslateName, mais s'ex&eacute;cute durant la phase de
654     correction.
655 </p>
656 </usage>
657 </directivesynopsis>
658
659 <directivesynopsis>
660 <name>LuaHookMapToStorage</name>
661 <description>Fournit un point d'entr&eacute;e pour la phase map_to_storage du
662 traitement de la requ&ecirc;te</description>
663 <syntax>LuaHookMapToStorage  /chemin/vers/lua/script.lua hook_function_name</syntax>
664 <contextlist><context>server config</context><context>virtual host</context>
665 <context>directory</context><context>.htaccess</context>
666 </contextlist>
667 <override>All</override>
668     <usage><p>...</p></usage>
669 </directivesynopsis>
670
671 <directivesynopsis>
672 <name>LuaHookCheckUserID</name>
673 <description>Fournit un point d'entr&eacute;e pour la phase check_user_id du
674 traitement de la requ&ecirc;te</description>
675 <syntax>LuaHookCheckUserID  /chemin/vers/lua/script.lua hook_function_name [early|late]</syntax>
676 <contextlist><context>server config</context><context>virtual host</context>
677 <context>directory</context><context>.htaccess</context>
678 </contextlist>
679 <override>All</override>
680 <compatibility>Le troisi&egrave;me argument optionnel est disponible depuis la
681 version 2.3.15 du serveur HTTP Apache.</compatibility>
682 <usage><p>...</p>
683    <note><title>Ordonnancement</title><p>Les arguments optionnels
684    "early" ou "late" permettent de contr&ocirc;ler le moment auquel ce script
685    s'ex&eacute;cute par rapport aux autres modules.</p></note>
686 </usage>
687 </directivesynopsis>
688
689 <directivesynopsis>
690 <name>LuaHookTypeChecker</name>
691 <description>Fournit un point d'entr&eacute;e pour la phase type_checker du
692 traitement de la requ&ecirc;te</description>
693 <syntax>LuaHookTypeChecker  /chemin/vers/lua/script.lua hook_function_name</syntax>
694 <contextlist><context>server config</context><context>virtual host</context>
695 <context>directory</context><context>.htaccess</context>
696 </contextlist>
697 <override>All</override>
698     <usage><p>...</p></usage>
699 </directivesynopsis>
700
701 <directivesynopsis>
702 <name>LuaHookAuthChecker</name>
703 <description>Fournit un point d'entr&eacute;e pour la phase auth_checker du
704 traitement de la requ&ecirc;te</description>
705 <syntax>LuaHookAuthChecker  /chemin/vers/lua/script.lua hook_function_name [early|late]</syntax>
706 <contextlist><context>server config</context><context>virtual host</context>
707 <context>directory</context><context>.htaccess</context>
708 </contextlist>
709 <override>All</override>
710 <compatibility>Le troisi&egrave;me argument optionnel est disponible depuis la
711 version 2.3.15 du serveur HTTP Apache.</compatibility>
712     <usage>
713 <p>Invoque une fonction lua au cours de la phase auth_checker du
714 traitement de la requ&ecirc;te. Cette directive peut s'utiliser pour
715 impl&eacute;menter une v&eacute;rification arbitraire de l'authentification et de
716 l'autorisation. Voici un exemple tr&egrave;s simple :
717 </p>
718 <highlight language="lua">
719 require 'apache2'
720
721 -- fonction d'accroche authcheck fictive
722 -- Si la requ&ecirc;te ne contient aucune donn&eacute;e d'authentification, l'en-t&ecirc;te
723 -- de la r&eacute;ponse est d&eacute;fini et un code 401 est renvoy&eacute; afin de demander au
724 -- navigateur d'effectuer une authentification basique. Si la requ&ecirc;te
725 -- comporte des donn&eacute;es d'authentification, elles ne sont pas vraiment
726 -- consult&eacute;es, mais on admet la prise en compte de l'utilisateur 'foo' et
727 -- on la valide. On v&eacute;rifie ensuite si l'utilisateur est bien 'foo' et on
728 -- accepte la requ&ecirc;te.
729 function authcheck_hook(r)
730
731    -- recherche des informations d'authentification
732    auth = r.headers_in['Authorization']
733    if auth ~= nil then
734      -- d&eacute;finition d'un utilisateur par d&eacute;faut
735      r.user = 'foo'
736    end
737
738    if r.user == nil then
739       r:debug("authcheck: user is nil, returning 401")
740       r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
741       return 401
742    elseif r.user == "foo" then
743       r:debug('user foo: OK')
744    else
745       r:debug("authcheck: user='" .. r.user .. "'")
746       r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
747       return 401
748    end
749    return apache2.OK
750 end
751 </highlight>
752 <note><title>Ordonnancement</title><p>Les arguments optionnels
753    "early" ou "late" permettent de contr&ocirc;ler le moment auquel ce script
754    s'ex&eacute;cute par rapport aux autres modules.</p></note>
755 </usage>
756 </directivesynopsis>
757
758 <directivesynopsis>
759 <name>LuaHookAccessChecker</name>
760 <description>Fournit un point d'entr&eacute;e pour la phase access_checker du
761 traitement de la requ&ecirc;te</description>
762 <syntax>LuaHookAccessChecker  /chemin/vers/lua/script.lua  hook_function_name [early|late]</syntax>
763 <contextlist><context>server config</context><context>virtual host</context>
764 <context>directory</context><context>.htaccess</context>
765 </contextlist>
766 <override>All</override>
767 <compatibility>Le troisi&egrave;me argument optionnel est disponible depuis la
768 version 2.3.15 du serveur HTTP Apache.</compatibility>
769
770 <usage>
771 <p>Ajoute votre fonction d'accroche &agrave; la phase access_checker. Une
772 fonction d'accroche access checker renvoie en g&eacute;n&eacute;ral OK, DECLINED, ou
773 HTTP_FORBIDDEN.</p>
774 <note><title>Ordonnancement</title><p>Les arguments optionnels
775    "early" ou "late" permettent de contr&ocirc;ler le moment auquel ce script
776    s'ex&eacute;cute par rapport aux autres modules.</p></note>
777 </usage>
778 </directivesynopsis>
779 <directivesynopsis>
780 <name>LuaHookInsertFilter</name>
781 <description>Fournit un point d'entr&eacute;e pour la phase insert_filter du
782 traitement de la requ&ecirc;te</description>
783 <syntax>LuaHookInsertFilter  /chemin/vers/lua/script.lua hook_function_name</syntax>
784 <contextlist><context>server config</context><context>virtual host</context>
785 <context>directory</context><context>.htaccess</context>
786 </contextlist>
787 <override>All</override>
788     <usage><p>Non encore impl&eacute;ment&eacute;</p></usage>
789 </directivesynopsis>
790
791 <directivesynopsis>
792 <name>LuaInherit</name>
793 <description>Contr&ocirc;le la mani&egrave;re dont les sections de configuration
794 parentes sont fusionn&eacute;es dans les enfants</description>
795 <syntax>LuaInherit none|parent-first|parent-last</syntax>
796 <default>LuaInherit parent-first</default>
797 <contextlist><context>server config</context><context>virtual host</context>
798 <context>directory</context><context>.htaccess</context>
799 </contextlist>
800 <override>All</override>
801 <compatibility>Versions 2.4.0 et sup&eacute;rieures</compatibility>
802     <usage><p>Par d&eacute;faut, si des directives LuaHook* se trouvent dans
803     des sections de configuration Directory ou Location qui se
804     chevauchent, les scripts
805     d&eacute;finis dans les sections les plus sp&eacute;cifiques s'ex&eacute;cutent
806     <em>apr&egrave;s</em> ceux d&eacute;finis dans les sections plus g&eacute;n&eacute;riques
807     (LuaInherit parent-first). Vous pouvez inverser cet ordre, ou faire
808     en sorte que le contexte parent ne s'applique pas du tout.</p>
809
810     <p>Jusqu'aux versions 2.3.x, le comportement par d&eacute;faut consistait &agrave;
811     ignorer les directives LuaHook* situ&eacute;es dans les sections de
812     configuration parentes.</p></usage>
813 </directivesynopsis>
814
815 <directivesynopsis>
816 <name>LuaQuickHandler</name>
817 <description>Fournit un point d'entr&eacute;e pour la gestion rapide du
818 traitement de la requ&ecirc;te</description>
819 <syntax></syntax>
820 <contextlist><context>server config</context><context>virtual host</context>
821 <context>directory</context><context>.htaccess</context>
822 </contextlist>
823 <override>All</override>
824 <usage><p>...</p>
825    <note><title>Contexte</title><p>Cette directive ne peut &ecirc;tre
826    utilis&eacute;e ni &agrave; l'int&eacute;rieur d'une section <directive type="section"
827    module="core">Directory</directive> ou <directive type="section"
828    module="core">Files</directive>, ni dans un fichier htaccess.</p></note>
829 </usage>
830 </directivesynopsis>
831
832 </modulesynopsis>
833