diff options
Diffstat (limited to 'docs/manual/mod/mod_lua.html.fr')
-rw-r--r-- | docs/manual/mod/mod_lua.html.fr | 529 |
1 files changed, 183 insertions, 346 deletions
diff --git a/docs/manual/mod/mod_lua.html.fr b/docs/manual/mod/mod_lua.html.fr index 139fa158..2a4f5e03 100644 --- a/docs/manual/mod/mod_lua.html.fr +++ b/docs/manual/mod/mod_lua.html.fr @@ -9,7 +9,7 @@ <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> -<script src="../style/scripts/prettify.js" type="text/javascript"> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> </script> <link href="../images/favicon.ico" rel="shortcut icon" /></head> @@ -27,6 +27,8 @@ <p><span>Langues Disponibles: </span><a href="../en/mod/mod_lua.html" hreflang="en" rel="alternate" title="English"> en </a> | <a href="../fr/mod/mod_lua.html" title="Français"> fr </a></p> </div> +<div class="outofdate">Cette traduction peut être périmée. Vérifiez la version + anglaise pour les changements récents.</div> <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 traitement des requêtes httpd</td></tr> <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Expérimental</td></tr> @@ -106,9 +108,7 @@ fonctionnement interne de httpd.</p> <p>La directive de base pour le chargement du module est</p> -<pre class="prettyprint lang-config"> - LoadModule lua_module modules/mod_lua.so -</pre> +<pre class="prettyprint lang-config">LoadModule lua_module modules/mod_lua.so</pre> <p> @@ -116,9 +116,7 @@ fonctionnement interne de httpd.</p> <code>lua-script</code> qui peut être utilisé avec une directive <code>AddHandler</code> :</p> -<pre class="prettyprint lang-config"> -AddHandler lua-script .lua -</pre> +<pre class="prettyprint lang-config">AddHandler lua-script .lua</pre> <p> @@ -179,8 +177,7 @@ function handle(r) return 501 end return apache2.OK -end -</pre> +end</pre> <p> @@ -234,18 +231,15 @@ function authz_check_foo(r, ip, user) else return apache2.AUTHZ_DENIED end -end -</pre> +end</pre> <p>La configuration suivante enregistre cette fonction en tant que fournisseur <code>foo</code>, et la configure por l'URL <code>/</code> :</p> -<pre class="prettyprint lang-config"> -LuaAuthzProvider foo authz_provider.lua authz_check_foo +<pre class="prettyprint lang-config">LuaAuthzProvider foo authz_provider.lua authz_check_foo <Location /> Require foo 10.1.2.3 john_doe -</Location> -</pre> +</Location></pre> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> @@ -363,8 +357,7 @@ function translate_name(r) end -- on ne gère pas cette URL et on donne sa chance à un autre module return apache2.DECLINED -end -</pre> +end</pre> @@ -387,8 +380,7 @@ function translate_name(r) return apache2.DECLINED end return apache2.DECLINED -end -</pre> +end</pre> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> @@ -717,8 +709,7 @@ end <p>L'objet request_rec possède (au minimum) les méthodes suivantes :</p> -<pre class="prettyprint lang-lua"> -r:flush() -- vide le tampon de sortie +<pre class="prettyprint lang-lua">r:flush() -- vide le tampon de sortie -- Renvoie true si le vidage a été effectué avec succès, false dans le cas contraire. @@ -726,185 +717,141 @@ while nous_avons_des_données_à_envoyer do r:puts("Bla bla bla\n") -- envoi des données à envoyer vers le tampon r:flush() -- vidage du tampon (envoi au client) r.usleep(500000) -- mise en attente pendant 0.5 secondes et bouclage -end -</pre> +end</pre> -<pre class="prettyprint lang-lua"> -r:addoutputfilter(name|function) -- ajoute un filtre en sortie +<pre class="prettyprint lang-lua">r:addoutputfilter(name|function) -- ajoute un filtre en sortie -r:addoutputfilter("fooFilter") -- insère le filtre fooFilter dans le flux de sortie -</pre> +r:addoutputfilter("fooFilter") -- insère le filtre fooFilter dans le flux de sortie</pre> -<pre class="prettyprint lang-lua"> -r:sendfile(filename) -- envoie un fichier entier au client en +<pre class="prettyprint lang-lua">r:sendfile(filename) -- envoie un fichier entier au client en utilisant sendfile s'il est supporté par la plateforme : if use_sendfile_thing then r:sendfile("/var/www/large_file.img") -end -</pre> +end</pre> -<pre class="prettyprint lang-lua"> -r:parseargs() -- renvoie deux tables : une table standard de couples +<pre class="prettyprint lang-lua">r:parseargs() -- renvoie deux tables : une table standard de couples clé/valeur pour les données GET simples, et une autre pour les données multivaluées (par exemple foo=1&foo=2&foo=3) : local GET, GETMULTI = r:parseargs() -r:puts("Votre nom est : " .. GET['name'] or "Unknown") -</pre> +r:puts("Votre nom est : " .. GET['name'] or "Unknown")</pre> -<pre class="prettyprint lang-lua"> -r:parsebody()([sizeLimit]) -- interprète le corps de la requête +<pre class="prettyprint lang-lua">r:parsebody()([sizeLimit]) -- interprète le corps de la requête en tant que POST et renvoie deux tables lua, comme r:parseargs(). Un nombre optionnel peut être fourni pour spécifier le nombre maximal d'octets à interpréter. La valeur par défaut est 8192. local POST, POSTMULTI = r:parsebody(1024*1024) -r:puts("Votre nom est : " .. POST['name'] or "Unknown") -</pre> +r:puts("Votre nom est : " .. POST['name'] or "Unknown")</pre> -<pre class="prettyprint lang-lua"> -r:puts("bonjour", " le monde", "!") -- affichage dans le corps de la réponse -</pre> +<pre class="prettyprint lang-lua">r:puts("bonjour", " le monde", "!") -- affichage dans le corps de la réponse</pre> -<pre class="prettyprint lang-lua"> -r:write("une simple chaîne") -- affichage dans le -corps de la réponse -</pre> +<pre class="prettyprint lang-lua">r:write("une simple chaîne") -- affichage dans le +corps de la réponse</pre> -<pre class="prettyprint lang-lua"> -r:escape_html("<html>test</html>") -- Echappe le -code HTML et renvoie le résultat -</pre> +<pre class="prettyprint lang-lua">r:escape_html("<html>test</html>") -- Echappe le +code HTML et renvoie le résultat</pre> -<pre class="prettyprint lang-lua"> -r:base64_encode(string) -- Encode une chaîne à l'aide du +<pre class="prettyprint lang-lua">r:base64_encode(string) -- Encode une chaîne à l'aide du standard de codage Base64. -local encoded = r:base64_encode("This is a test") -- returns VGhpcyBpcyBhIHRlc3Q= -</pre> +local encoded = r:base64_encode("This is a test") -- returns VGhpcyBpcyBhIHRlc3Q=</pre> -<pre class="prettyprint lang-lua"> -r:base64_decode(string) -- Décode une chaîne codée en Base64. +<pre class="prettyprint lang-lua">r:base64_decode(string) -- Décode une chaîne codée en Base64. -local decoded = r:base64_decode("VGhpcyBpcyBhIHRlc3Q=") -- returns 'This is a test' -</pre> +local decoded = r:base64_decode("VGhpcyBpcyBhIHRlc3Q=") -- returns 'This is a test'</pre> -<pre class="prettyprint lang-lua"> -r:md5(string) -- Calcule et renvoie le condensé MD5 d'une chaîne +<pre class="prettyprint lang-lua">r:md5(string) -- Calcule et renvoie le condensé MD5 d'une chaîne en mode binaire (binary safe). -local hash = r:md5("This is a test") -- returns ce114e4501d2f4e2dcea3e17b546f339 -</pre> +local hash = r:md5("This is a test") -- returns ce114e4501d2f4e2dcea3e17b546f339</pre> -<pre class="prettyprint lang-lua"> -r:sha1(string) -- Calcule et renvoie le condensé SHA1 d'une chaîne +<pre class="prettyprint lang-lua">r:sha1(string) -- Calcule et renvoie le condensé SHA1 d'une chaîne en mode binaire (binary safe). -local hash = r:sha1("This is a test") -- returns a54d88e06612d820bc3be72877c74f257b561b19 -</pre> +local hash = r:sha1("This is a test") -- returns a54d88e06612d820bc3be72877c74f257b561b19</pre> -<pre class="prettyprint lang-lua"> -r:escape(string) -- Echappe une chaîne de type URL. +<pre class="prettyprint lang-lua">r:escape(string) -- Echappe une chaîne de type URL. local url = "http://foo.bar/1 2 3 & 4 + 5" -local escaped = r:escape(url) -- renvoie 'http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5' -</pre> +local escaped = r:escape(url) -- renvoie 'http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5'</pre> -<pre class="prettyprint lang-lua"> -r:unescape(string) -- Déséchappe une chaîne de type URL. +<pre class="prettyprint lang-lua">r:unescape(string) -- Déséchappe une chaîne de type URL. local url = "http%3a%2f%2ffoo.bar%2f1+2+3+%26+4+%2b+5" -local unescaped = r:unescape(url) -- renvoie 'http://foo.bar/1 2 3 & 4 + 5' -</pre> +local unescaped = r:unescape(url) -- renvoie 'http://foo.bar/1 2 3 & 4 + 5'</pre> -<pre class="prettyprint lang-lua"> -r:construct_url(string) -- Construit une URL à partir d'un URI +<pre class="prettyprint lang-lua">r:construct_url(string) -- Construit une URL à partir d'un URI -local url = r:construct_url(r.uri) -</pre> +local url = r:construct_url(r.uri)</pre> -<pre class="prettyprint lang-lua"> -r.mpm_query(number) -- Interroge le serveur à propos de son +<pre class="prettyprint lang-lua">r.mpm_query(number) -- Interroge le serveur à propos de son module MPM via la requête ap_mpm_query. local mpm = r.mpm_query(14) if mpm == 1 then r:puts("Ce serveur utilise le MPM Event") -end -</pre> +end</pre> -<pre class="prettyprint lang-lua"> -r:expr(string) -- Evalue une chaîne de type <a href="../expr.html">expr</a>. +<pre class="prettyprint lang-lua">r:expr(string) -- Evalue une chaîne de type <a href="../expr.html">expr</a>. if r:expr("%{HTTP_HOST} =~ /^www/") then r:puts("Ce nom d'hôte commence par www") -end -</pre> +end</pre> -<pre class="prettyprint lang-lua"> -r:scoreboard_process(a) -- Interroge le serveur à propos du +<pre class="prettyprint lang-lua">r:scoreboard_process(a) -- Interroge le serveur à propos du processus à la position <code>a</code>. local process = r:scoreboard_process(1) -r:puts("Le serveur 1 a comme PID " .. process.pid) -</pre> +r:puts("Le serveur 1 a comme PID " .. process.pid)</pre> -<pre class="prettyprint lang-lua"> -r:scoreboard_worker(a, b) -- Interroge le serveur à propos du +<pre class="prettyprint lang-lua">r:scoreboard_worker(a, b) -- Interroge le serveur à propos du thread <code>b</code>, dans le processus <code>a</code>. local thread = r:scoreboard_worker(1, 1) r:puts("L'ID du thread 1 du serveur 1 est " .. thread.tid .. " et son -état est " .. thread.status) -</pre> +état est " .. thread.status)</pre> -<pre class="prettyprint lang-lua"> -r:clock() -- Renvoie l'heure courante avec une précision d'une -microseconde. -</pre> +<pre class="prettyprint lang-lua">r:clock() -- Renvoie l'heure courante avec une précision d'une +microseconde.</pre> -<pre class="prettyprint lang-lua"> -r:requestbody(filename) -- Lit et renvoie le corps d'une requête. Si +<pre class="prettyprint lang-lua">r:requestbody(filename) -- Lit et renvoie le corps d'une requête. Si 'filename' est spécifié, le corps de requête n'est pas renvoyé, mais sauvegardé dans le fichier correspondant. local input = r:requestbody() r:puts("Vous m'avez envoyé le corps de requête suivant :\n") -r:puts(input) -</pre> +r:puts(input)</pre> -<pre class="prettyprint lang-lua"> -r:add_input_filter(filter_name) -- Ajoute le filtre en entrée -'filter_name'. -</pre> +<pre class="prettyprint lang-lua">r:add_input_filter(filter_name) -- Ajoute le filtre en entrée +'filter_name'.</pre> -<pre class="prettyprint lang-lua"> -r:module_info(module_name) -- Interroge le serveur à propos d'un +<pre class="prettyprint lang-lua">r:module_info(module_name) -- Interroge le serveur à propos d'un module. local mod = r.module_info("mod_lua.c") @@ -912,135 +859,101 @@ if mod then for k, v in pairs(mod.commands) do r:puts( ("%s: %s\n"):format(k,v)) -- affiche toutes les directives implémentées par ce module end -end -</pre> +end</pre> -<pre class="prettyprint lang-lua"> -r:loaded_modules() -- Renvoie une liste des modules chargés par +<pre class="prettyprint lang-lua">r:loaded_modules() -- Renvoie une liste des modules chargés par httpd. for k, module in pairs(r:loaded_modules()) do r:puts("J'ai chargé le module " .. module .. "\n") -end -</pre> +end</pre> -<pre class="prettyprint lang-lua"> -r:runtime_dir_relative(filename) -- Génère le nom d'un fichier run-time +<pre class="prettyprint lang-lua">r:runtime_dir_relative(filename) -- Génère le nom d'un fichier run-time (par exemple la mémoire partagée "file") relativement au répertoire de -run-time. -</pre> +run-time.</pre> -<pre class="prettyprint lang-lua"> -r:server_info() -- Renvoie une table contenant des informations +<pre class="prettyprint lang-lua">r:server_info() -- Renvoie une table contenant des informations à propos du serveur, comme le nom de l'exécutable httpd, le -module mpm utilisé, etc... -</pre> +module mpm utilisé, etc...</pre> -<pre class="prettyprint lang-lua"> -r:set_document_root(file_path) -- Définit la racine des -documents pour la requête à file_path. -</pre> +<pre class="prettyprint lang-lua">r:set_document_root(file_path) -- Définit la racine des +documents pour la requête à file_path.</pre> -<pre class="prettyprint lang-lua"> -r:add_version_component(component_string) -- Ajoute un élément à -la bannière du serveur. -</pre> +<pre class="prettyprint lang-lua">r:add_version_component(component_string) -- Ajoute un élément à +la bannière du serveur.</pre> -<pre class="prettyprint lang-lua"> -r:set_context_info(prefix, docroot) -- Définit le préfixe et la -racine des documents du contexte pour une requête. -</pre> +<pre class="prettyprint lang-lua">r:set_context_info(prefix, docroot) -- Définit le préfixe et la +racine des documents du contexte pour une requête.</pre> -<pre class="prettyprint lang-lua"> -r:os_escape_path(file_path) -- Convertit un chemin du système de -fichiers en URL indépendamment du système d'exploitation. -</pre> +<pre class="prettyprint lang-lua">r:os_escape_path(file_path) -- Convertit un chemin du système de +fichiers en URL indépendamment du système d'exploitation.</pre> -<pre class="prettyprint lang-lua"> -r:escape_logitem(string) -- Echappe une chaîne pour -journalisation. -</pre> +<pre class="prettyprint lang-lua">r:escape_logitem(string) -- Echappe une chaîne pour +journalisation.</pre> -<pre class="prettyprint lang-lua"> -r.strcmp_match(string, pattern) -- Vérifie si 'string' correspond à +<pre class="prettyprint lang-lua">r.strcmp_match(string, pattern) -- Vérifie si 'string' correspond à 'pattern' via la fonction strcmp_match (GLOBs). Par exemple, est-ce que 'www.example.com' correspond à '*.example.com' ? local match = r.strcmp_match("foobar.com", "foo*.com") if match then r:puts("foobar.com matches foo*.com") -end -</pre> +end</pre> -<pre class="prettyprint lang-lua"> -r:set_keepalive() -- Définit l'état de persistance d'une +<pre class="prettyprint lang-lua">r:set_keepalive() -- Définit l'état de persistance d'une requête. Renvoie true dans la mesure du possible, false dans le -cas contraire. -</pre> +cas contraire.</pre> -<pre class="prettyprint lang-lua"> -r:make_etag() -- Génère et renvoie le etag pour la requête -courante. -</pre> +<pre class="prettyprint lang-lua">r:make_etag() -- Génère et renvoie le etag pour la requête +courante.</pre> -<pre class="prettyprint lang-lua"> -r:send_interim_response(clear) -- Renvoie une réponse d'intérim (1xx) au +<pre class="prettyprint lang-lua">r:send_interim_response(clear) -- Renvoie une réponse d'intérim (1xx) au client. Si 'clear' est vrai, les en-têtes disponibles seront envoyés et -effacés. -</pre> +effacés.</pre> -<pre class="prettyprint lang-lua"> -r:custom_response(status_code, string) -- Génère et définit une réponse +<pre class="prettyprint lang-lua">r:custom_response(status_code, string) -- Génère et définit une réponse personnalisée pour un code d'état particulier. Le fonctionnement est très proche de celui de la directive ErrorDocument. -r:custom_response(404, "Baleted!") -</pre> +r:custom_response(404, "Baleted!")</pre> -<pre class="prettyprint lang-lua"> -r.exists_config_define(string) -- Vérifie si une définition de +<pre class="prettyprint lang-lua">r.exists_config_define(string) -- Vérifie si une définition de configuration existe. if r.exists_config_define("FOO") then r:puts("httpd a probablement été lancé avec l'option -DFOO, ou FOO a été défini dans la configuration") -end -</pre> +end</pre> -<pre class="prettyprint lang-lua"> -r:state_query(string) -- Interroge le serveur à propos de son -état. -</pre> +<pre class="prettyprint lang-lua">r:state_query(string) -- Interroge le serveur à propos de son +état.</pre> -<pre class="prettyprint lang-lua"> -r:stat(filename [,wanted]) -- Exécute stat() sur un fichier, et renvoie +<pre class="prettyprint lang-lua">r:stat(filename [,wanted]) -- Exécute stat() sur un fichier, et renvoie une table contenant des informations à propos de ce fichier. local info = r:stat("/var/www/foo.txt") if info then r:puts("Ce fichier existe et a été modifié pour la dernière fois à : " .. info.modified) -end -</pre> +end</pre> -<pre class="prettyprint lang-lua"> -r:regex(string, pattern [,flags]) -- Exécute une recherche à base +<pre class="prettyprint lang-lua">r:regex(string, pattern [,flags]) -- Exécute une recherche à base d'expression rationnelle sur une chaîne, et renvoie les éventuelles correspondances trouvées. @@ -1055,24 +968,18 @@ local matches = r:regex("FOO bar BAz", [[(foo) bar]], 1) -- les drapeaux peuvent être une combibaison bit à bit de : -- 0x01: insensibilité à la casse --- 0x02: recherche multiligne -</pre> +-- 0x02: recherche multiligne</pre> -<pre class="prettyprint lang-lua"> -r.usleep(microsecondes) -- Interrompt l'exécution du script pendant le nombre de microsecondes spécifié. -</pre> +<pre class="prettyprint lang-lua">r.usleep(microsecondes) -- Interrompt l'exécution du script pendant le nombre de microsecondes spécifié.</pre> -<pre class="prettyprint lang-lua"> -r:dbacquire(dbType[, dbParams]) -- Acquiert une connexion à une +<pre class="prettyprint lang-lua">r:dbacquire(dbType[, dbParams]) -- Acquiert une connexion à une base de données et renvoie une classe database. Voir '<a href="#databases">Connectivité aux bases de données</a>' pour plus de -détails. -</pre> +détails.</pre> -<pre class="prettyprint lang-lua"> -r:ivm_set("key", value) -- Défini une variable Inter-VM avec une valeur spécifique. +<pre class="prettyprint lang-lua">r:ivm_set("key", value) -- Défini une variable Inter-VM avec une valeur spécifique. -- Ces valeurs sont conservées même si la VM est -- arrêtée ou non utilisée, et ne doivent donc être -- utilisées que si MaxConnectionsPerChild > 0. @@ -1096,38 +1003,26 @@ function handle(r) r:ivm_set("cached_data", foo) -- définition globale de la variable end r:puts("La donnée en cache est : ", foo) -end -</pre> +end</pre> -<pre class="prettyprint lang-lua"> -r:htpassword(string [,algorithm [,cost]]) -- Génère un hash de mot de passe à partir d'une chaîne. +<pre class="prettyprint lang-lua">r:htpassword(string [,algorithm [,cost]]) -- Génère un hash de mot de passe à partir d'une chaîne. -- algorithm: 0 = APMD5 (défaut), 1 = SHA, 2 = BCRYPT, 3 = CRYPT. - -- cost: ne s'utilise qu'avec l'algorythme BCRYPT (défaut = 5). -</pre> + -- cost: ne s'utilise qu'avec l'algorythme BCRYPT (défaut = 5).</pre> -<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> +<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> -<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> +<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> -<pre class="prettyprint lang-lua"> -r:rmdir(dir) -- Supprime un répertoire. -</pre> +<pre class="prettyprint lang-lua">r:rmdir(dir) -- Supprime un répertoire.</pre> -<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> +<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> -<pre class="prettyprint lang-lua"> -r:get_direntries(dir) -- Renvoie une table contenant toutes les entrées de répertoires. +<pre class="prettyprint lang-lua">r:get_direntries(dir) -- Renvoie une table contenant toutes les entrées de répertoires. -- Renvoie un chemin sous forme éclatée en chemin, fichier, extension function handle(r) @@ -1140,52 +1035,52 @@ function handle(r) r:puts( ("%s %s %10i %s\n"):format(ftype, mtime, info.size, f) ) end end -end -</pre> +end</pre> -<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> +<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> -<pre class="prettyprint lang-lua"> -r:getcookie(key) -- Obtient un cookie HTTP -</pre> +<pre class="prettyprint lang-lua">r:getcookie(key) -- Obtient un cookie HTTP</pre> -<pre class="prettyprint lang-lua"> -r:setcookie(key, value, secure, expires) -- Définit un cookie HTTP, par exemple : -r:setcookie("foo", "bar and stuff", false, os.time() + 86400) -</pre> +<pre class="prettyprint lang-lua">r:setcookie{ + key = [key], + value = [value], + expires = [expiry], + secure = [boolean], + httponly = [boolean], + path = [path], + domain = [domain] +} -- Définit un cookie HTTP, par exemple : +r:setcookie{ + key = "cookie1", + value = "HDHfa9eyffh396rt", + expires = os.time() + 86400, + secure = true +}</pre> -<pre class="prettyprint lang-lua"> -r:wsupgrade() -- Met à jour une connexion vers les WebSockets si possible (et si demandé) : + +<pre class="prettyprint lang-lua">r:wsupgrade() -- Met à jour une connexion vers les WebSockets si possible (et si demandé) : if r:wsupgrade() then -- si la mise à jour est possible : r:wswrite("Bienvenue dans les websockets!") -- écrit quelque chose à l'intention du client r:wsclose() -- Au revoir ! -end -</pre> +end</pre> -<pre class="prettyprint lang-lua"> -r:wsread() -- Lit un cadre de websocket depuis une connexion vers websocket mise à jour (voir ci-dessus) : +<pre class="prettyprint lang-lua">r:wsread() -- Lit un cadre de websocket depuis une connexion vers websocket mise à jour (voir ci-dessus) : local line, isFinal = r:wsread() -- isFinal indique s'il s'agit du cadre final. -- dans le cas contraire, on peut lire les cadres suivants -r:wswrite("Vous avez écrit : " .. line) -</pre> +r:wswrite("Vous avez écrit : " .. line)</pre> -<pre class="prettyprint lang-lua"> -r:wswrite(line) -- écrit un cadre vers un client WebSocket : -r:wswrite("Bonjour le Monde !") -</pre> +<pre class="prettyprint lang-lua">r:wswrite(line) -- écrit un cadre vers un client WebSocket : +r:wswrite("Bonjour le Monde !")</pre> -<pre class="prettyprint lang-lua"> -r:wsclose() -- ferme une requête WebSocket et l'achève pour httpd : +<pre class="prettyprint lang-lua">r:wsclose() -- ferme une requête WebSocket et l'achève pour httpd : if r:wsupgrade() then r:wswrite("Ecrire quelque chose : ") @@ -1193,16 +1088,14 @@ if r:wsupgrade() then r:wswrite("Vous avez écrit : " .. line); r:wswrite("Au revoir !") r:wsclose() -end -</pre> +end</pre> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="logging" id="logging">Fonctions de journalisation</a></h2> -<pre class="prettyprint lang-lua"> - -- exemples de messages de journalisation +<pre class="prettyprint lang-lua"> -- exemples de messages de journalisation r:trace1("Ceci est un message de journalisation de niveau trace") -- les niveaux valides vont de trace1 à trace8 <br /> r:debug("Ceci est un message de journalisation de niveau debug")<br /> @@ -1252,8 +1145,7 @@ contenu suivant :</p> paquets de données sont envoyés à la chaîne de filtrage. La structure de base d'une telle fonction est : </p> - <pre class="prettyprint lang-lua"> -function filter(r) + <pre class="prettyprint lang-lua">function filter(r) -- Nous indiquons tout d'abord que nous sommes prêts à recevoir des -- blocs de données. -- Avant ceci, nous pouvons définir notre environnement, tester @@ -1283,8 +1175,7 @@ function filter(r) -- arrêt. Les filtres d'entrée comme de sortie peuvent servir à ajouter des éléments à la fin -- des données à cette étape. coroutine.yield([optional footer to be appended to the content]) -end - </pre> +end</pre> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> @@ -1297,10 +1188,9 @@ commandes auprès des moteurs de base de données les plus courants </p> <p>L'exemple suivant montre comment se connecter à une base de données et extraire des informations d'une table :</p> - <pre class="prettyprint lang-lua"> -function handle(r) + <pre class="prettyprint lang-lua">function handle(r) -- connexion à la base de données - local database, err = r:dbacquire("mysql", "server=localhost,user=root,dbname=mydb") + local database, err = r:dbacquire("mysql", "server=localhost,user=someuser,pass=somepass,dbname=mydb") if not err then -- Sélection de certaines informations local results, err = database:select(r, "SELECT `name`, `age` FROM `people` WHERE 1") @@ -1316,17 +1206,14 @@ function handle(r) else r:puts("Connexion à la base de données impossible : " .. err) end -end - </pre> +end</pre> <p> Pour utiliser <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code>, spécifiez <code>mod_dbd</code> comme type de base de données, ou laissez le champ vide : </p> - <pre class="prettyprint lang-lua"> - local database = r:dbacquire("mod_dbd") - </pre> + <pre class="prettyprint lang-lua">local database = r:dbacquire("mod_dbd")</pre> <h3><a name="database_object" id="database_object">L'objet database et ses méthodes</a></h3> @@ -1334,19 +1221,16 @@ vide : les méthodes suivantes :</p> <p><strong>Sélection normale et requête vers une base de données :</strong></p> - <pre class="prettyprint lang-lua"> --- Exécution d'une requête et renvoie du nombre d'enregistrements + <pre class="prettyprint lang-lua">-- Exécution d'une requête et renvoie du nombre d'enregistrements affectés : local affected, errmsg = database:query(r, "DELETE FROM `tbl` WHERE 1") -- Exécution d'une requête et renvoie du résultat qui peut être utilisé en mode synchrone ou asynchrone : -local result, errmsg = database:select(r, "SELECT * FROM `people` WHERE 1") - </pre> +local result, errmsg = database:select(r, "SELECT * FROM `people` WHERE 1")</pre> <p><strong>Utilisation de requêtes préparées (recommandé) :</strong></p> - <pre class="prettyprint lang-lua"> --- Création et exécution d'une requête préparée : + <pre class="prettyprint lang-lua">-- Création et exécution d'une requête préparée : local statement, errmsg = database:prepare(r, "DELETE FROM `tbl` WHERE `age` > %u") if not errmsg then local result, errmsg = statement:query(20) -- exécute la requête pour age > 20 @@ -1356,14 +1240,11 @@ end local statement, errmsg = database:prepared(r, "someTag") if not errmsg then local result, errmsg = statement:select("John Doe", 123) -- injecte les valeurs "John Doe" et 123 dans la requête -end - -</pre> +end</pre> <p><strong>Echappement de valeurs, fermeture de la base données, etc...</strong></p> - <pre class="prettyprint lang-lua"> --- Echappe une valeur pour pouvoir l'utiliser dans une requête : + <pre class="prettyprint lang-lua">-- Echappe une valeur pour pouvoir l'utiliser dans une requête : local escaped = database:escape(r, [["'|blabla]]) -- Ferme une base de données et libère les liens vers cette dernière : @@ -1371,8 +1252,7 @@ database:close() -- Vérifie si une connexion à une base de données est en service et opérationnelle : -local connected = database:active() - </pre> +local connected = database:active()</pre> <h3><a name="result_sets" id="result_sets">Travail avec les jeux d'enregistrements renvoyés par les requêtes</a></h3> @@ -1388,21 +1268,19 @@ mode asynchrone.<br /> <code>result(N)</code> sélectionne l'enregistrement numéro <code>N</code> en mode asynchrone. </p> - <pre class="prettyprint lang-lua"> --- extrait un jeu d'enregistrements via une requête régulière : + <pre class="prettyprint lang-lua">-- extrait un jeu d'enregistrements via une requête régulière : local result, err = db:select(r, "SELECT * FROM `tbl` WHERE 1") local rows = result(0) -- sélectionne tous les enregistrements en mode synchrone local row = result(-1) -- sélectionne le prochain enregistrement disponible en mode asynchrone local row = result(1234) -- sélectionne l'enregistrement 1234 en mode asynchrone - </pre> +local row = result(-1, true) -- Lit l'enregistrement suivant en utilisant les noms d'enregistrements comme index.</pre> <p>Il est possible de construire une fonction qui renvoie une fonction itérative permettant de traiter tous les enregistrement en mode synchrone ou asynchrone selon la valeur de l'argument async : </p> - <pre class="prettyprint lang-lua"> -function rows(resultset, async) + <pre class="prettyprint lang-lua">function rows(resultset, async) local a = 0 local function getnext() a = a + 1 @@ -1433,8 +1311,7 @@ if not err then .... end end -end - </pre> +end</pre> <h3><a name="closing_databases" id="closing_databases">Fermeture d'une connexion à une base de données</a></h3> @@ -1447,16 +1324,14 @@ que résidus collectés, mais si ce n'est pas le cas, vous pouvez finir pas avoir trop de connexions vers la base de données inutilisées. Les deux mesures suivantes sont pratiquement identiques : </p> - <pre class="prettyprint lang-lua"> --- Méthode 1 : fermeture manuelle de la connexion + <pre class="prettyprint lang-lua">-- Méthode 1 : fermeture manuelle de la connexion local database = r:dbacquire("mod_dbd") database:close() -- c'est tout -- Méthode 2 : on laisse le collecteur de résidus la fermer local database = r:dbacquire("mod_dbd") database = nil -- on coupe le lien -collectgarbage() -- fermeture de la connexion par le collecteur de résidus -</pre> +collectgarbage() -- fermeture de la connexion par le collecteur de résidus</pre> <h3><a name="database_caveat" id="database_caveat">Précautions à prendre lorsque l'on travaille avec les bases @@ -1490,21 +1365,17 @@ le cas des requêtes dynamiques, utilisez <code>db:prepare</code> ou d'autorisation, elle peut être appelée via la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> :</p> -<pre class="prettyprint lang-config"> -LuaRoot /usr/local/apache2/lua +<pre class="prettyprint lang-config">LuaRoot /usr/local/apache2/lua LuaAuthzProvider foo authz.lua authz_check_foo <Location /> Require foo johndoe -</Location> -</pre> +</Location></pre> -<pre class="prettyprint lang-lua"> -require "apache2" +<pre class="prettyprint lang-lua">require "apache2" function authz_check_foo(r, who) if r.user ~= who then return apache2.AUTHZ_DENIED return apache2.AUTHZ_GRANTED -end -</pre> +end</pre> @@ -1533,11 +1404,9 @@ end serveur en production, et les valeurs stat ou never pour un serveur en développement.</p> - <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config"> -LuaCodeCache stat + <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config">LuaCodeCache stat LuaCodeCache forever -LuaCodeCache never - </pre> +LuaCodeCache never</pre> </div> @@ -1581,8 +1450,7 @@ traitement de la requête. Cette directive peut s'utiliser pour implémenter une vérification arbitraire de l'authentification et de l'autorisation. Voici un exemple très simple : </p> -<pre class="prettyprint lang-lua"> -require 'apache2' +<pre class="prettyprint lang-lua">require 'apache2' -- fonction d'accroche authcheck fictive -- Si la requête ne contient aucune donnée d'authentification, l'en-tête @@ -1613,8 +1481,7 @@ function authcheck_hook(r) return 401 end return apache2.OK -end -</pre> +end</pre> <div class="note"><h3>Ordonnancement</h3><p>Les arguments optionnels "early" ou "late" permettent de contrôler le moment auquel ce script @@ -1692,12 +1559,9 @@ traitement d'une requête</td></tr> normale. </p> <p>Exemple :</p> -<pre class="prettyprint lang-config"> -LuaHookLog /path/to/script.lua logger -</pre> +<pre class="prettyprint lang-config">LuaHookLog /path/to/script.lua logger</pre> -<pre class="prettyprint lang-lua"> --- /path/to/script.lua -- +<pre class="prettyprint lang-lua">-- /path/to/script.lua -- function logger(r) -- on joue à pile ou face : -- Si on obtient 1, on écrit dans notre propre journal Lua et on dit @@ -1719,8 +1583,7 @@ function logger(r) r.uri = r.uri:gsub("somesecretstuff", "") -- nettoie les données return apache2.OK -- et httpd doit alors les enregistrer. end -end -</pre> +end</pre> </div> @@ -1740,12 +1603,9 @@ traitement de la requête</td></tr> phase map-to-storage du traitement de la requête. Les modules comme mod_cache agissent pendant cette phase, ce qui permet de présenter un exemple intéressant de ce que l'on peut faire ici :</p> - <pre class="prettyprint lang-config"> - LuaHookMapToStorage /path/to/lua/script.lua check_cache - </pre> + <pre class="prettyprint lang-config">LuaHookMapToStorage /path/to/lua/script.lua check_cache</pre> - <pre class="prettyprint lang-lua"> -require"apache2" + <pre class="prettyprint lang-lua">require"apache2" cached_files = {} function read_file(filename) @@ -1773,8 +1633,7 @@ function check_cache(r) end end return apache2.DECLINED -- If we had nothing to do, let others serve this. -end - </pre> +end</pre> @@ -1808,14 +1667,11 @@ version 2.3.15 du serveur HTTP Apache.</td></tr> <p>Exemple :</p> -<pre class="prettyprint lang-config"> -# httpd.conf -LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper -</pre> +<pre class="prettyprint lang-config"># httpd.conf +LuaHookTranslateName /scripts/conf/hooks.lua silly_mapper</pre> -<pre class="prettyprint lang-lua"> --- /scripts/conf/hooks.lua -- +<pre class="prettyprint lang-lua">-- /scripts/conf/hooks.lua -- require "apache2" function silly_mapper(r) if r.uri == "/" then @@ -1824,8 +1680,7 @@ function silly_mapper(r) else return apache2.DECLINED end -end -</pre> +end</pre> <div class="note"><h3>Contexte</h3><p>Cette directive ne peut être @@ -1893,15 +1748,12 @@ globale <code>bucket</code> contient les paquets de données tels qu'ils sont transmis au script Lua : </p> -<pre class="prettyprint lang-config"> -LuaInputFilter myInputFilter /www/filter.lua input_filter +<pre class="prettyprint lang-config">LuaInputFilter myInputFilter /www/filter.lua input_filter <FilesMatch "\.lua> SetInputFilter myInputFilter -</FilesMatch> -</pre> +</FilesMatch></pre> -<pre class="prettyprint lang-lua"> ---[[ +<pre class="prettyprint lang-lua">--[[ Exemple de filtre en entrée qui convertit toutes les données POST en majuscules. ]]-- @@ -1914,22 +1766,19 @@ function input_filter(r) end -- plus aucune donnée à traiter. coroutine.yield("&filterSignature=1234") -- Ajoute une signature à la fin -end -</pre> +end</pre> <p> Le filtre en entrée peut interdire ou sauter un filtre s'il est considéré comme indésirable : </p> -<pre class="prettyprint lang-lua"> -function input_filter(r) +<pre class="prettyprint lang-lua">function input_filter(r) if not good then return -- Empêche tout simplement le filtrage et transmet le contenu original end coroutine.yield() -- attend des paquets de données ... -- insert les filtres ici -end -</pre> +end</pre> <p> Voir "<a href="#modifying_buckets">Modification de contenu avec les @@ -1955,18 +1804,14 @@ filtres Lua</a>" pour plus de détails. d'interpolation dans le chemin du fichier et le nom de la fonction. Prenez garde aux problèmes de sécurité en écrivant vos expressions rationnelles.</p> - <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config"> - LuaMapHandler /(\w+)/(\w+) /scripts/$1.lua handle_$2 - </pre> + <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config">LuaMapHandler /(\w+)/(\w+) /scripts/$1.lua handle_$2</pre> </div> <p>Cette directive va faire correspondre des uri comme /photos/show?id=9 au fichier /scripts/photos.lua, et invoquera la fonction de gestionnaire handle_show au niveau de la vm lua après chargement de ce fichier.</p> -<pre class="prettyprint lang-config"> - LuaMapHandler /bingo /scripts/wombat.lua -</pre> +<pre class="prettyprint lang-config">LuaMapHandler /bingo /scripts/wombat.lua</pre> <p>Cette directive invoquera la fonction "handle" qui est la valeur par défaut si aucun nom de fonction spécifique n'est @@ -1995,15 +1840,12 @@ globale <code>bucket</code> contient les paquets de données tels qu'ils sont transmis au script Lua : </p> -<pre class="prettyprint lang-config"> -LuaOutputFilter myOutputFilter /www/filter.lua output_filter +<pre class="prettyprint lang-config">LuaOutputFilter myOutputFilter /www/filter.lua output_filter <FilesMatch "\.lua> SetOutputFilter myOutputFilter -</FilesMatch> -</pre> +</FilesMatch></pre> -<pre class="prettyprint lang-lua"> ---[[ +<pre class="prettyprint lang-lua">--[[ Exemple de filtre en sortie qui échappe toutes les entités HTML en sortie ]]-- @@ -2014,22 +1856,19 @@ function output_filter(r) coroutine.yield(output) -- Envoie les données traitées à la chaîne end -- plus aucune donnée à traiter. -end -</pre> +end</pre> <p> Comme les filres en entrée, le filtre en sortie peut interdire ou sauter un filtre s'il est considéré comme indésirable : </p> -<pre class="prettyprint lang-lua"> -function output_filter(r) +<pre class="prettyprint lang-lua">function output_filter(r) if not r.content_type:match("text/html") then return -- Empêche tout simplement le filtrage et transmet le contenu original end coroutine.yield() -- attend des paquets de données ... -- insert les filtres ici -end -</pre> +end</pre> <div class="note"><h3>Les filtres Lua avec <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></h3> <p>Lorsqu'on utilise un filtre Lua comme fournisseur sous-jacent via la @@ -2074,10 +1913,8 @@ filtres Lua</a>" pour plus de détails. chemins de recherche du module lua. Elle suit les mêmes conventions que lua. Ceci modifie le package.path dans les vms lua.</p> - <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config"> -LuaPackagePath /scripts/lib/?.lua -LuaPackagePath /scripts/lib/?/init.lua - </pre> + <div class="example"><h3>Exemples :</h3><pre class="prettyprint lang-config">LuaPackagePath /scripts/lib/?.lua +LuaPackagePath /scripts/lib/?/init.lua</pre> </div> </div> @@ -2199,7 +2036,7 @@ var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_lua.html'; } })(window, document); //--><!]]></script></div><div id="footer"> -<p class="apache">Copyright 2013 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="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> <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[//><!-- if (typeof(prettyPrint) !== 'undefined') { prettyPrint(); |