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="<-" alt="<-" src="/images/left.gif" /></a></div> 22<div id="path"> 23<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <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"> en </a> | 28<a href="/fr/mod/mod_lua.html" title="Fran�ais"> fr </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<Location /> 241 Require foo 10.1.2.3 john_doe 242</Location></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&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&foo=2&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("<html>test</html>") -- 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 & 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 & 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 > 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<br/>", 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` > %u") 1235if not errmsg then 1236 local result, errmsg = statement:query(20) -- ex�cute la requ�te pour age > 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` > %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<Location /> 1371 Require foo johndoe 1372</Location></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"><Directory></a></code> ou <code class="directive"><a href="/mod/core.html#files"><Files></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<FilesMatch "\.lua> 1753 SetInputFilter myInputFilter 1754</FilesMatch></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("&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>>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<FilesMatch "\.lua> 1845 SetOutputFilter myOutputFilter 1846</FilesMatch></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)<br/>\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"><Location></a></code> ou 1938 <code class="directive"><a href="/mod/core.html#directory"><Directory></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"><Directory></a></code> ou <code class="directive"><a href="/mod/core.html#files"><Files></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"> en </a> | 2020<a href="/fr/mod/mod_lua.html" title="Fran�ais"> fr </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&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>