1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5              This file is generated from xml source: DO NOT EDIT
6        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7      -->
8<title>mod_lua - Serveur Apache HTTP</title>
9<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11<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" />
12<script src="/style/scripts/prettify.min.js" type="text/javascript">
13</script>
14
15<link href="/images/favicon.ico" rel="shortcut icon" /></head>
16<body>
17<div id="page-header">
18<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>
19<p class="apache">Serveur Apache HTTP Version 2.4</p>
20<img alt="" src="/images/feather.gif" /></div>
21<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
22<div id="path">
23<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>
24<div id="page-content">
25<div id="preamble"><h1>Module Apache mod_lua</h1>
26<div class="toplang">
27<p><span>Langues Disponibles: </span><a href="/en/mod/mod_lua.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
28<a href="/fr/mod/mod_lua.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
29</div>
30<div class="outofdate">Cette traduction peut �tre p�rim�e. V�rifiez la version
31            anglaise pour les changements r�cents.</div>
32<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Fournit des points d'entr�e Lua dans diff�rentes parties du
33traitement des requ�tes httpd</td></tr>
34<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
35<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur�de�Module:</a></th><td>lua_module</td></tr>
36<tr><th><a href="module-dict.html#SourceFile">Fichier�Source:</a></th><td>mod_lua.c</td></tr>
37<tr><th><a href="module-dict.html#Compatibility">Compatibilit�:</a></th><td>versions 2.3 et sup�rieures</td></tr></table>
38<h3>Sommaire</h3>
39
40<p>Ce module permet d'ajouter au serveur des extensions sous forme de
41scripts �crits dans le langage de programmation Lua.
42<code class="module"><a href="/mod/mod_lua.html">mod_lua</a></code> fournit de nombreuses extensions
43(hooks) disponibles avec les modules natifs du serveur HTTP Apache,
44comme les associations de requ�tes � des fichiers, la g�n�ration de
45r�ponses dynamiques, le contr�le d'acc�s, l'authentification et
46l'autorisation.</p>
47
48<p>Vous trouverez davantage d'informations � propos du langage de
49programmation Lua sur <a href="http://www.lua.org/">le site web de
50Lua</a>.</p>
51
52<div class="note"><code>mod_lua</code> est encore au stade exp�rimental. Son mode
53d'utilisation et son comportement pourront changer � tout moment jusqu'�
54ce qu'il passe au stade stable, et ce m�me entre deux versions stables
552.4.x. N'oublez pas de consulter le fichier CHANGES avant toute mise �
56jour.</div>
57
58<div class="warning"><h3>Avertissement</h3>
59<p>Ce module poss�de une grande capacit� d'action sur le fonctrionnement
60de httpd, ce qui lui conf�re une grande puissance, mais peut aussi
61induire un risque de s�curit�. Il est d�conseill� d'utiliser ce module
62sur un serveur partag� avec des utilisateurs auxquels vous ne pouvez pas
63accorder une confiance absolue, car il peut permettre de modifier le
64fonctionnement interne de httpd.</p>
65</div>
66
67</div>
68<div id="quickview"><h3 class="directives">Directives</h3>
69<ul id="toc">
70<li><img alt="" src="/images/down.gif" /> <a href="#luaauthzprovider">LuaAuthzProvider</a></li>
71<li><img alt="" src="/images/down.gif" /> <a href="#luacodecache">LuaCodeCache</a></li>
72<li><img alt="" src="/images/down.gif" /> <a href="#luahookaccesschecker">LuaHookAccessChecker</a></li>
73<li><img alt="" src="/images/down.gif" /> <a href="#luahookauthchecker">LuaHookAuthChecker</a></li>
74<li><img alt="" src="/images/down.gif" /> <a href="#luahookcheckuserid">LuaHookCheckUserID</a></li>
75<li><img alt="" src="/images/down.gif" /> <a href="#luahookfixups">LuaHookFixups</a></li>
76<li><img alt="" src="/images/down.gif" /> <a href="#luahookinsertfilter">LuaHookInsertFilter</a></li>
77<li><img alt="" src="/images/down.gif" /> <a href="#luahooklog">LuaHookLog</a></li>
78<li><img alt="" src="/images/down.gif" /> <a href="#luahookmaptostorage">LuaHookMapToStorage</a></li>
79<li><img alt="" src="/images/down.gif" /> <a href="#luahooktranslatename">LuaHookTranslateName</a></li>
80<li><img alt="" src="/images/down.gif" /> <a href="#luahooktypechecker">LuaHookTypeChecker</a></li>
81<li><img alt="" src="/images/down.gif" /> <a href="#luainherit">LuaInherit</a></li>
82<li><img alt="" src="/images/down.gif" /> <a href="#luainputfilter">LuaInputFilter</a></li>
83<li><img alt="" src="/images/down.gif" /> <a href="#luamaphandler">LuaMapHandler</a></li>
84<li><img alt="" src="/images/down.gif" /> <a href="#luaoutputfilter">LuaOutputFilter</a></li>
85<li><img alt="" src="/images/down.gif" /> <a href="#luapackagecpath">LuaPackageCPath</a></li>
86<li><img alt="" src="/images/down.gif" /> <a href="#luapackagepath">LuaPackagePath</a></li>
87<li><img alt="" src="/images/down.gif" /> <a href="#luaquickhandler">LuaQuickHandler</a></li>
88<li><img alt="" src="/images/down.gif" /> <a href="#luaroot">LuaRoot</a></li>
89<li><img alt="" src="/images/down.gif" /> <a href="#luascope">LuaScope</a></li>
90</ul>
91<h3>Sujets</h3>
92<ul id="topics">
93<li><img alt="" src="/images/down.gif" /> <a href="#basicconf">Configuration de base</a></li>
94<li><img alt="" src="/images/down.gif" /> <a href="#writinghandlers">Ecrire des gestionnaires</a></li>
95<li><img alt="" src="/images/down.gif" /> <a href="#writingauthzproviders">Ecriture de fournisseurs d'autorisation</a></li>
96<li><img alt="" src="/images/down.gif" /> <a href="#writinghooks">Ecriture de fonctions d'accroche
97(hooks)</a></li>
98<li><img alt="" src="/images/down.gif" /> <a href="#datastructures">Structures de donn�es</a></li>
99<li><img alt="" src="/images/down.gif" /> <a href="#functions">M�thodes de l'objet request_rec</a></li>
100<li><img alt="" src="/images/down.gif" /> <a href="#logging">Fonctions de journalisation</a></li>
101<li><img alt="" src="/images/down.gif" /> <a href="#apache2">Paquet apache2</a></li>
102<li><img alt="" src="/images/down.gif" /> <a href="#modifying_buckets">Modification de contenu avec les filtres lua</a></li>
103<li><img alt="" src="/images/down.gif" /> <a href="#databases">Connectivit� aux bases de donn�es</a></li>
104</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
105<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
106<div class="section">
107<h2><a name="basicconf" id="basicconf">Configuration de base</a></h2>
108
109<p>La directive de base pour le chargement du module est</p>
110
111<pre class="prettyprint lang-config">LoadModule lua_module modules/mod_lua.so</pre>
112
113
114<p>
115<code>mod_lua</code> fournit un gestionnaire nomm�
116<code>lua-script</code> qui peut �tre utilis� avec une directive
117<code>AddHandler</code> :</p>
118
119<pre class="prettyprint lang-config">AddHandler lua-script .lua</pre>
120
121
122<p>
123Ceci aura pour effet de faire traiter les requ�tes pour les fichiers
124dont l'extension est <code>.lua</code> par <code>mod_lua</code> en
125invoquant cette fonction de <code>gestion</code> de fichier.
126</p>
127
128<p>Pour plus de d�tails, voir la directive
129<code class="directive">LuaMapHandler</code>.
130 </p>
131</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
132<div class="section">
133<h2><a name="writinghandlers" id="writinghandlers">Ecrire des gestionnaires</a></h2>
134<p>Dans l'API du serveur HTTP Apache, un gestionnaire est une sorte de
135point d'accroche (hook) sp�cifique responsable de la g�n�ration de la
136r�ponse. <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code>, <code class="module"><a href="/mod/mod_cgi.html">mod_cgi</a></code> et
137<code class="module"><a href="/mod/mod_status.html">mod_status</a></code> sont des exemples de modules comportant un
138gestionnaire.</p>
139
140<p><code>mod_lua</code> cherche toujours � invoquer une fonction Lua pour le
141gestionnaire, plut�t que de simplement �valuer le corps d'un script dans
142le style de CGI. Une fonction de gestionnaire se pr�sente comme suit :</p>
143
144
145<pre class="prettyprint lang-lua">
146<strong>example.lua</strong><br />
147-- exemple de gestionnaire
148
149require "string"
150
151--[[
152     Il s'agit du nom de m�thode par d�faut pour les gestionnaires Lua ;
153     voir les noms de fonctions optionnels dans la directive
154     LuaMapHandler pour choisir un point d'entr�e diff�rent.
155--]]
156function handle(r)
157    r.content_type = "text/plain"
158
159    if r.method == 'GET' then
160    	r:puts("Hello Lua World!\n")
161        for k, v in pairs( r:parseargs() ) do
162            r:puts( string.format("%s: %s\n", k, v) )
163        end
164    elseif r.method == 'POST' then
165    	r:puts("Hello Lua World!\n")
166        for k, v in pairs( r:parsebody() ) do
167            r:puts( string.format("%s: %s\n", k, v) )
168        end
169    else
170    elseif r.method == 'PUT' then
171-- message d'erreur personnalis�
172        r:puts("Unsupported HTTP method " .. r.method)
173	r.status = 405
174        return apache2.ok
175    else
176-- message d'erreur ErrorDocument
177        return 501
178    end
179    return apache2.OK
180end</pre>
181
182
183<p>
184Ce gestionnaire se contente d'afficher les arguments cod�s d'un uri ou
185d'un formulaire dans un page au format texte.
186</p>
187
188<p>
189Cela signifie que vous pouvez (et �tes encourag� �) avoir plusieurs
190gestionnaires (ou points d'entr�e, ou filtres) dans le m�me script.
191</p>
192
193</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
194<div class="section">
195<h2><a name="writingauthzproviders" id="writingauthzproviders">Ecriture de fournisseurs d'autorisation</a></h2>
196
197
198<p><code class="module"><a href="/mod/mod_authz_core.html">mod_authz_core</a></code> fournit une interface d'autorisation
199de haut niveau bien plus facile � utiliser que dans les hooks
200correspondants. Le premier argument de la directive <code class="directive"><a href="/mod/mod_authz_core.html#require">Require</a></code> permet de sp�cifier le
201fournisseur d'autorisation � utiliser. Pour chaque directive <code class="directive"><a href="/mod/mod_authz_core.html#require">Require</a></code>,
202<code class="module"><a href="/mod/mod_authz_core.html">mod_authz_core</a></code> appellera le fournisseur d'autorisation
203sp�cifi�, le reste de la ligne constituant les param�tres. Le
204fournisseur consid�r� va alors v�rifier les autorisations et fournir le
205r�sultat dans une valeur de retour.</p>
206
207<p>En g�n�ral, le fournisseur authz est appel� avant l'authentification.
208S'il doit conna�tre le nom d'utilisateur authentifi� (ou si
209l'utilisateur est appel� � �tre authentifi�), le fournisseur doit
210renvoyer <code>apache2.AUTHZ_DENIED_NO_USER</code>, ce qui va
211d�clancher le processus d'authentification et un deuxi�me appel du
212fournisseur authz.</p>
213
214<p>La fonction du fournisseur authz ci-dessous accepte deux arguments,
215une adresse IP et un nom d'utilisateur. Elle autorise l'acc�s dans le
216cas o� la requ�te provient de l'adresse IP sp�cifi�e, ou si
217l'utilisateur authentifi� correspond au second argument :</p>
218
219<pre class="prettyprint lang-lua">
220<strong>authz_provider.lua</strong><br />
221
222require 'apache2'
223
224function authz_check_foo(r, ip, user)
225    if r.useragent_ip == ip then
226        return apache2.AUTHZ_GRANTED
227    elseif r.user == nil then
228        return apache2.AUTHZ_DENIED_NO_USER
229    elseif r.user == user then
230        return apache2.AUTHZ_GRANTED
231    else
232        return apache2.AUTHZ_DENIED
233    end
234end</pre>
235
236
237<p>La configuration suivante enregistre cette fonction en tant que
238fournisseur <code>foo</code>, et la configure por l'URL <code>/</code> :</p>
239<pre class="prettyprint lang-config">LuaAuthzProvider foo authz_provider.lua authz_check_foo
240&lt;Location /&gt;
241  Require foo 10.1.2.3 john_doe
242&lt;/Location&gt;</pre>
243
244
245</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
246<div class="section">
247<h2><a name="writinghooks" id="writinghooks">Ecriture de fonctions d'accroche
248(hooks)</a></h2>
249
250<p>Les fonctions d'accroche d�terminent la mani�re dont les modules (et
251les scripts Lua) participent au traitement des requ�tes. Chaque type
252d'accroche propos� par le serveur a un r�le sp�cifique, comme
253l'association de requ�tes au syst�me de fichiers, le contr�le d'acc�s,
254ou la d�finition de types MIME : </p>
255
256<table class="bordered"><tr class="header">
257        <th>Phase d'accroche</th>
258        <th>Directive mod_lua</th>
259        <th>Description</th>
260    </tr>
261<tr>
262        <td>Gestionnaire rapide</td>
263        <td><code class="directive"><a href="#luaquickhandler">LuaQuickHandler</a></code></td>
264        <td>Il s'agit de la premi�re accroche appel�e lorsqu'une requ�te
265	a �t� associ�e � un serveur ou un serveur virtuel.</td>
266    </tr>
267<tr class="odd">
268        <td>Phase de traduction</td>
269        <td><code class="directive"><a href="#luahooktranslatename">LuaHookTranslateName</a></code></td>
270        <td>Cette phase traduit l'URI de la requ�te en nom de fichier
271	sur le syst�me. Ce sont des modules comme
272	<code class="module"><a href="/mod/mod_alias.html">mod_alias</a></code> et <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> qui
273	interviennent au cours de cette phase.</td>
274    </tr>
275<tr>
276        <td>Choix du lieu de stockage de la ressource</td>
277        <td><code class="directive"><a href="#luahookmaptostorage">LuaHookMapToStorage</a></code></td>
278        <td>Cette phase d�finit le lieu de stockage de la ressource :
279	physique, en cache ou externe/mandat�. Elle est assur�e par les
280	modules de mandat ou de mise en cache.</td>
281    </tr>
282<tr class="odd">
283        <td>Autorisation d'acc�s</td>
284        <td><code class="directive"><a href="#luahookaccesschecker">LuaHookAccessChecker</a></code></td>
285        <td>Cette phase v�rifie si un client a l'autorisation d'acc�s �
286	la ressource. Elle s'ex�cute avant l'authentification de
287	l'utisateur ; il faut donc �tre prudent.
288        </td>
289    </tr>
290<tr>
291        <td>V�rification de l'identifiant utilisateur</td>
292        <td><code class="directive"><a href="#luahookcheckuserid">LuaHookCheckUserID</a></code></td>
293        <td>Cette phase v�rifie l'identifiant de l'utilisateur ayant
294	fait l'objet d'une n�gociation.</td>
295    </tr>
296<tr class="odd">
297        <td>V�rification de l'autorisation d'acc�s</td>
298        <td><code class="directive"><a href="#luahookauthchecker">LuaHookAuthChecker</a></code>
299	ou
300            <code class="directive"><a href="#luaauthzprovider">LuaAuthzProvider</a></code></td>
301        <td>Cette phase v�rifie l'autorisation d'acc�s d'un utilisateur
302	en fonction des ses param�tres de connexion, comme
303	l'identifiant, le certificat, etc...
304        </td>
305    </tr>
306<tr>
307        <td>V�rification du type de la ressource</td>
308        <td><code class="directive"><a href="#luahooktypechecker">LuaHookTypeChecker</a></code></td>
309        <td>Cette phase assigne un type de contenu et un gestionnaire �
310	la ressource.</td>
311    </tr>
312<tr class="odd">
313        <td>Derniers r�glages</td>
314        <td><code class="directive"><a href="#luahookfixups">LuaHookFixups</a></code></td>
315        <td>C'est la derni�re phase avant l'activation des gestionnaires
316	de contenu. Toute modification de derni�re minute � la requ�te
317	doit �tre effectu�e ici.</td>
318    </tr>
319<tr>
320        <td>Gestionnaire de contenu</td>
321        <td>fichiers fx. <code>.lua</code> ou directive <code class="directive"><a href="#luamaphandler">LuaMapHandler</a></code></td>
322        <td>C'est durant cette phase que le contenu est trait�. Les
323	fichiers sont lus, interpr�t�s, certains sont ex�cut�s, et le
324	r�sultat obtenu est envoy� au client.</td>
325    </tr>
326<tr class="odd">
327        <td>Journalisation</td>
328        <td><code class="directive"><a href="#luahooklog">LuaHookLog</a></code></td>
329        <td>Lorsqu'une requ�te a �t� trait�e, plusieurs phases de
330	journalisation interviennent, et enregistrent leurs r�sultats
331	dans les fichiers d'erreur ou d'acc�s. Mod_lua peut
332	s'intercaler au d�part de ce processus et ainsi contr�ler la
333	journalisation.</td>
334    </tr>
335</table>
336
337<p>Les fonctions d'accroche re�oivent l'objet de la requ�te comme seul
338argument (sauf LuaAuthzProvider qui re�oit aussi des arguments en
339provenance de la directive Require). Elles peuvent renvoyer une valeur,
340selon la fonction, mais il s'agit en g�n�ral d'un
341code d'�tat HTTP ou des valeurs OK, DONE, ou DECLINED,
342que vous pouvez �crire dans Lua sous la forme <code>apache2.OK</code>,
343<code>apache2.DONE</code>, ou <code>apache2.DECLINED</code>.</p>
344
345
346<pre class="prettyprint lang-lua">
347<strong>translate_name.lua</strong><br />
348-- exemple d'accroche qui r��crit un URI en chemin du syst�me de
349fichiers.
350
351require 'apache2'
352
353function translate_name(r)
354    if r.uri == "/translate-name" then
355        r.filename = r.document_root .. "/find_me.txt"
356        return apache2.OK
357    end
358    -- on ne g�re pas cette URL et on donne sa chance � un autre module
359    return apache2.DECLINED
360end</pre>
361
362
363
364<pre class="prettyprint lang-lua">
365<strong>translate_name2.lua</strong><br />
366--[[ exemple d'accroche qui r��crit un URI vers un autre URI. Il renvoie
367	un apache2.DECLINED pour permettre � un autre interpr�teur d'URL de
368	travailler sur la substitution, y compris l'accroche translate_name
369	de base dont les tables de correspondances se basent sur DocumentRoot.
370
371     Note: utilisez le drapeau early/late de la directive pour
372     l'ex�cuter avant ou apr�s mod_alias.
373--]]
374
375require 'apache2'
376
377function translate_name(r)
378    if r.uri == "/translate-name" then
379        r.uri = "/find_me.txt"
380        return apache2.DECLINED
381    end
382    return apache2.DECLINED
383end</pre>
384
385</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
386<div class="section">
387<h2><a name="datastructures" id="datastructures">Structures de donn�es</a></h2>
388
389<dl>
390<dt>request_rec</dt>
391        <dd>
392        <p>request_rec est consid�r�e en tant que donn�e utilisateur.
393	Elle poss�de une m�tatable qui vous permet d'accomplir des
394	choses int�ressantes. Pour la plus grande partie, elle poss�de
395	les m�mes champs que la structure request_rec, la
396	plupart d'entre eux �tant accessibles en lecture et �criture (le
397	contenu des champs de la table peut �tre modifi�, mais les
398	champs eux-m�mes ne peuvent pas �tre �tablis en tant que tables
399	distinctes).</p>
400
401	<table class="bordered"><tr class="header">
402          <th><strong>Nom</strong></th>
403          <th><strong>Type Lua</strong></th>
404          <th><strong>Modifiable</strong></th>
405	  <th><strong>Description</strong></th>
406        </tr>
407<tr>
408          <td><code>allowoverrides</code></td>
409          <td>string</td>
410          <td>non</td>
411          <td>L'option AllowOverride s'applique � la requ�te courante.</td>
412        </tr>
413<tr class="odd">
414          <td><code>ap_auth_type</code></td>
415          <td>string</td>
416          <td>non</td>
417	  <td>Ce champ contient le type d'authentification effectu�e
418	  (par exemple <code>basic</code>)</td>
419        </tr>
420<tr>
421          <td><code>args</code></td>
422          <td>string</td>
423          <td>oui</td>
424	  <td>La cha�ne de param�tres de la requ�te (par exemple
425	  <code>foo=bar&amp;name=johnsmith</code>)</td>
426        </tr>
427<tr class="odd">
428          <td><code>assbackwards</code></td>
429          <td>boolean</td>
430          <td>non</td>
431	  <td>contient true s'il s'agit d'une requ�te de style HTTP/0.9
432	  (par exemple <code>GET /foo</code> (sans champs d'en-t�te) )</td>
433        </tr>
434<tr>
435          <td><code>auth_name</code></td>
436          <td>string</td>
437          <td>non</td>
438          <td>La cha�ne d'identification utilis�e pour la v�rification
439	  de l'autorisation d'acc�s (si elle est disponible).</td>
440        </tr>
441<tr class="odd">
442          <td><code>banner</code></td>
443          <td>string</td>
444          <td>non</td>
445          <td>La banni�re du serveur, par exemple <code>Apache HTTP
446	  Server/2.4.3 openssl/0.9.8c</code></td>
447        </tr>
448<tr>
449          <td><code>basic_auth_pw</code></td>
450          <td>string</td>
451          <td>non</td>
452          <td>Le mot de passe pour l'authentification de base envoy�
453	  avec la requ�te, s'il existe</td>
454        </tr>
455<tr class="odd">
456          <td><code>canonical_filename</code></td>
457          <td>string</td>
458          <td>non</td>
459	  <td>Le nom de fichier canonique de la requ�te</td>
460        </tr>
461<tr>
462          <td><code>content_encoding</code></td>
463          <td>string</td>
464          <td>non</td>
465	  <td>Le type de codage du contenu de la requ�te courante</td>
466        </tr>
467<tr class="odd">
468          <td><code>content_type</code></td>
469          <td>string</td>
470          <td>oui</td>
471	  <td>Le type de contenu de la requ�te courante, tel qu'il a �t�
472	  d�termin� au cours de la phase type_check (par exemple
473	  <code>image/gif</code> ou <code>text/html</code>)</td>
474        </tr>
475<tr>
476          <td><code>context_prefix</code></td>
477          <td>string</td>
478          <td>non</td>
479	  <td />
480        </tr>
481<tr class="odd">
482          <td><code>context_document_root</code></td>
483          <td>string</td>
484          <td>non</td>
485	  <td />
486        </tr>
487<tr>
488          <td><code>document_root</code></td>
489          <td>string</td>
490          <td>non</td>
491	  <td>La racine des documents du serveur</td>
492        </tr>
493<tr class="odd">
494          <td><code>err_headers_out</code></td>
495          <td>table</td>
496          <td>non</td>
497	  <td>L'en-t�te MIME de l'environnement pour la r�ponse, �crit
498	  m�me en cas d'erreur et conserv� pendant les redirections
499	  internes</td>
500        </tr>
501<tr>
502          <td><code>filename</code></td>
503          <td>string</td>
504          <td>oui</td>
505	  <td>Le nom de fichier correspondant � la requ�te, par exemple
506	  /www/example.com/foo.txt. Il peut �tre modifi� au cours des
507	  phases translate-name ou map-to-storage du traitement de la
508	  requ�te pour permettre au gestionnaire par d�faut (ou aux
509	  gestionnaires de script) de servir une version du fichier
510	  autre que celle demand�e.</td>
511        </tr>
512<tr class="odd">
513          <td><code>handler</code></td>
514          <td>string</td>
515          <td>oui</td>
516	  <td>Le nom du <a href="/handler.html">gestionnaire</a> qui
517	  doit traiter la requ�te, par exemple <code>lua-script</code>
518	  si elle doit �tre trait�e par mod_lua. Cette valeur est en
519	  g�n�ral d�finie via les directives <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>, mais peut aussi l'�tre
520	  via mod_lua pour permettre � un autre gestionnaire de traiter
521	  une requ�te sp�cifique qui ne serait pas trait�e par d�faut
522	  par ce dernier.
523            </td>
524        </tr>
525<tr>
526	  <td><code>headers_in</code></td>
527          <td>table</td>
528          <td>oui</td>
529	  <td>Les en-t�tes MIME de l'environnement de la requ�te. Il
530	  s'agit des en-t�tes comme <code>Host, User-Agent,
531	  Referer</code>, etc...</td>
532        </tr>
533<tr class="odd">
534          <td><code>headers_out</code></td>
535          <td>table</td>
536          <td>oui</td>
537	  <td>Les en-t�tes MIME de l'environnement de la r�ponse.</td>
538        </tr>
539<tr>
540          <td><code>hostname</code></td>
541          <td>string</td>
542          <td>non</td>
543	  <td>Le nom d'h�te, tel que d�fini par l'en-t�te
544	  <code>Host:</code> ou par un URI complet.</td>
545        </tr>
546<tr class="odd">
547          <td><code>is_https</code></td>
548          <td>boolean</td>
549          <td>non</td>
550          <td>Indique si la requ�te � �t� faite via HTTPS</td>
551        </tr>
552<tr>
553          <td><code>is_initial_req</code></td>
554          <td>boolean</td>
555          <td>non</td>
556          <td>Indique si la requ�te courante est la requ�te initiale ou
557	  une sous-requ�te.</td>
558        </tr>
559<tr class="odd">
560          <td><code>limit_req_body</code></td>
561          <td>number</td>
562          <td>non</td>
563          <td>La taille maximale du corps de la requ�te, ou 0 si aucune
564	  limite.</td>
565        </tr>
566<tr>
567	<td><code>log_id</code></td>
568          <td>string</td>
569          <td>non</td>
570	  <td>L'identifiant de la requ�te dans les journaux d'acc�s ou
571	  d'erreur.</td>
572        </tr>
573<tr class="odd">
574          <td><code>method</code></td>
575          <td>string</td>
576          <td>non</td>
577	  <td>La m�thode de la requ�te, par exemple <code>GET</code> ou
578	  <code>POST</code>.</td>
579        </tr>
580<tr>
581          <td><code>notes</code></td>
582          <td>table</td>
583          <td>oui</td>
584	  <td>Une liste de notes qui peuvent �tre transmises d'un module
585	  � l'autre.</td>
586        </tr>
587<tr class="odd">
588          <td><code>options</code></td>
589          <td>string</td>
590          <td>non</td>
591          <td>La valeur de la directive Options pour la requ�te
592	  courante.</td>
593        </tr>
594<tr>
595          <td><code>path_info</code></td>
596          <td>string</td>
597          <td>non</td>
598	  <td>La valeur de PATH_INFO extraite de la requ�te.</td>
599        </tr>
600<tr class="odd">
601          <td><code>port</code></td>
602          <td>number</td>
603          <td>non</td>
604          <td>Le port du serveur utilis� par la requ�te.</td>
605        </tr>
606<tr>
607          <td><code>protocol</code></td>
608          <td>string</td>
609          <td>non</td>
610	  <td>Le protocole utilis�, par exemple <code>HTTP/1.1</code></td>
611        </tr>
612<tr class="odd">
613          <td><code>proxyreq</code></td>
614          <td>string</td>
615          <td>oui</td>
616	  <td>Indique s'il s'agit d'une requ�te mandat�e ou non. Cette
617	  valeur est en g�n�ral d�finie au cours de la phase
618	  post_read_request/translate_name du traitement de la requ�te.</td>
619        </tr>
620<tr>
621	  <td><code>range</code></td>
622          <td>string</td>
623          <td>non</td>
624	  <td>Le contenu de l'en-t�te <code>Range:</code>.</td>
625        </tr>
626<tr class="odd">
627          <td><code>remaining</code></td>
628          <td>number</td>
629          <td>non</td>
630          <td>Le nombre d'octets du corps de la requ�te restant � lire.</td>
631        </tr>
632<tr>
633          <td><code>server_built</code></td>
634          <td>string</td>
635          <td>non</td>
636          <td>La date de compilation du serveur.</td>
637        </tr>
638<tr class="odd">
639          <td><code>server_name</code></td>
640          <td>string</td>
641          <td>non</td>
642          <td>Le nom du serveur pour cette requ�te.</td>
643        </tr>
644<tr>
645          <td><code>some_auth_required</code></td>
646          <td>boolean</td>
647          <td>non</td>
648          <td>Indique si une autorisation est/�tait requise pour cette
649	  requ�te.</td>
650        </tr>
651<tr class="odd">
652          <td><code>subprocess_env</code></td>
653          <td>table</td>
654          <td>oui</td>
655	  <td>Le jeu de variables d'environnement pour cette requ�te.</td>
656        </tr>
657<tr>
658          <td><code>started</code></td>
659          <td>number</td>
660          <td>non</td>
661          <td>Le moment o� le serveur a �t� (re)d�marr�, en secondes
662	  depuis epoch (1er janvier 1970)</td>
663        </tr>
664<tr class="odd">
665	  <td><code>status</code></td>
666          <td>number</td>
667          <td>oui</td>
668	  <td>Le code de retour (courant) pour cette requ�te, par
669	  exemple <code>200</code> ou <code>404</code>.</td>
670        </tr>
671<tr>
672          <td><code>the_request</code></td>
673          <td>string</td>
674          <td>non</td>
675	  <td>La cha�ne de la requ�te telle qu'elle a �t� envoy�e par le
676	  client, par exemple <code>GET /foo/bar HTTP/1.1</code>.</td>
677        </tr>
678<tr class="odd">
679          <td><code>unparsed_uri</code></td>
680          <td>string</td>
681          <td>non</td>
682	  <td>La partie URI non interpr�t�e de la requ�te</td>
683        </tr>
684<tr>
685          <td><code>uri</code></td>
686          <td>string</td>
687          <td>oui</td>
688	  <td>L'URI apr�s interpr�tation par httpd</td>
689        </tr>
690<tr class="odd">
691          <td><code>user</code></td>
692          <td>string</td>
693          <td>oui</td>
694	  <td>Si une authentification a �t� effectu�e, nom de
695	  l'utilisateur authentifi�.</td>
696        </tr>
697<tr>
698          <td><code>useragent_ip</code></td>
699          <td>string</td>
700          <td>non</td>
701	  <td>L'adresse IP de l'agent qui a envoy� la requ�te</td>
702        </tr>
703</table>
704	</dd>
705    </dl>
706</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
707<div class="section">
708<h2><a name="functions" id="functions">M�thodes de l'objet request_rec</a></h2>
709
710<p>L'objet request_rec poss�de (au minimum) les m�thodes suivantes :</p>
711
712<pre class="prettyprint lang-lua">r:flush()   -- vide le tampon de sortie
713            -- Renvoie true si le vidage a �t� effectu� avec succ�s,
714	    false dans le cas contraire.
715
716while nous_avons_des_donn�es_�_envoyer do
717    r:puts("Bla bla bla\n") -- envoi des donn�es � envoyer vers le tampon
718    r:flush() -- vidage du tampon (envoi au client)
719    r.usleep(500000) -- mise en attente pendant 0.5 secondes et bouclage
720end</pre>
721
722
723<pre class="prettyprint lang-lua">r:addoutputfilter(name|function) -- ajoute un filtre en sortie
724
725r:addoutputfilter("fooFilter") -- ins�re le filtre fooFilter dans le flux de sortie</pre>
726
727
728<pre class="prettyprint lang-lua">r:sendfile(filename) -- envoie un fichier entier au client en
729utilisant sendfile s'il est support� par la plateforme :
730
731if use_sendfile_thing then
732    r:sendfile("/var/www/large_file.img")
733end</pre>
734
735
736<pre class="prettyprint lang-lua">r:parseargs() -- renvoie deux tables : une table standard de couples
737cl�/valeur pour les donn�es GET simples, et une autre pour les donn�es
738multivalu�es (par exemple foo=1&amp;foo=2&amp;foo=3) :
739
740local GET, GETMULTI = r:parseargs()
741r:puts("Votre nom est : " .. GET['name'] or "Unknown")</pre>
742
743
744
745<pre class="prettyprint lang-lua">r:parsebody()([sizeLimit]) -- interpr�te le corps de la requ�te
746en tant que POST et renvoie deux tables lua, comme r:parseargs(). Un nombre optionnel
747peut �tre fourni pour sp�cifier le nombre maximal d'octets �
748interpr�ter. La valeur par d�faut est 8192.
749
750local POST, POSTMULTI = r:parsebody(1024*1024)
751r:puts("Votre nom est : " .. POST['name'] or "Unknown")</pre>
752
753
754
755<pre class="prettyprint lang-lua">r:puts("bonjour", " le monde", "!") -- affichage dans le corps de la r�ponse</pre>
756
757
758<pre class="prettyprint lang-lua">r:write("une simple cha�ne") -- affichage dans le
759corps de la r�ponse</pre>
760
761
762<pre class="prettyprint lang-lua">r:escape_html("&lt;html&gt;test&lt;/html&gt;") -- Echappe le
763code HTML et renvoie le r�sultat</pre>
764
765
766<pre class="prettyprint lang-lua">r:base64_encode(string) -- Encode une cha�ne � l'aide du
767standard de codage Base64.
768
769local encoded = r:base64_encode("This is a test") -- returns VGhpcyBpcyBhIHRlc3Q=</pre>
770
771
772<pre class="prettyprint lang-lua">r:base64_decode(string) -- D�code une cha�ne cod�e en Base64.
773
774local decoded = r:base64_decode("VGhpcyBpcyBhIHRlc3Q=") -- returns 'This is a test'</pre>
775
776
777<pre class="prettyprint lang-lua">r:md5(string) -- Calcule et renvoie le condens� MD5 d'une cha�ne
778en mode binaire (binary safe).
779
780local hash = r:md5("This is a test") -- returns ce114e4501d2f4e2dcea3e17b546f339</pre>
781
782
783<pre class="prettyprint lang-lua">r:sha1(string) -- Calcule et renvoie le condens� SHA1 d'une cha�ne
784en mode binaire (binary safe).
785
786local hash = r:sha1("This is a test") -- returns a54d88e06612d820bc3be72877c74f257b561b19</pre>
787
788
789<pre class="prettyprint lang-lua">r:escape(string) -- Echappe une cha�ne de type URL.
790
791local url = "http://foo.bar/1 2 3 &amp; 4 + 5"
792local escaped = r:escape(url) -- renvoie 'http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5'</pre>
793
794
795<pre class="prettyprint lang-lua">r:unescape(string) -- D�s�chappe une cha�ne de type URL.
796
797local url = "http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5"
798local unescaped = r:unescape(url) -- renvoie 'http://foo.bar/1 2 3 &amp; 4 + 5'</pre>
799
800
801<pre class="prettyprint lang-lua">r:construct_url(string) -- Construit une URL � partir d'un URI
802
803local url = r:construct_url(r.uri)</pre>
804
805
806<pre class="prettyprint lang-lua">r.mpm_query(number) -- Interroge le serveur � propos de son
807module MPM via la requ�te ap_mpm_query.
808
809local mpm = r.mpm_query(14)
810if mpm == 1 then
811    r:puts("Ce serveur utilise le MPM Event")
812end</pre>
813
814
815<pre class="prettyprint lang-lua">r:expr(string) -- Evalue une cha�ne de type <a href="/expr.html">expr</a>.
816
817if r:expr("%{HTTP_HOST} =~ /^www/") then
818    r:puts("Ce nom d'h�te commence par www")
819end</pre>
820
821
822<pre class="prettyprint lang-lua">r:scoreboard_process(a) -- Interroge le serveur � propos du
823processus � la position <code>a</code>.
824
825local process = r:scoreboard_process(1)
826r:puts("Le serveur 1 a comme PID " .. process.pid)</pre>
827
828
829<pre class="prettyprint lang-lua">r:scoreboard_worker(a, b) -- Interroge le serveur � propos du
830thread <code>b</code>, dans le processus <code>a</code>.
831
832local thread = r:scoreboard_worker(1, 1)
833r:puts("L'ID du thread 1 du serveur 1 est " .. thread.tid .. " et son
834�tat est " .. thread.status)</pre>
835
836
837<pre class="prettyprint lang-lua">r:clock() -- Renvoie l'heure courante avec une pr�cision d'une
838microseconde.</pre>
839
840
841<pre class="prettyprint lang-lua">r:requestbody(filename) -- Lit et renvoie le corps d'une requ�te. Si
842'filename' est sp�cifi�, le corps de requ�te n'est pas renvoy�, mais
843sauvegard� dans le fichier correspondant.
844
845local input = r:requestbody()
846r:puts("Vous m'avez envoy� le corps de requ�te suivant :\n")
847r:puts(input)</pre>
848
849
850<pre class="prettyprint lang-lua">r:add_input_filter(filter_name) -- Ajoute le filtre en entr�e
851'filter_name'.</pre>
852
853
854<pre class="prettyprint lang-lua">r:module_info(module_name) -- Interroge le serveur � propos d'un
855module.
856
857local mod = r.module_info("mod_lua.c")
858if mod then
859    for k, v in pairs(mod.commands) do
860       r:puts( ("%s: %s\n"):format(k,v)) -- affiche toutes les directives impl�ment�es par ce module
861    end
862end</pre>
863
864
865<pre class="prettyprint lang-lua">r:loaded_modules() -- Renvoie une liste des modules charg�s par
866httpd.
867
868for k, module in pairs(r:loaded_modules()) do
869    r:puts("J'ai charg� le module " .. module .. "\n")
870end</pre>
871
872
873<pre class="prettyprint lang-lua">r:runtime_dir_relative(filename) -- G�n�re le nom d'un fichier run-time
874(par exemple la m�moire partag�e "file") relativement au r�pertoire de
875run-time.</pre>
876
877
878<pre class="prettyprint lang-lua">r:server_info() -- Renvoie une table contenant des informations
879� propos du serveur, comme le nom de l'ex�cutable httpd, le
880module mpm utilis�, etc...</pre>
881
882
883<pre class="prettyprint lang-lua">r:set_document_root(file_path) -- D�finit la racine des
884documents pour la requ�te � file_path.</pre>
885
886
887<pre class="prettyprint lang-lua">r:add_version_component(component_string) -- Ajoute un �l�ment �
888la banni�re du serveur.</pre>
889
890
891<pre class="prettyprint lang-lua">r:set_context_info(prefix, docroot) -- D�finit le pr�fixe et la
892racine des documents du contexte pour une requ�te.</pre>
893
894
895<pre class="prettyprint lang-lua">r:os_escape_path(file_path) -- Convertit un chemin du syst�me de
896fichiers en URL ind�pendamment du syst�me d'exploitation.</pre>
897
898
899<pre class="prettyprint lang-lua">r:escape_logitem(string) -- Echappe une cha�ne pour
900journalisation.</pre>
901
902
903<pre class="prettyprint lang-lua">r.strcmp_match(string, pattern) -- V�rifie si 'string' correspond �
904'pattern' via la fonction strcmp_match (GLOBs). Par exemple, est-ce que
905'www.example.com' correspond � '*.example.com' ?
906
907local match = r.strcmp_match("foobar.com", "foo*.com")
908if match then 
909    r:puts("foobar.com matches foo*.com")
910end</pre>
911
912
913<pre class="prettyprint lang-lua">r:set_keepalive() -- D�finit l'�tat de persistance d'une
914requ�te. Renvoie true dans la mesure du possible, false dans le
915cas contraire.</pre>
916
917
918<pre class="prettyprint lang-lua">r:make_etag() -- G�n�re et renvoie le etag pour la requ�te
919courante.</pre>
920
921
922<pre class="prettyprint lang-lua">r:send_interim_response(clear) -- Renvoie une r�ponse d'int�rim (1xx) au
923client. Si 'clear' est vrai, les en-t�tes disponibles seront envoy�s et
924effac�s.</pre>
925
926
927<pre class="prettyprint lang-lua">r:custom_response(status_code, string) -- G�n�re et d�finit une r�ponse
928personnalis�e pour un code d'�tat particulier. Le fonctionnement est
929tr�s proche de celui de la directive ErrorDocument.
930
931r:custom_response(404, "Baleted!")</pre>
932
933
934<pre class="prettyprint lang-lua">r.exists_config_define(string) -- V�rifie si une d�finition de
935configuration existe.
936
937if r.exists_config_define("FOO") then
938    r:puts("httpd a probablement �t� lanc� avec l'option -DFOO, ou FOO a
939    �t� d�fini dans la configuration")
940end</pre>
941
942
943<pre class="prettyprint lang-lua">r:state_query(string) -- Interroge le serveur � propos de son
944�tat.</pre>
945
946
947<pre class="prettyprint lang-lua">r:stat(filename [,wanted]) -- Ex�cute stat() sur un fichier, et renvoie
948une table contenant des informations � propos de ce fichier.
949
950local info = r:stat("/var/www/foo.txt")
951if info then
952    r:puts("Ce fichier existe et a �t� modifi� pour la derni�re fois � : " .. info.modified)
953end</pre>
954
955
956<pre class="prettyprint lang-lua">r:regex(string, pattern [,flags]) -- Ex�cute une recherche � base
957d'expression rationnelle sur une cha�ne, et renvoie les
958�ventuelles correspondances trouv�es.
959
960local matches = r:regex("foo bar baz", [[foo (\w+) (\S*)]])
961if matches then
962    r:puts("L'expression rationnelle correspond et le dernier mot
963    captur� ($2) est : " .. matches[2])
964end
965
966-- Exemple avec insensibilit� � la casse :
967local matches = r:regex("FOO bar BAz", [[(foo) bar]], 1)
968
969-- les drapeaux peuvent �tre une combibaison bit � bit de :
970-- 0x01: insensibilit� � la casse
971-- 0x02: recherche multiligne</pre>
972
973
974<pre class="prettyprint lang-lua">r.usleep(microsecondes) -- Interrompt l'ex�cution du script pendant le nombre de microsecondes sp�cifi�.</pre>
975
976
977<pre class="prettyprint lang-lua">r:dbacquire(dbType[, dbParams]) -- Acquiert une connexion � une
978base de donn�es et renvoie une classe database. Voir '<a href="#databases">Connectivit� aux bases de donn�es</a>' pour plus de
979d�tails.</pre>
980
981
982<pre class="prettyprint lang-lua">r:ivm_set("key", value) -- D�fini une variable Inter-VM avec une valeur sp�cifique.
983                        -- Ces valeurs sont conserv�es m�me si la VM est
984			-- arr�t�e ou non utilis�e, et ne doivent donc �tre
985			-- utilis�es que si MaxConnectionsPerChild &gt; 0.
986			-- Les valeurs peuvent �tre de type number, string
987			-- ou boolean et sont stock�es s�par�ment pour
988			-- chaque processus (elles ne seront donc pas d'une
989			-- grande utilit� si l'on utilise le mpm prefork).
990                        
991r:ivm_get("key")        -- Lit le contenu d'une variable d�finie via ivm_set. Renvoie
992			-- le contenu de la variable si elle existe, ou nil
993			-- dans le cas contraire.
994                        
995-- Voici un exemple de lecture/�criture qui sauvegarde une variable
996-- globale en dehors de la VM :
997function handle(r)
998    -- La premi�re VM qui effectue l'appel suivant n'obtiendra aucune
999    -- valeur, et devra la cr�er
1000    local foo = r:ivm_get("cached_data")
1001    if not foo then
1002        foo = do_some_calcs() -- simulation de valeurs de retour
1003        r:ivm_set("cached_data", foo) -- d�finition globale de la variable
1004    end
1005    r:puts("La donn�e en cache est : ", foo)
1006end</pre>
1007
1008<pre class="prettyprint lang-lua">r:htpassword(string [,algorithm [,cost]]) -- G�n�re un hash de mot de passe � partir d'une cha�ne.
1009                                          -- algorithm: 0 = APMD5 (d�faut), 1 = SHA, 2 = BCRYPT, 3 = CRYPT.
1010                                          -- cost: ne s'utilise qu'avec l'algorythme BCRYPT (d�faut = 5).</pre>
1011
1012
1013<pre class="prettyprint lang-lua">r:mkdir(dir [,mode]) -- Cr�e un r�pertoire et d�finit son mode via le param�tre optionnel mode.</pre>
1014
1015
1016<pre class="prettyprint lang-lua">r:mkrdir(dir [,mode]) -- Cr�e des r�pertoires de mani�re r�cursive et d�finit leur mode via le param�tre optionnel mode.</pre>
1017
1018
1019<pre class="prettyprint lang-lua">r:rmdir(dir) -- Supprime un r�pertoire.</pre>
1020
1021
1022<pre class="prettyprint lang-lua">r:touch(file [,mtime]) -- D�finit la date de modification d'un fichier � la date courante ou � la valeur optionnelle mtime en msec.</pre>
1023
1024
1025<pre class="prettyprint lang-lua">r:get_direntries(dir) -- Renvoie une table contenant toutes les entr�es de r�pertoires.
1026
1027-- Renvoie un chemin sous forme �clat�e en chemin, fichier, extension
1028function handle(r)
1029  local dir = r.context_document_root
1030  for _, f in ipairs(r:get_direntries(dir)) do
1031    local info = r:stat(dir .. "/" .. f)
1032    if info then
1033      local mtime = os.date(fmt, info.mtime / 1000000)
1034      local ftype = (info.filetype == 2) and "[dir] " or "[file]"
1035      r:puts( ("%s %s %10i %s\n"):format(ftype, mtime, info.size, f) )
1036    end
1037  end
1038end</pre>
1039
1040
1041<pre class="prettyprint lang-lua">r.date_parse_rfc(string) -- Interpr�te une cha�ne date/heure et renvoie l'�quivalent en secondes depuis epoche.</pre>
1042
1043
1044<pre class="prettyprint lang-lua">r:getcookie(key) -- Obtient un cookie HTTP</pre>
1045
1046
1047<pre class="prettyprint lang-lua">r:setcookie{
1048  key = [key],
1049  value = [value],
1050  expires = [expiry],
1051  secure = [boolean],
1052  httponly = [boolean],
1053  path = [path],
1054  domain = [domain]
1055} -- D�finit un cookie HTTP, par exemple :
1056
1057r:setcookie{
1058  key = "cookie1",
1059  value = "HDHfa9eyffh396rt",
1060  expires = os.time() + 86400,
1061  secure = true
1062}</pre>
1063
1064
1065<pre class="prettyprint lang-lua">r:wsupgrade() -- Met � jour une connexion vers les WebSockets si possible (et si demand�) :
1066if r:wsupgrade() then -- si la mise � jour est possible :
1067    r:wswrite("Bienvenue dans les websockets!") -- �crit quelque chose � l'intention du client
1068    r:wsclose()  -- Au revoir !
1069end</pre>
1070
1071
1072<pre class="prettyprint lang-lua">r:wsread() -- Lit un cadre de websocket depuis une connexion vers websocket mise � jour (voir ci-dessus) :
1073           
1074local line, isFinal = r:wsread() -- isFinal indique s'il s'agit du cadre final.
1075                                 -- dans le cas contraire, on peut lire les cadres suivants
1076r:wswrite("Vous avez �crit : " .. line)</pre>
1077
1078
1079<pre class="prettyprint lang-lua">r:wswrite(line) -- �crit un cadre vers un client WebSocket :
1080r:wswrite("Bonjour le Monde !")</pre>
1081
1082
1083<pre class="prettyprint lang-lua">r:wsclose() -- ferme une requ�te WebSocket et l'ach�ve pour httpd :
1084
1085if r:wsupgrade() then
1086    r:wswrite("Ecrire quelque chose : ")
1087    local line = r:wsread() or "nothing"
1088    r:wswrite("Vous avez �crit : " .. line);
1089    r:wswrite("Au revoir !")
1090    r:wsclose()
1091end</pre>
1092
1093
1094</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1095<div class="section">
1096<h2><a name="logging" id="logging">Fonctions de journalisation</a></h2>
1097
1098<pre class="prettyprint lang-lua">	-- exemples de messages de journalisation
1099	r:trace1("Ceci est un message de journalisation de niveau
1100	trace") -- les niveaux valides vont de trace1 � trace8 <br />
1101        r:debug("Ceci est un message de journalisation de niveau debug")<br />
1102        r:info("Ceci est un message de journalisation de niveau info")<br />
1103        r:notice("Ceci est un message de journalisation de niveau notice")<br />
1104        r:warn("Ceci est un message de journalisation de niveau warn")<br />
1105        r:err("Ceci est un message de journalisation de niveau err")<br />
1106        r:alert("Ceci est un message de journalisation de niveau alert")<br />
1107        r:crit("Ceci est un message de journalisation de niveau crit")<br />
1108        r:emerg("Ceci est un message de journalisation de niveau emerg")<br />
1109</pre>
1110
1111
1112</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1113<div class="section">
1114<h2><a name="apache2" id="apache2">Paquet apache2</a></h2>
1115<p>Le paquet nomm� <code>apache2</code> est fourni avec (au minimum) le
1116contenu suivant :</p>
1117<dl>
1118  <dt>apache2.OK</dt>
1119  <dd>Constante interne OK. Les gestionnaires renverront cette valeur
1120  s'ils ont trait� la requ�te.</dd>
1121  <dt>apache2.DECLINED</dt>
1122  <dd>Constante interne DECLINED. Les gestionnaires renverront cette
1123  valeur s'ils n'ont pas l'intention de traiter la requ�te.</dd>
1124  <dt>apache2.DONE</dt>
1125  <dd>Constante interne DONE.</dd>
1126  <dt>apache2.version</dt>
1127  <dd>Cha�ne contenant la version du serveur HTTP Apache</dd>
1128  <dt>apache2.HTTP_MOVED_TEMPORARILY</dt>
1129  <dd>Code d'�tat HTTP</dd>
1130  <dt>apache2.PROXYREQ_NONE, apache2.PROXYREQ_PROXY, apache2.PROXYREQ_REVERSE, apache2.PROXYREQ_RESPONSE</dt>
1131  <dd>Constantes internes utilis�es par <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code></dd>
1132  <dt>apache2.AUTHZ_DENIED, apache2.AUTHZ_GRANTED, apache2.AUTHZ_NEUTRAL, apache2.AUTHZ_GENERAL_ERROR, apache2.AUTHZ_DENIED_NO_USER</dt>
1133  <dd>constantes internes utilis�es par <code class="module"><a href="/mod/mod_authz_core.html">mod_authz_core</a></code></dd>
1134
1135</dl>
1136<p>Les autres codes d'�tat HTTP ne sont pas encore impl�ment�s.</p>
1137</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1138<div class="section">
1139<h2><a name="modifying_buckets" id="modifying_buckets">Modification de contenu avec les filtres lua</a></h2>
1140    
1141    <p>
1142    Les fonctions de filtrage impl�ment�es via les directives <code class="directive"><a href="#luainputfilter">LuaInputFilter</a></code> ou <code class="directive"><a href="#luaoutputfilter">LuaOutputFilter</a></code> sont con�ues comme des
1143    fonctions de 3�me phase non blocantes utilisant des sous-routines
1144    pour suspendre et reprendre l'ex�cution d'une fonction lorsque des
1145    paquets de donn�es sont envoy�s � la cha�ne de filtrage. La
1146    structure de base d'une telle fonction est :
1147    </p>
1148    <pre class="prettyprint lang-lua">function filter(r)
1149    -- Nous indiquons tout d'abord que nous sommes pr�ts � recevoir des
1150    -- blocs de donn�es.
1151    -- Avant ceci, nous pouvons d�finir notre environnement, tester
1152    -- certaines conditions, et, si nous le jugeons n�cessaire, refuser le
1153    -- filtrage d'une requ�te :
1154    if something_bad then
1155        return -- Le filtrage est saut�
1156    end
1157    -- Sans se pr�occuper des donn�es que nous devons �ventuellement ajouter, un arr�t est r�alis� ici.
1158    -- Noter que les filtres de sortie sont les seuls capables d'ajouter des �l�ments au d�but des donn�es.
1159    -- Les filtres en entr�e peuvent ajouter des �l�ments � la fin des donn�es au stade final.
1160
1161    coroutine.yield([optional header to be prepended to the content])
1162
1163    -- Apr�s cet arr�t, nous allons recevoir d'autres blocs de donn�es, un par un ;
1164    -- nous pouvons les traiter comme il nous pla�t et proc�der � la r�ponse.
1165    -- Ces blocs sont conserv�s dans la variable globale 'bucket', nous r�alisons donc
1166    -- une boucle pour v�rifier que 'bucket' n'est pas vide :
1167    while bucket ~= nil do
1168        local output = mangle(bucket) -- Do some stuff to the content
1169        coroutine.yield(output) -- Return our new content to the filter chain
1170    end
1171
1172    -- Une fois les blocs de donn�es �puis�s, 'bucket' est positionn� � une valeur vide ('nil'),
1173    -- ce qui va nous faire sortir de cette boucle et nous amener � l'�tape suivante.
1174    -- On peut ajouter ce qu'on veut � la fin des donn�es � cette �tape, qui constitue le dernier
1175    -- arr�t. Les filtres d'entr�e comme de sortie peuvent servir � ajouter des �l�ments � la fin
1176    --  des donn�es � cette �tape.
1177    coroutine.yield([optional footer to be appended to the content])
1178end</pre>
1179
1180</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1181<div class="section">
1182<h2><a name="databases" id="databases">Connectivit� aux bases de donn�es</a></h2>
1183    
1184    <p>Mod_lua impl�mente une fonctionnalit� basique de connexion aux
1185bases de donn�es permettant d'envoyer des requ�tes ou d'ex�cuter des
1186commandes aupr�s des moteurs de base de donn�es les plus courants
1187(mySQL, PostgreSQL, FreeTDS, ODBC, SQLite, Oracle), ainsi que mod_dbd.
1188    </p>
1189    <p>L'exemple suivant montre comment se connecter � une base de
1190donn�es et extraire des informations d'une table :</p>
1191    <pre class="prettyprint lang-lua">function handle(r)
1192    -- connexion � la base de donn�es
1193    local database, err = r:dbacquire("mysql", "server=localhost,user=someuser,pass=somepass,dbname=mydb")
1194    if not err then
1195        -- S�lection de certaines informations
1196        local results, err = database:select(r, "SELECT `name`, `age` FROM `people` WHERE 1")
1197        if not err then
1198            local rows = results(0) -- extrait tous les enregistrements en mode synchrone
1199            for k, row in pairs(rows) do
1200                r:puts( string.format("Name: %s, Age: %s&lt;br/&gt;", row[1], row[2]) )
1201            end
1202        else
1203            r:puts("Database query error: " .. err)
1204        end
1205        database:close()
1206    else
1207        r:puts("Connexion � la base de donn�es impossible : " .. err)
1208    end
1209end</pre>
1210
1211    <p>
1212    Pour utiliser <code class="module"><a href="/mod/mod_dbd.html">mod_dbd</a></code>, sp�cifiez
1213<code>mod_dbd</code> comme type de base de donn�es, ou laissez le champ
1214vide :
1215    </p>
1216    <pre class="prettyprint lang-lua">local database = r:dbacquire("mod_dbd")</pre>
1217
1218    <h3><a name="database_object" id="database_object">L'objet database et ses m�thodes</a></h3>
1219        
1220        <p>L'objet database renvoy� par <code>dbacquire</code> poss�de
1221les m�thodes suivantes :</p>
1222        <p><strong>S�lection normale et requ�te vers une base de donn�es
1223:</strong></p>
1224    <pre class="prettyprint lang-lua">-- Ex�cution d'une requ�te et renvoie du nombre d'enregistrements
1225affect�s :
1226local affected, errmsg = database:query(r, "DELETE FROM `tbl` WHERE 1")
1227
1228-- Ex�cution d'une requ�te et renvoie du r�sultat qui peut �tre utilis�
1229en mode synchrone ou asynchrone :
1230local result, errmsg = database:select(r, "SELECT * FROM `people` WHERE 1")</pre>
1231
1232        <p><strong>Utilisation de requ�tes pr�par�es (recommand�) :</strong></p>
1233    <pre class="prettyprint lang-lua">-- Cr�ation et ex�cution d'une requ�te pr�par�e :
1234local statement, errmsg = database:prepare(r, "DELETE FROM `tbl` WHERE `age` &gt; %u")
1235if not errmsg then
1236    local result, errmsg = statement:query(20) -- ex�cute la requ�te pour age &gt; 20
1237end
1238
1239-- Extrait une requ�te pr�par�e depuis une directive DBDPrepareSQL :
1240local statement, errmsg = database:prepared(r, "someTag")
1241if not errmsg then
1242    local result, errmsg = statement:select("John Doe", 123) -- injecte les valeurs "John Doe" et 123 dans la requ�te
1243end</pre>
1244
1245        <p><strong>Echappement de valeurs, fermeture de la base donn�es,
1246etc...</strong></p>
1247    <pre class="prettyprint lang-lua">-- Echappe une valeur pour pouvoir l'utiliser dans une requ�te :
1248local escaped = database:escape(r, [["'|blabla]])
1249
1250-- Ferme une base de donn�es et lib�re les liens vers cette derni�re :
1251database:close()
1252
1253-- V�rifie si une connexion � une base de donn�es est en service et
1254op�rationnelle :
1255local connected = database:active()</pre>
1256
1257    
1258    <h3><a name="result_sets" id="result_sets">Travail avec les jeux d'enregistrements renvoy�s par les requ�tes</a></h3>
1259    
1260    <p>Les jeux d'enregistrements renvoy�s par <code>db:select</code> ou par des
1261requ�tes pr�par�es cr��es par <code>db:prepare</code> permettent de
1262s�lectionner des enregistrements en mode synchrone ou
1263asynchrone, selon le nombre d'enregistrements sp�cifi� :<br />
1264    <code>result(0)</code> s�lectionne tous les enregistrements en mode
1265synchrone en renvoyant une table d'enregistrements.<br />
1266    <code>result(-1)</code> s�lectionne le prochain enregistrement disponible en
1267mode asynchrone.<br />
1268    <code>result(N)</code> s�lectionne l'enregistrement num�ro
1269<code>N</code> en mode asynchrone.
1270    </p>
1271    <pre class="prettyprint lang-lua">-- extrait un jeu d'enregistrements via une requ�te r�guli�re :
1272local result, err = db:select(r, "SELECT * FROM `tbl` WHERE 1")
1273
1274local rows = result(0) -- s�lectionne tous les enregistrements en mode synchrone
1275local row = result(-1) -- s�lectionne le prochain enregistrement disponible en mode asynchrone
1276local row = result(1234) -- s�lectionne l'enregistrement 1234 en mode asynchrone
1277local row = result(-1, true) -- Lit l'enregistrement suivant en utilisant les noms d'enregistrements comme index.</pre>
1278
1279    <p>Il est possible de construire une fonction qui renvoie une
1280fonction it�rative permettant de traiter tous les enregistrement en mode
1281synchrone ou asynchrone selon la valeur de l'argument async :
1282    </p>
1283    <pre class="prettyprint lang-lua">function rows(resultset, async)
1284    local a = 0
1285    local function getnext()
1286        a = a + 1
1287        local row = resultset(-1)
1288        return row and a or nil, row
1289    end
1290    if not async then
1291        return pairs(resultset(0))
1292    else
1293        return getnext, self
1294    end
1295end
1296
1297local statement, err = db:prepare(r, "SELECT * FROM `tbl` WHERE `age` &gt; %u")
1298if not err then
1299     -- s�lectionne des enregistrements en mode asynchrone :
1300    local result, err = statement:select(20)
1301    if not err then
1302        for index, row in rows(result, true) do
1303            ....
1304        end
1305    end
1306
1307     -- s�lectionne des enregistrements en mode synchrone :
1308    local result, err = statement:select(20)
1309    if not err then
1310        for index, row in rows(result, false) do
1311            ....
1312        end
1313    end
1314end</pre>
1315
1316    
1317    <h3><a name="closing_databases" id="closing_databases">Fermeture d'une connexion � une base de donn�es</a></h3>
1318        
1319
1320    <p>Lorsqu'elles ne sont plus utilis�es, les connexions aux bases de
1321donn�es doivent �tre ferm�es avec <code>database:close()</code>. Si vous
1322ne les fermez pas manuellement, mod_lua les fermera peut-�tre en tant
1323que r�sidus collect�s, mais si ce n'est pas le cas, vous pouvez finir
1324pas avoir trop de connexions vers la base de donn�es inutilis�es. Les
1325deux mesures suivantes sont pratiquement identiques :
1326    </p>
1327    <pre class="prettyprint lang-lua">-- M�thode 1 : fermeture manuelle de la connexion
1328local database = r:dbacquire("mod_dbd")
1329database:close() -- c'est tout
1330
1331-- M�thode 2 : on laisse le collecteur de r�sidus la fermer
1332local database = r:dbacquire("mod_dbd")
1333database = nil -- on coupe le lien
1334collectgarbage() -- fermeture de la connexion par le collecteur de r�sidus</pre>
1335
1336    
1337    <h3><a name="database_caveat" id="database_caveat">Pr�cautions � prendre lorsque l'on travaille avec les bases
1338de donn�es</a></h3>
1339    
1340    <p>Bien que les fonctions <code>query</code> et <code>run</code>
1341soient toujours disponibles, il est recommand� d'utiliser des requ�tes
1342pr�par�es chaque fois que possible, afin d'une part d'optimiser les
1343performances (si votre connexion reste longtemps en vie), et d'autre part
1344minimiser le risque d'attaques par injection SQL. Les fonctions
1345<code>run</code> et <code>query</code> ne doivent �tre utilis�es que
1346lorsque la requ�te ne contient pas de variables (requ�te statique). Dans
1347le cas des requ�tes dynamiques, utilisez <code>db:prepare</code> ou
1348<code>db:prepared</code>.
1349    </p>
1350    
1351
1352</div>
1353<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1354<div class="directive-section"><h2><a name="LuaAuthzProvider" id="LuaAuthzProvider">LuaAuthzProvider</a> <a name="luaauthzprovider" id="luaauthzprovider">Directive</a></h2>
1355<table class="directive">
1356<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Branche une fonction fournisseur d'autorisation dans <code class="module"><a href="/mod/mod_authz_core.html">mod_authz_core</a></code>
1357</td></tr>
1358<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaAuthzProvider provider_name /path/to/lua/script.lua function_name</code></td></tr>
1359<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
1360<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1361<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1362<tr><th><a href="directive-dict.html#Compatibility">Compatibilit�:</a></th><td>Disponible depuis la version 2.4.3 du serveur HTTP Apache</td></tr>
1363</table>
1364<p>Lorsqu'une fonction lua a �t� enregistr�e en tant que fournisseur
1365d'autorisation, elle peut �tre appel�e via la directive <code class="directive"><a href="/mod/mod_authz_core.html#require">Require</a></code> :</p>
1366
1367
1368<pre class="prettyprint lang-config">LuaRoot /usr/local/apache2/lua
1369LuaAuthzProvider foo authz.lua authz_check_foo
1370&lt;Location /&gt;
1371  Require foo johndoe
1372&lt;/Location&gt;</pre>
1373
1374<pre class="prettyprint lang-lua">require "apache2"
1375function authz_check_foo(r, who)
1376    if r.user ~= who then return apache2.AUTHZ_DENIED
1377    return apache2.AUTHZ_GRANTED
1378end</pre>
1379
1380
1381
1382</div>
1383<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1384<div class="directive-section"><h2><a name="LuaCodeCache" id="LuaCodeCache">LuaCodeCache</a> <a name="luacodecache" id="luacodecache">Directive</a></h2>
1385<table class="directive">
1386<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure le cache de code compil�.</td></tr>
1387<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaCodeCache stat|forever|never</code></td></tr>
1388<tr><th><a href="directive-dict.html#Default">D�faut:</a></th><td><code>LuaCodeCache stat</code></td></tr>
1389<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1390<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1391<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1392<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1393</table><p>
1394    Cette directive permet de d�finir le comportement du cache de code
1395    en m�moire. La valeur par d�faut est stat ; dans ce cas, le script
1396    du niveau le plus haut (et pas les scripts inclus) est v�rifi� �
1397    chaque fois que ce fichier est n�cessaire, et est recharg� si la
1398    date de modification est plus r�cente que celle du script d�j�
1399    charg�. Les autres valeurs permettent respectivement de garder le
1400    fichier en cache perp�tuellement (forever - jamais v�rifi� ni
1401    remplac�), ou de ne jamais le mettre en cache (never).</p>
1402
1403    <p>En g�n�ral, les valeurs stat et forever sont utilis�es pour un
1404    serveur en production, et les valeurs stat ou never pour un serveur
1405    en d�veloppement.</p>
1406
1407    <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config">LuaCodeCache stat
1408LuaCodeCache forever
1409LuaCodeCache never</pre>
1410</div>
1411
1412
1413</div>
1414<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1415<div class="directive-section"><h2><a name="LuaHookAccessChecker" id="LuaHookAccessChecker">LuaHookAccessChecker</a> <a name="luahookaccesschecker" id="luahookaccesschecker">Directive</a></h2>
1416<table class="directive">
1417<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entr�e pour la phase access_checker du
1418traitement de la requ�te</td></tr>
1419<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookAccessChecker  /chemin/vers/lua/script.lua  hook_function_name [early|late]</code></td></tr>
1420<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1421<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1422<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1423<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1424<tr><th><a href="directive-dict.html#Compatibility">Compatibilit�:</a></th><td>Le troisi�me argument optionnel est disponible depuis la
1425version 2.3.15 du serveur HTTP Apache.</td></tr>
1426</table>
1427<p>Ajoute votre fonction d'accroche � la phase access_checker. Une
1428fonction d'accroche access checker renvoie en g�n�ral OK, DECLINED, ou
1429HTTP_FORBIDDEN.</p>
1430<div class="note"><h3>Ordonnancement</h3><p>Les arguments optionnels
1431   "early" ou "late" permettent de contr�ler le moment auquel ce script
1432   s'ex�cute par rapport aux autres modules.</p></div>
1433
1434</div>
1435<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1436<div class="directive-section"><h2><a name="LuaHookAuthChecker" id="LuaHookAuthChecker">LuaHookAuthChecker</a> <a name="luahookauthchecker" id="luahookauthchecker">Directive</a></h2>
1437<table class="directive">
1438<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entr�e pour la phase auth_checker du
1439traitement de la requ�te</td></tr>
1440<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookAuthChecker  /chemin/vers/lua/script.lua hook_function_name [early|late]</code></td></tr>
1441<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1442<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1443<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1444<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1445<tr><th><a href="directive-dict.html#Compatibility">Compatibilit�:</a></th><td>Le troisi�me argument optionnel est disponible depuis la
1446version 2.3.15 du serveur HTTP Apache.</td></tr>
1447</table>
1448<p>Invoque une fonction lua au cours de la phase auth_checker du
1449traitement de la requ�te. Cette directive peut s'utiliser pour
1450impl�menter une v�rification arbitraire de l'authentification et de
1451l'autorisation. Voici un exemple tr�s simple :
1452</p>
1453<pre class="prettyprint lang-lua">require 'apache2'
1454
1455-- fonction d'accroche authcheck fictive
1456-- Si la requ�te ne contient aucune donn�e d'authentification, l'en-t�te
1457-- de la r�ponse est d�fini et un code 401 est renvoy� afin de demander au
1458-- navigateur d'effectuer une authentification basique. Si la requ�te
1459-- comporte des donn�es d'authentification, elles ne sont pas vraiment
1460-- consult�es, mais on admet la prise en compte de l'utilisateur 'foo' et
1461-- on la valide. On v�rifie ensuite si l'utilisateur est bien 'foo' et on
1462-- accepte la requ�te.
1463function authcheck_hook(r)
1464
1465   -- recherche des informations d'authentification
1466   auth = r.headers_in['Authorization']
1467   if auth ~= nil then
1468     -- d�finition d'un utilisateur par d�faut
1469     r.user = 'foo'
1470   end
1471
1472   if r.user == nil then
1473      r:debug("authcheck: user is nil, returning 401")
1474      r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
1475      return 401
1476   elseif r.user == "foo" then
1477      r:debug('user foo: OK')
1478   else
1479      r:debug("authcheck: user='" .. r.user .. "'")
1480      r.err_headers_out['WWW-Authenticate'] = 'Basic realm="WallyWorld"'
1481      return 401
1482   end
1483   return apache2.OK
1484end</pre>
1485
1486<div class="note"><h3>Ordonnancement</h3><p>Les arguments optionnels
1487   "early" ou "late" permettent de contr�ler le moment auquel ce script
1488   s'ex�cute par rapport aux autres modules.</p></div>
1489
1490</div>
1491<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1492<div class="directive-section"><h2><a name="LuaHookCheckUserID" id="LuaHookCheckUserID">LuaHookCheckUserID</a> <a name="luahookcheckuserid" id="luahookcheckuserid">Directive</a></h2>
1493<table class="directive">
1494<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entr�e pour la phase check_user_id du
1495traitement de la requ�te</td></tr>
1496<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookCheckUserID  /chemin/vers/lua/script.lua hook_function_name [early|late]</code></td></tr>
1497<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1498<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1499<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1500<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1501<tr><th><a href="directive-dict.html#Compatibility">Compatibilit�:</a></th><td>Le troisi�me argument optionnel est disponible depuis la
1502version 2.3.15 du serveur HTTP Apache.</td></tr>
1503</table><p>...</p>
1504   <div class="note"><h3>Ordonnancement</h3><p>Les arguments optionnels
1505   "early" ou "late" permettent de contr�ler le moment auquel ce script
1506   s'ex�cute par rapport aux autres modules.</p></div>
1507
1508</div>
1509<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1510<div class="directive-section"><h2><a name="LuaHookFixups" id="LuaHookFixups">LuaHookFixups</a> <a name="luahookfixups" id="luahookfixups">Directive</a></h2>
1511<table class="directive">
1512<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entr�e pour la phase de correction du
1513traitement de la requ�te</td></tr>
1514<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookFixups  /chemin/vers/lua/script.lua hook_function_name</code></td></tr>
1515<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1516<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1517<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1518<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1519</table>
1520<p>
1521    Idem LuaHookTranslateName, mais s'ex�cute durant la phase de
1522    correction.
1523</p>
1524
1525</div>
1526<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1527<div class="directive-section"><h2><a name="LuaHookInsertFilter" id="LuaHookInsertFilter">LuaHookInsertFilter</a> <a name="luahookinsertfilter" id="luahookinsertfilter">Directive</a></h2>
1528<table class="directive">
1529<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entr�e pour la phase insert_filter du
1530traitement de la requ�te</td></tr>
1531<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookInsertFilter  /chemin/vers/lua/script.lua hook_function_name</code></td></tr>
1532<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1533<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1534<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1535<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1536</table><p>Non encore impl�ment�</p>
1537</div>
1538<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1539<div class="directive-section"><h2><a name="LuaHookLog" id="LuaHookLog">LuaHookLog</a> <a name="luahooklog" id="luahooklog">Directive</a></h2>
1540<table class="directive">
1541<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Permet une insertion dans la phase de journalisation du
1542traitement d'une requ�te</td></tr>
1543<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookLog  /path/to/lua/script.lua log_function_name</code></td></tr>
1544<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1545<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1546<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1547<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1548</table>
1549<p>
1550    Ce dispositif d'insertion simple permet d'ex�cuter une fonction
1551    lorsque httpd entre dans la phase de journalisation du traitement
1552    d'une requ�te. Vous pouvez ainsi ajouter des donn�es � vos propres
1553    entr�es de journalisation, manipuler les entr�es du journal standard
1554    avant leur enregistrement ou emp�cher l'enregistrement d'une entr�e
1555    dans le journal. Pour emp�cher l'enregistrement normal des entr�es
1556    du journal, renvoyez simplement <code>apache2.DONE</code> dans votre
1557    gestionnaire de journalisation, ou au contraire, renvoyez
1558    <code>apache2.OK</code> pour que httpd effectue une journalisation
1559    normale.
1560</p>
1561<p>Exemple :</p>
1562<pre class="prettyprint lang-config">LuaHookLog /path/to/script.lua logger</pre>
1563
1564<pre class="prettyprint lang-lua">-- /path/to/script.lua --
1565function logger(r)
1566    -- on joue � pile ou face :
1567    -- Si on obtient 1, on �crit dans notre propre journal Lua et on dit
1568    -- � httpd de ne pas enregistrer d'entr�e dans le journal standard..
1569    -- Si on obtient 2, on nettoie un peu les donn�es avant que httpd ne
1570    -- les enregistre dans le journal standard.
1571
1572    if math.random(1,2) == 1 then
1573        -- On effectue notre propre journalisation et le journal
1574	-- standard n'est pas aliment�
1575        local f = io.open("/foo/secret.log", "a")
1576        if f then
1577            f:write("Quelque chose de secret est arriv� � " .. r.uri .. "\n")
1578            f:close()
1579        end
1580        return apache2.DONE -- On dit � httpd de ne rien enregistrer
1581				--dans le journal standard
1582    else
1583        r.uri = r.uri:gsub("somesecretstuff", "") -- nettoie les donn�es
1584        return apache2.OK -- et httpd doit alors les enregistrer.
1585    end
1586end</pre>
1587
1588
1589</div>
1590<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1591<div class="directive-section"><h2><a name="LuaHookMapToStorage" id="LuaHookMapToStorage">LuaHookMapToStorage</a> <a name="luahookmaptostorage" id="luahookmaptostorage">Directive</a></h2>
1592<table class="directive">
1593<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entr�e pour la phase map_to_storage du
1594traitement de la requ�te</td></tr>
1595<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookMapToStorage  /chemin/vers/lua/script.lua hook_function_name</code></td></tr>
1596<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1597<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1598<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1599<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1600</table>
1601    <p>Identique � la directive
1602    <code class="directive">LuaHookTranslateName</code>, mais s'ex�cute � la
1603    phase map-to-storage du traitement de la requ�te. Les modules comme
1604    mod_cache agissent pendant cette phase, ce qui permet de pr�senter
1605    un exemple int�ressant de ce que l'on peut faire ici :</p>
1606    <pre class="prettyprint lang-config">LuaHookMapToStorage /path/to/lua/script.lua check_cache</pre>
1607
1608    <pre class="prettyprint lang-lua">require"apache2"
1609cached_files = {}
1610
1611function read_file(filename)
1612    local input = io.open(filename, "r")
1613    if input then
1614        local data = input:read("*a")
1615        cached_files[filename] = data
1616        file = cached_files[filename]
1617        input:close()
1618    end
1619    return cached_files[filename]
1620end
1621
1622function check_cache(r)
1623    if r.filename:match("%.png$") then -- Only match PNG files
1624        local file = cached_files[r.filename] -- Check cache entries
1625        if not file then
1626            file = read_file(r.filename)  -- Read file into cache
1627        end
1628        if file then -- If file exists, write it out
1629            r.status = 200
1630            r:write(file)
1631            r:info(("Sent %s to client from cache"):format(r.filename))
1632            return apache2.DONE -- skip default handler for PNG files
1633        end
1634    end
1635    return apache2.DECLINED -- If we had nothing to do, let others serve this.
1636end</pre>
1637
1638
1639    
1640</div>
1641<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1642<div class="directive-section"><h2><a name="LuaHookTranslateName" id="LuaHookTranslateName">LuaHookTranslateName</a> <a name="luahooktranslatename" id="luahooktranslatename">Directive</a></h2>
1643<table class="directive">
1644<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entr�e � la phase du nom de
1645traduction du traitement de la requ�te</td></tr>
1646<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookTranslateName  /chemin/vers/lua/script.lua  nom_fonction_hook [early|late]</code></td></tr>
1647<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
1648<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1649<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1650<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1651<tr><th><a href="directive-dict.html#Compatibility">Compatibilit�:</a></th><td>Le troisi�me argument optionnel est disponible depuis la
1652version 2.3.15 du serveur HTTP Apache.</td></tr>
1653</table><p>
1654    Cette directive permet d'ajouter un point d'entr�e (�
1655    APR_HOOK_MIDDLE) � la phase du nom de traduction du traitement de la
1656    requ�te. La fonction hook accepte un seul argument, le request_rec,
1657    et doit renvoyer un code d'�tat qui est soit un code d'erreur HTTP,
1658    ou une constante d�finie dans le module apache2 :  apache2.OK,
1659    apache2.DECLINED, ou apache2.DONE.</p>
1660
1661    <p>Pour ceux qui ne sont pas familiers avec les points d'entr�e
1662    (hook), en gros, chaque hook sera invoqu� jusqu'� ce que l'un
1663    d'entre eux renvoie apache2.OK. Si un hook n'effectuer pas la
1664    traduction, il doit juste renvoyer apache2.DECLINED. Si le
1665    traitement de la requ�te doit �tre interrompu, la valeur renvoy�e
1666    doit �tre apache2.DONE.</p>
1667
1668    <p>Exemple :</p>
1669
1670<pre class="prettyprint lang-config"># httpd.conf
1671LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper</pre>
1672
1673
1674<pre class="prettyprint lang-lua">-- /scripts/conf/hooks.lua --
1675require "apache2"
1676function silly_mapper(r)
1677    if r.uri == "/" then
1678        r.filename = "/var/www/home.lua"
1679        return apache2.OK
1680    else
1681        return apache2.DECLINED
1682    end
1683end</pre>
1684
1685
1686   <div class="note"><h3>Contexte</h3><p>Cette directive ne peut �tre
1687   utilis�e ni � l'int�rieur d'une section <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code> ou <code class="directive"><a href="/mod/core.html#files">&lt;Files&gt;</a></code>, ni dans un fichier htaccess.</p></div>
1688
1689   <div class="note"><h3>Ordonnancement</h3><p>Les arguments optionnels
1690   "early" ou "late" permettent de contr�ler le moment auquel ce script
1691   s'ex�cute par rapport aux autres modules.</p></div>
1692
1693</div>
1694<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1695<div class="directive-section"><h2><a name="LuaHookTypeChecker" id="LuaHookTypeChecker">LuaHookTypeChecker</a> <a name="luahooktypechecker" id="luahooktypechecker">Directive</a></h2>
1696<table class="directive">
1697<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entr�e pour la phase type_checker du
1698traitement de la requ�te</td></tr>
1699<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaHookTypeChecker  /chemin/vers/lua/script.lua hook_function_name</code></td></tr>
1700<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1701<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1702<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1703<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1704</table><p>...</p>
1705</div>
1706<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1707<div class="directive-section"><h2><a name="LuaInherit" id="LuaInherit">LuaInherit</a> <a name="luainherit" id="luainherit">Directive</a></h2>
1708<table class="directive">
1709<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Contr�le la mani�re dont les sections de configuration
1710parentes sont fusionn�es dans les enfants</td></tr>
1711<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaInherit none|parent-first|parent-last</code></td></tr>
1712<tr><th><a href="directive-dict.html#Default">D�faut:</a></th><td><code>LuaInherit parent-first</code></td></tr>
1713<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1714<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1715<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1716<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1717<tr><th><a href="directive-dict.html#Compatibility">Compatibilit�:</a></th><td>Versions 2.4.0 et sup�rieures</td></tr>
1718</table><p>Par d�faut, si des directives LuaHook* se trouvent dans
1719    des sections de configuration Directory ou Location qui se
1720    chevauchent, les scripts
1721    d�finis dans les sections les plus sp�cifiques s'ex�cutent
1722    <em>apr�s</em> ceux d�finis dans les sections plus g�n�riques
1723    (LuaInherit parent-first). Vous pouvez inverser cet ordre, ou faire
1724    en sorte que le contexte parent ne s'applique pas du tout.</p>
1725
1726    <p>Jusqu'aux versions 2.3.x, le comportement par d�faut consistait �
1727    ignorer les directives LuaHook* situ�es dans les sections de
1728    configuration parentes.</p>
1729</div>
1730<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1731<div class="directive-section"><h2><a name="LuaInputFilter" id="LuaInputFilter">LuaInputFilter</a> <a name="luainputfilter" id="luainputfilter">Directive</a></h2>
1732<table class="directive">
1733<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit une fonction Lua pour le filtrage en entr�e</td></tr>
1734<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaInputFilter filter_name /path/to/lua/script.lua function_name</code></td></tr>
1735<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
1736<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1737<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1738<tr><th><a href="directive-dict.html#Compatibility">Compatibilit�:</a></th><td>Disponible depuis la version 2.5.0 du serveur HTTP
1739Apache</td></tr>
1740</table>
1741<p>Cette directive permet d'ajouter un filtre en entr�e sous la forme
1742d'une fonction Lua. A l'instar des filtres en sorties, les filtres en
1743entr�e fonctionnent comme des sous-routines, intervenant dans un premier
1744temps avant l'envoi du contenu des tampons, puis chaque fois qu'un
1745paquet de donn�es doit �tre transmis � la cha�ne, et �ventuellement
1746produisant toute donn�e � ajouter aux donn�es en entr�e. La variable
1747globale <code>bucket</code> contient les paquets de donn�es tels qu'ils
1748sont transmis au script Lua :
1749</p>
1750
1751<pre class="prettyprint lang-config">LuaInputFilter myInputFilter /www/filter.lua input_filter
1752&lt;FilesMatch "\.lua&gt;
1753  SetInputFilter myInputFilter
1754&lt;/FilesMatch&gt;</pre>
1755
1756<pre class="prettyprint lang-lua">--[[
1757    Exemple de filtre en entr�e qui convertit toutes les donn�es POST en
1758    majuscules.
1759]]--
1760function input_filter(r)
1761    print("luaInputFilter called") -- debug print
1762    coroutine.yield() -- Yield and wait for buckets
1763    while bucket do -- For each bucket, do...
1764        local output = string.upper(bucket) -- Convertit toutes les donn�es POST en majuscules
1765        coroutine.yield(output) -- Envoie les donn�es trait�es � la cha�ne
1766    end
1767    -- plus aucune donn�e � traiter.
1768    coroutine.yield("&amp;filterSignature=1234") -- Ajoute une signature � la fin
1769end</pre>
1770
1771<p>
1772Le filtre en entr�e peut interdire ou sauter un filtre s'il est
1773consid�r� comme ind�sirable :
1774</p>
1775<pre class="prettyprint lang-lua">function input_filter(r)
1776    if not good then
1777        return -- Emp�che tout simplement le filtrage et transmet le contenu original
1778    end
1779    coroutine.yield() -- attend des paquets de donn�es
1780    ... -- insert les filtres ici
1781end</pre>
1782
1783<p>
1784Voir "<a href="#modifying_buckets">Modification de contenu avec les
1785filtres Lua</a>" pour plus de d�tails.
1786</p>
1787
1788</div>
1789<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1790<div class="directive-section"><h2><a name="LuaMapHandler" id="LuaMapHandler">LuaMapHandler</a> <a name="luamaphandler" id="luamaphandler">Directive</a></h2>
1791<table class="directive">
1792<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Met en correspondance un chemin avec un gestionnaire lua</td></tr>
1793<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaMapHandler modele-uri /chemin/vers/lua/script.lua
1794[nom-fonction]</code></td></tr>
1795<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1796<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1797<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1798<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1799</table>
1800    <p>Cette directive permet de faire correspondre un mod�le d'uri avec
1801    une fonction de gestionnaire situ�e dans un fichier sp�cifique. Elle
1802    utilise les expressions rationnelles PCRE pour mettre en
1803    correspondance l'uri, et supporte les groupes de correspondance
1804    d'interpolation dans le chemin du fichier et le nom de la fonction.
1805    Prenez garde aux probl�mes de s�curit� en �crivant vos expressions
1806    rationnelles.</p>
1807   <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config">LuaMapHandler /(\w+)/(\w+) /scripts/$1.lua handle_$2</pre>
1808</div>
1809        <p>Cette directive va faire correspondre des uri comme
1810	/photos/show?id=9 au fichier /scripts/photos.lua, et invoquera la
1811	fonction de gestionnaire handle_show au niveau de la vm lua
1812	apr�s chargement de ce fichier.</p>
1813
1814<pre class="prettyprint lang-config">LuaMapHandler /bingo /scripts/wombat.lua</pre>
1815
1816        <p>Cette directive invoquera la fonction "handle" qui est la
1817	valeur par d�faut si aucun nom de fonction sp�cifique n'est
1818	sp�cifi�.</p>
1819
1820</div>
1821<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1822<div class="directive-section"><h2><a name="LuaOutputFilter" id="LuaOutputFilter">LuaOutputFilter</a> <a name="luaoutputfilter" id="luaoutputfilter">Directive</a></h2>
1823<table class="directive">
1824<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit une fonction Lua pour le filtrage de contenu en
1825sortie</td></tr>
1826<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaOutputFilter filter_name /path/to/lua/script.lua function_name</code></td></tr>
1827<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur</td></tr>
1828<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1829<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1830<tr><th><a href="directive-dict.html#Compatibility">Compatibilit�:</a></th><td>Disponible � partir de la version 2.5.0 du serveur HTTP
1831Apache</td></tr>
1832</table>
1833<p>&gt;Cette directive permet d'ajouter un filtre en sortie sous la forme
1834d'une fonction Lua. A l'instar des filtres en sorties, les filtres en
1835entr�e fonctionnent comme des sous-routines, intervenant dans un premier
1836temps avant l'envoi du contenu des tampons, puis chaque fois qu'un
1837paquet de donn�es doit �tre transmis � la cha�ne, et �ventuellement
1838produisant toute donn�e � ajouter aux donn�es en sortie. La variable
1839globale <code>bucket</code> contient les paquets de donn�es tels qu'ils
1840sont transmis au script Lua :
1841</p>
1842
1843<pre class="prettyprint lang-config">LuaOutputFilter myOutputFilter /www/filter.lua output_filter
1844&lt;FilesMatch "\.lua&gt;
1845  SetOutputFilter myOutputFilter
1846&lt;/FilesMatch&gt;</pre>
1847
1848<pre class="prettyprint lang-lua">--[[
1849    Exemple de filtre en sortie qui �chappe toutes les entit�s HTML en
1850    sortie
1851]]--
1852function output_filter(r)
1853    coroutine.yield("(Handled by myOutputFilter)&lt;br/&gt;\n") -- Ajoute des donn�es au d�but de la sortie, puis attend des paquets de donn�es � traiter
1854    while bucket do -- Pour chaque paquet, faire ...
1855        local output = r:escape_html(bucket) -- Echappe les donn�es en sortie
1856        coroutine.yield(output) -- Envoie les donn�es trait�es � la cha�ne
1857    end
1858    -- plus aucune donn�e � traiter.
1859end</pre>
1860
1861<p>
1862Comme les filres en entr�e, le filtre en sortie peut interdire ou sauter un filtre s'il est
1863consid�r� comme ind�sirable :
1864</p>
1865<pre class="prettyprint lang-lua">function output_filter(r)
1866    if not r.content_type:match("text/html") then
1867        return -- Emp�che tout simplement le filtrage et transmet le contenu original
1868    end
1869    coroutine.yield() -- attend des paquets de donn�es
1870    ... -- insert les filtres ici
1871end</pre>
1872
1873<div class="note"><h3>Les filtres Lua avec <code class="module"><a href="/mod/mod_filter.html">mod_filter</a></code></h3>
1874<p>Lorsqu'on utilise un filtre Lua comme fournisseur sous-jacent via la
1875directive <code class="directive"><a href="/mod/mod_filter.html#filterprovider">FilterProvider</a></code>, le
1876filtrage ne fonctionnera que si <var>filter-name</var> est identique �
1877<var>provider-name</var>.
1878</p> </div>
1879
1880<p>
1881Voir "<a href="#modifying_buckets">Modification de contenu avec les
1882filtres Lua</a>" pour plus de d�tails.
1883</p>
1884
1885
1886</div>
1887<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1888<div class="directive-section"><h2><a name="LuaPackageCPath" id="LuaPackageCPath">LuaPackageCPath</a> <a name="luapackagecpath" id="luapackagecpath">Directive</a></h2>
1889<table class="directive">
1890<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute un r�pertoire au package.cpath de lua</td></tr>
1891<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaPackageCPath /chemin/vers/include/?.soa</code></td></tr>
1892<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1893<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1894<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1895<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1896</table>
1897    <p>Cette directive permet d'ajouter un chemin � la liste des chemins
1898    de recherche des biblioth�ques partag�es de lua. Ceci modifie le
1899    package.cpath dans les vms lua.</p>
1900
1901
1902</div>
1903<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1904<div class="directive-section"><h2><a name="LuaPackagePath" id="LuaPackagePath">LuaPackagePath</a> <a name="luapackagepath" id="luapackagepath">Directive</a></h2>
1905<table class="directive">
1906<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute un r�pertoire au package.path de lua</td></tr>
1907<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaPackagePath /chemin/vers/include/?.lua</code></td></tr>
1908<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1909<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1910<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1911<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1912</table><p>Cette directive permet d'ajouter un chemin � la liste des
1913    chemins de recherche du module lua. Elle suit les m�mes conventions
1914    que lua. Ceci modifie le package.path dans les vms lua.</p>
1915
1916    <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config">LuaPackagePath /scripts/lib/?.lua
1917LuaPackagePath /scripts/lib/?/init.lua</pre>
1918</div>
1919
1920</div>
1921<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1922<div class="directive-section"><h2><a name="LuaQuickHandler" id="LuaQuickHandler">LuaQuickHandler</a> <a name="luaquickhandler" id="luaquickhandler">Directive</a></h2>
1923<table class="directive">
1924<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fournit un point d'entr�e pour la gestion rapide du
1925traitement de la requ�te</td></tr>
1926<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaQuickHandler /path/to/script.lua hook_function_name</code></td></tr>
1927<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1928<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1929<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1930<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1931</table>
1932    <p>Cette phase s'ex�cute juste apr�s l'attribution de la requ�te �
1933    un serveur virtuel, et permet d'effectuer certains traitements avant
1934    le d�roulement des autres phases, ou de servir une requ�te sans
1935    avoir � la traduire, l'associer � un espace de stockage, etc...
1936    Comme cette phase s'ex�cute avant toute autre, les directives telles
1937    que <code class="directive"><a href="/mod/core.html#location">&lt;Location&gt;</a></code> ou
1938    <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code> ne
1939    sont pas encore prises en compte, car Les URI n'ont pas encore �t�
1940    enti�rement interpr�t�s.
1941    </p>
1942   <div class="note"><h3>Contexte</h3><p>Cette directive ne peut �tre
1943   utilis�e ni � l'int�rieur d'une section <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code> ou <code class="directive"><a href="/mod/core.html#files">&lt;Files&gt;</a></code>, ni dans un fichier htaccess.</p></div>
1944
1945</div>
1946<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1947<div class="directive-section"><h2><a name="LuaRoot" id="LuaRoot">LuaRoot</a> <a name="luaroot" id="luaroot">Directive</a></h2>
1948<table class="directive">
1949<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sp�cifie le chemin de base pour la r�solution des chemins
1950relatifs dans les directives de mod_lua</td></tr>
1951<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaRoot /chemin/vers/un/r�pertoire</code></td></tr>
1952<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1953<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1954<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1955<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1956</table>
1957    <p>Cette directive permet de sp�cifier le chemin de base qui sera
1958    utilis� pour �valuer tous les chemins relatifs dans mod_lua. En
1959    l'absence de cette directive, les chemins relatifs sont r�solus par
1960    rapport au r�pertoire de travail courant, ce qui ne sera pas
1961    toujours appropri� pour un serveur.</p>
1962
1963</div>
1964<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
1965<div class="directive-section"><h2><a name="LuaScope" id="LuaScope">LuaScope</a> <a name="luascope" id="luascope">Directive</a></h2>
1966<table class="directive">
1967<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Une valeur parmi once, request, conn, thread -- la valeur
1968par d�faut est once</td></tr>
1969<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>LuaScope once|request|conn|thread|server [min] [max]</code></td></tr>
1970<tr><th><a href="directive-dict.html#Default">D�faut:</a></th><td><code>LuaScope once</code></td></tr>
1971<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel, r�pertoire, .htaccess</td></tr>
1972<tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
1973<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Exp�rimental</td></tr>
1974<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_lua</td></tr>
1975</table>
1976    <p>Cette directive permet de sp�cifier la dur�e de vie de
1977    l'interpr�teur Lua qui sera utilis� dans ce "r�pertoire". La valeur
1978    par d�faut est "once".</p>
1979
1980   <dl>
1981    <dt>once:</dt> <dd>utilise l'interpr�teur une fois.</dd>
1982
1983    <dt>request:</dt> <dd>utilise l'interpr�teur pour traiter tout ce
1984    qui est bas� sur le m�me fichier dans la requ�te, et qui se trouve
1985    aussi dans la port�e de la requ�te.</dd>
1986
1987    <dt>conn:</dt> <dd>idem request, mais attach� � connection_rec</dd>
1988
1989    <dt>thread:</dt> <dd>Utilise l'interpr�teur pendant toute la dur�e
1990    de vie du thread qui traite la requ�te (disponible seulement avec
1991    les MPMs thread�s).</dd>
1992
1993    <dt>server:</dt>  <dd>Le comportement est ici diff�rent, car la
1994    port�e du serveur pr�sente une dur�e de vie assez longue, et
1995    plusieurs threads vont partager le m�me server_rec. Pour g�rer tout
1996    ceci, les �tats lua du serveur sont stock�s dans une liste de ressources
1997    apr. Les arguments <code>min</code> et <code>max</code> permettent
1998    de sp�cifier les nombres minimaux et maximaux d'�tats lua � stocker
1999    dans la liste.</dd>
2000   </dl>
2001   <p>En g�n�ral, les port�es <code>thread</code> et <code>server</code>
2002   sont 2 � 3 fois plus rapides que les autres, car elles n'ont pas besoin
2003   de r�g�n�rer de nouveaux �tats Lua � chaque requ�te (comme c'est le
2004   cas avec le MPM event, o� m�me les connexions persistantes utilisent un
2005   nouveau thread pour chaque requ�te). Si vous pensez que vos scripts
2006   n'auront pas de probl�me s'il r�utilisent un �tat, alors les port�es
2007   <code>thread</code> ou <code>server</code> doivent �tre utilis�es car
2008   elles pr�senteront de meilleures performances. Alors que la port�e
2009   <code>thread</code> fournira les r�ponses les plus rapides, la port�e
2010   <code>server</code> utilisera moins de m�moire car les �tats sont
2011   rassembl�s dans des jeux, permettant par exemple � 1000 threads de
2012   partager 100 �tats Lua, ne n�cessitant ainsi que 10% de la m�moire
2013   requise par la port�e <code>thread</code>.
2014    </p>
2015
2016</div>
2017</div>
2018<div class="bottomlang">
2019<p><span>Langues Disponibles: </span><a href="/en/mod/mod_lua.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
2020<a href="/fr/mod/mod_lua.html" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
2021</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>
2022<script type="text/javascript"><!--//--><![CDATA[//><!--
2023var comments_shortname = 'httpd';
2024var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_lua.html';
2025(function(w, d) {
2026    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
2027        d.write('<div id="comments_thread"><\/div>');
2028        var s = d.createElement('script');
2029        s.type = 'text/javascript';
2030        s.async = true;
2031        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
2032        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
2033    }
2034    else { 
2035        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
2036    }
2037})(window, document);
2038//--><!]]></script></div><div id="footer">
2039<p class="apache">Copyright 2014 The Apache Software Foundation.<br />Autoris� sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
2040<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[//><!--
2041if (typeof(prettyPrint) !== 'undefined') {
2042    prettyPrint();
2043}
2044//--><!]]></script>
2045</body></html>