From: André Malo Date: Sun, 23 Jun 2013 18:08:42 +0000 (+0000) Subject: update transformation X-Git-Tag: 2.4.5~80 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a113e35e51d6c568567b627465ff37df538d258b;p=apache update transformation git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1495860 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/docs/manual/mod/mod_lua.html.fr b/docs/manual/mod/mod_lua.html.fr index f1caa79ed2..2ceb2f164d 100644 --- a/docs/manual/mod/mod_lua.html.fr +++ b/docs/manual/mod/mod_lua.html.fr @@ -27,8 +27,6 @@

Langues Disponibles:  en  |  fr 

-
Cette traduction peut être périmée. Vérifiez la version - anglaise pour les changements récents.
@@ -55,6 +53,15 @@ ce qu'il passe au stade stable, et ce m 2.4.x. N'oublez pas de consulter le fichier CHANGES avant toute mise à jour. +

Avertissement

+

Ce module possède une grande capacité d'action sur le fonctrionnement +de httpd, ce qui lui confère une grande puissance, mais peut aussi +induire un risque de sécurité. Il est déconseillé d'utiliser ce module +sur un serveur partagé avec des utilisateurs auxquels vous ne pouvez pas +accorder une confiance absolue, car il peut permettre de modifier le +fonctionnement interne de httpd.

+
+

Directives

  • Ecriture de fonctions d'accroche (hooks)
  • Structures de données
  • +
  • Méthodes de l'objet request_rec
  • Fonctions de journalisation
  • Paquet apache2
  • +
  • Modification de contenu avec les filtres lua
  • Connectivité aux bases de données
  • top
    @@ -117,6 +126,9 @@ dont l'extension est .lua par mod_lua en invoquant cette fonction de gestion de fichier.

    +

    Pour plus de détails, voir la directive +LuaMapHandler. +

    top

    Ecrire des gestionnaires

    @@ -132,7 +144,7 @@ le style de CGI. Une fonction de gestionnaire se pr
    -example.lua
    +example.lua
    -- exemple de gestionnaire require "string" @@ -144,20 +156,28 @@ require "string" --]] function handle(r) r.content_type = "text/plain" - r:puts("Hello Lua World!\n") if r.method == 'GET' then + r:puts("Hello Lua World!\n") for k, v in pairs( r:parseargs() ) do r:puts( string.format("%s: %s\n", k, v) ) - end + end elseif r.method == 'POST' then + r:puts("Hello Lua World!\n") for k, v in pairs( r:parsebody() ) do r:puts( string.format("%s: %s\n", k, v) ) end - else + elseif r.method == 'PUT' then +-- message d'erreur personnalisé r:puts("Unsupported HTTP method " .. r.method) + r.status = 405 + return apache2.ok + else +-- message d'erreur ErrorDocument + return 501 end + return apache2.OK end
    @@ -236,19 +256,98 @@ LuaAuthzProvider foo authz_provider.lua authz_check_foo les scripts Lua) participent au traitement des requêtes. Chaque type d'accroche proposé par le serveur a un rôle spécifique, comme l'association de requêtes au système de fichiers, le contrôle d'accès, -ou la définition de types MIME. Il existe aussi des accroches à usage -général qui s'exécutent simplement à des moments opportuns du cycle -de vie de la requête.

    +ou la définition de types MIME :

    + +
    Description:Fournit des points d'entrée Lua dans différentes parties du traitement des requêtes httpd
    Statut:Expérimental
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Phase d'accrocheDirective mod_luaDescription
    Gestionnaire rapideLuaQuickHandlerIl s'agit de la première accroche appelée lorsqu'une requête + a été associée à un serveur ou un serveur virtuel.
    Phase de traductionLuaHookTranslateNameCette phase traduit l'URI de la requête en nom de fichier + sur le système. Ce sont des modules comme + mod_alias et mod_rewrite qui + interviennent au cours de cette phase.
    Choix du lieu de stockage de la ressourceLuaHookMapToStorageCette phase définit le lieu de stockage de la ressource : + physique, en cache ou externe/mandaté. Elle est assurée par les + modules de mandat ou de mise en cache.
    Autorisation d'accèsLuaHookAccessCheckerCette phase vérifie si un client a l'autorisation d'accès à + la ressource. Elle s'exécute avant l'authentification de + l'utisateur ; il faut donc être prudent. +
    Vérification de l'identifiant utilisateurLuaHookCheckUserIDCette phase vérifie l'identifiant de l'utilisateur ayant + fait l'objet d'une négociation.
    Vérification de l'autorisation d'accèsLuaHookAuthChecker + ou + LuaAuthzProviderCette phase vérifie l'autorisation d'accès d'un utilisateur + en fonction des ses paramètres de connexion, comme + l'identifiant, le certificat, etc... +
    Vérification du type de la ressourceLuaHookTypeCheckerCette phase assigne un type de contenu et un gestionnaire à + la ressource.
    Derniers réglagesLuaHookFixupsC'est la dernière phase avant l'activation des gestionnaires + de contenu. Toute modification de dernière minute à la requête + doit être effectuée ici.
    Gestionnaire de contenufichiers fx. .lua ou directive LuaMapHandlerC'est durant cette phase que le contenu est traité. Les + fichiers sont lus, interprétés, certains sont exécutés, et le + résultat obtenu est envoyé au client.
    JournalisationaucuneLorsqu'une requête a été traitée, plusieurs phases de + journalisation interviennent, et enregistrent leurs résultats + dans les fichiers d'erreur ou d'accès.
    -

    Les fonctions d'accroche acceptent l'objet de la requête comme seul -et unique argument. Elles peuvent renvoyer une valeur, selon la -fonction, mais il s'agit en général d'un +

    Les fonctions d'accroche reçoivent l'objet de la requête comme seul +argument (sauf LuaAuthzProvider qui reçoit aussi des arguments en +provenance de la directive Require). Elles peuvent renvoyer une valeur, +selon la fonction, mais il s'agit en général d'un code d'état HTTP ou des valeurs OK, DONE, ou DECLINED, -que vous pouvez écrire dans lua sous la forme apache2.OK, +que vous pouvez écrire dans Lua sous la forme apache2.OK, apache2.DONE, ou apache2.DECLINED.

    +
    -translate_name.lua
    +translate_name.lua
    -- exemple d'accroche qui réécrit un URI en chemin du système de fichiers. @@ -265,15 +364,16 @@ end
    +
    -translate_name2.lua
    +translate_name2.lua
    --[[ exemple d'accroche qui réécrit un URI vers un autre URI. Il renvoie un apache2.DECLINED pour permettre à un autre interpréteur d'URL de travailler sur la substitution, y compris l'accroche translate_name de base dont les tables de correspondances se basent sur DocumentRoot. - Note: actuellement, il est impossible de prévoir si cette action - s'exécute avant ou après mod_alias. + Note: utilisez le drapeau early/late de la directive pour + l'exécuter avant ou après mod_alias. --]] require 'apache2' @@ -297,217 +397,749 @@ end

    request_rec est considérée en tant que donnée utilisateur. Elle possède une métatable qui vous permet d'accomplir des choses intéressantes. Pour la plus grande partie, elle possède - les mêmes champs que la structure request_rec (voir httpd.h en - attendant que cette documentation soit plus complète), la + les mêmes champs que la structure request_rec, la plupart d'entre eux étant accessibles en lecture et écriture (le contenu des champs de la table peut être modifié, mais les champs eux-mêmes ne peuvent pas être établis en tant que tables distinctes).

    - - - +
    + + + + + + + - + + - + + - + + - - + + + + + + + + + + + + + + + + + + + + - + + - + + - + + - + + - - + + - + + - + + - + + - + + - + + - + + - - + + + + + + + + + + + + + + + + + + + + + - + + - + + + + + + + + - + + + + + + + + - + + - + + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + - + + - + + - + + - + + - + + -
    Nom Type Lua ModifiableDescription
    allowoverridesstringnonL'option AllowOverride s'applique à la requête courante.
    ap_auth_type string nonCe champ contient le type d'authentification effectuée + (par exemple basic)
    args string ouiLa chaîne de paramètres de la requête (par exemple + foo=bar&name=johnsmith)
    assbackwards boolean noncontient true s'il s'agit d'une requête de style HTTP/0.9 + (par exemple GET /foo (sans champs d'en-tête) )
    auth_namestringnonLa chaîne d'identification utilisée pour la vérification + de l'autorisation d'accès (si elle est disponible).
    bannerstringnonLa bannière du serveur, par exemple Apache HTTP + Server/2.4.3 openssl/0.9.8c
    basic_auth_pwstringnonLe mot de passe pour l'authentification de base envoyé + avec la requête, s'il existe
    canonical_filename string nonLe nom de fichier canonique de la requête
    content_encoding string nonLe type de codage du contenu de la requête courante
    content_type string ouiLe type de contenu de la requête courante, tel qu'il a été + déterminé au cours de la phase type_check (par exemple + image/gif ou text/html)
    context_prefix string non
    context_document_root string non
    document_root string nonLa racine des documents du serveur
    err_headers_out table nonL'en-tête MIME de l'environnement pour la réponse, écrit + même en cas d'erreur et conservé pendant les redirections + internes
    filename string ouiLe nom de fichier correspondant à la requête, par exemple + /www/example.com/foo.txt. Il peut être modifié au cours des + phases translate-name ou map-to-storage du traitement de la + requête pour permettre au gestionnaire par défaut (ou aux + gestionnaires de script) de servir une version du fichier + autre que celle demandée.
    handler string ouiLe nom du gestionnaire qui + doit traiter la requête, par exemple lua-script + si elle doit être traitée par mod_lua. Cette valeur est en + général définie via les directives AddHandler ou SetHandler, mais peut aussi l'être + via mod_lua pour permettre à un autre gestionnaire de traiter + une requête spécifique qui ne serait pas traitée par défaut + par ce dernier. +
    headers_in table ouiLes en-têtes MIME de l'environnement de la requête. Il + s'agit des en-têtes comme Host, User-Agent, + Referer, etc...
    headers_out table ouiLes en-têtes MIME de l'environnement de la réponse.
    hostname string nonLe nom d'hôte, tel que défini par l'en-tête + Host: ou par un URI complet.
    log_id
    is_httpsbooleannonIndique si la requête à été faite via HTTPS
    is_initial_reqbooleannonIndique si la requête courante est la requête initiale ou + une sous-requête.
    limit_req_bodynumbernonLa taille maximale du corps de la requête, ou 0 si aucune + limite.
    log_id string nonL'identifiant de la requête dans les journaux d'accès ou + d'erreur.
    method string nonLa méthode de la requête, par exemple GET ou + POST.
    notes table ouiUne liste de notes qui peuvent être transmises d'un module + à l'autre.
    optionsstringnonLa valeur de la directive Options pour la requête + courante.
    path_info string nonLa valeur de PATH_INFO extraite de la requête.
    portnumbernonLe port du serveur utilisé par la requête.
    protocol string nonLe protocole utilisé, par exemple HTTP/1.1
    proxyreq string ouiIndique s'il s'agit d'une requête mandatée ou non. Cette + valeur est en général définie au cours de la phase + post_read_request/translate_name du traitement de la requête.
    range string nonLe contenu de l'en-tête Range:.
    remainingnumbernonLe nombre d'octets du corps de la requête restant à lire.
    server_builtstringnonLa date de compilation du serveur.
    server_namestringnonLe nom du serveur pour cette requête.
    some_auth_requiredbooleannonIndique si une autorisation est/était requise pour cette + requête.
    subprocess_env table ouiLe jeu de variables d'environnement pour cette requête.
    startednumbernonLe moment où le serveur a été (re)démarré, en secondes + depuis epoch (1er janvier 1970)
    status number ouiLe code de retour (courant) pour cette requête, par + exemple 200 ou 404.
    the_request string nonLa chaîne de la requête telle qu'elle a été envoyée par le + client, par exemple GET /foo/bar HTTP/1.1.
    unparsed_uri string nonLa partie URI non interprétée de la requête
    uri string ouiL'URI après interprétation par httpd
    user string ouiSi une authentification a été effectuée, nom de + l'utilisateur authentifié.
    useragent_ip string nonL'adresse IP de l'agent qui a envoyé la requête
    + + + +
    top
    +
    +

    Méthodes de l'objet request_rec

    + +

    L'objet request_rec possède (au minimum) les méthodes suivantes :

    + +
    +r:flush()   -- vide le tampon de sortie
    +            -- Renvoie true si le vidage a été effectué avec succès,
    +	    false dans le cas contraire.
    +
    +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:sleep(0.5) -- mise en attente et bouclage
    +end
    +
    + + +
    +r:addoutputfilter(name|function) -- ajoute un filtre en sortie
    +
    +r:addoutputfilter("fooFilter") -- insère le filtre fooFilter dans le flux de sortie
    +
    + + +
    +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
    +
    + + +
    +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")
    +
    + + + +
    +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")
    +
    + + + +
    +r:puts("bonjour", " le monde", "!") -- affichage dans le corps de la réponse
    +
    + + +
    +r:write("une simple chaîne") -- affichage dans le
    +corps de la réponse
    +
    + + +
    +r:escape_html("<html>test</html>") -- Echappe le
    +code HTML et renvoie le résultat
    +
    + + +
    +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=
    +
    + + +
    +r:base64_decode(string) -- Décode une chaîne codée en Base64.
    +
    +local decoded = r:base64_decode("VGhpcyBpcyBhIHRlc3Q=") -- returns 'This is a test'
    +
    + + +
    +r:md5(string) -- Calcule et renvoie le condensé MD5 d'une chaîne
    +en mode binaire (binary safe).
     
    -        

    La structure request_rec possède (au minimum) les méthodes - suivantes :

    +local hash = r:md5("This is a test") -- returns ce114e4501d2f4e2dcea3e17b546f339 +
    + + +
    +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
    +
    + + +
    +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'
    +
    -
    -        r:addoutputfilter(name|function) -- ajoute un filtre en sortie
    -        
    +
    +r:unescape(string) -- Déséchappe une chaîne de type URL.
     
    -        
    -        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 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'
    +
    - local GET, GETMULTI = r:parseargs() - r:puts("Votre nom est : " .. GET['name'] or "Unknown") -
    +
    +r:construct_url(string) -- Construit une URL à partir d'un URI
     
    -	
    -	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 url = r:construct_url(r.uri)
    +
    - local POST, POSTMULTI = r:parsebody(1024*1024) - r:puts("Votre nom est : " .. POST['name'] or "Unknown") -
    +
    +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
    +
    -
    -        r:puts("bonjour", " le monde", "!") -- affichage dans le corps de la réponse
    -        
    +
    +r:expr(string) -- Evalue une chaîne de type expr.
     
    -	
    -        r:write("une simple chaîne") -- affichage dans le
    -	corps de la réponse
    -        
    +if r:expr("%{HTTP_HOST} =~ /^www/") then + r:puts("Ce nom d'hôte commence par www") +end +
    -
    -	r:dbacquire(dbType[, dbParams]) -- Acquiert une connexion à une
    +
    +r:scoreboard_process(a) -- Interroge le serveur à propos du
    +processus à la position a.
    +
    +local process = r:scoreboard_process(1)
    +r:puts("Le serveur 1 a comme PID " .. process.pid)
    +
    + + +
    +r:scoreboard_worker(a, b) -- Interroge le serveur à propos du
    +thread b, dans le processus a.
    +
    +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)
    +
    + + +
    +r:clock() -- Renvoie l'heure courante avec une précision d'une
    +microseconde.
    +
    + + +
    +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)
    +
    + + +
    +r:add_input_filter(filter_name) -- Ajoute le filtre en entrée
    +'filter_name'.
    +
    + + +
    +r:module_info(module_name) -- Interroge le serveur à propos d'un
    +module.
    +
    +local mod = r.module_info("mod_lua.c")
    +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
    +
    + + +
    +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
    +
    + + +
    +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. 
    +
    + + +
    +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...
    +
    + + +
    +r:set_document_root(file_path) -- Définit la racine des
    +documents pour la requête à file_path.
    +
    + + +
    +r:add_version_component(component_string) -- Ajoute un élément à
    +la bannière du serveur.
    +
    + + +
    +r:set_context_info(prefix, docroot) -- Définit le préfixe et la
    +racine des documents du contexte pour une requête.
    +
    + + +
    +r:os_escape_path(file_path) -- Convertit un chemin du système de
    +fichiers en URL indépendamment du système d'exploitation.
    +
    + + +
    +r:escape_logitem(string) -- Echappe une chaîne pour
    +journalisation.
    +
    + + +
    +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
    +
    + + +
    +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.
    +
    + + +
    +r:make_etag() -- Génère et renvoie le etag pour la requête
    +courante.
    +
    + + +
    +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.
    +
    + + +
    +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!")
    +
    + + +
    +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
    +
    + + +
    +r:state_query(string) -- Interroge le serveur à propos de son
    +état.
    +
    + + +
    +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
    +
    + + +
    +r:regex(string, pattern [,flags]) -- Exécute une recherche à base
    +d'expression rationnelle sur une chaîne, et renvoie les
    +éventuelles correspondances trouvées.
    +
    +local matches = r:regex("foo bar baz", [[foo (\w+) (\S*)]])
    +if matches then
    +    r:puts("L'expression rationnelle correspond et le dernier mot
    +    capturé ($2) est : " .. matches[2])
    +end
    +
    +-- Exemple avec insensibilité à la casse :
    +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
    +
    + + +
    +r:sleep(secondes) -- Interrompt l'exécution du script pendant le	nombre de secondes spécifié.
    +                  -- La valeur peut être spécifiée sous la forme d'un nombre décimal comme 1.25 pour plus de précision.
    +
    + + +
    +r:dbacquire(dbType[, dbParams]) -- Acquiert une connexion à une
     base de données et renvoie une classe database. Voir 'Connectivité aux bases de données' pour plus de
     détails.
    -        
    +
    + + +
    +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.
    +			-- Les valeurs peuvent être de type number, string
    +			-- ou boolean et sont stockées séparément pour
    +			-- chaque processus (elles ne seront donc pas d'une
    +			-- grande utilité si l'on utilise le mpm prefork).
    +                        
    +r:ivm_get("key")        -- Lit le contenu d'une variable définie via ivm_set. Renvoie
    +			-- le contenu de la variable si elle existe, ou nil
    +			-- dans le cas contraire.
    +                        
    +-- Voici un exemple de lecture/écriture qui sauvegarde une variable
    +-- globale en dehors de la VM :
    +function handle(r)
    +    -- La première VM qui effectue l'appel suivant n'obtiendra aucune
    +    -- valeur, et devra la créer
    +    local foo = r:ivm_get("cached_data")
    +    if not foo then
    +        foo = do_some_calcs() -- simulation de valeurs de retour
    +        r:ivm_set("cached_data", foo) -- définition globale de la variable
    +    end
    +    r:puts("La donnée en cache est : ", foo)
    +end			
    +
    + +
    +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).
    +
    + + +
    +r:mkdir(dir [,mode]) -- Crée un répertoire et définit son mode via le paramètre optionnel mode.
    +
    + + +
    +r:rmdir(dir) -- Supprime un répertoire.
    +
    + + +
    +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 split_path(path)
    +  return path:match("(.-)([^\\/]-%.?([^%.\\/]*))$")
    +end
    +
    +function handle(r)
    +  local cwd, _, _ = split_path(r.filename)
    +  for _, f in ipairs(r:get_direntries(cwd)) do
    +    local info = r:stat(cwd .. f)
    +    if info then
    +      local mtime = os.date(fmt, info.mtime / 1000000)
    +      local ftype = (info.filetype == 2) and "[dir] " or "[file]"
    +      r:puts( ("%s  %s %10i  %s\n"):format(ftype, mtime, info.size, f) )
    +    end
    +  end
    +end
    +
    + + +
    +r.date_parse_rfc(string) -- Interprète une chaîne date/heure et renvoie l'équivalent en secondes depuis epoche.
    +
    - -
    top
    @@ -548,8 +1180,56 @@ contenu suivant :

    Code d'état HTTP
    apache2.PROXYREQ_NONE, apache2.PROXYREQ_PROXY, apache2.PROXYREQ_REVERSE, apache2.PROXYREQ_RESPONSE
    Constantes internes utilisées par mod_proxy
    +
    apache2.AUTHZ_DENIED, apache2.AUTHZ_GRANTED, apache2.AUTHZ_NEUTRAL, apache2.AUTHZ_GENERAL_ERROR, apache2.AUTHZ_DENIED_NO_USER
    +
    constantes internes utilisées par mod_authz_core
    +

    Les autres codes d'état HTTP ne sont pas encore implémentés.

    +
    top
    +
    +

    Modification de contenu avec les filtres lua

    + +

    + Les fonctions de filtrage implémentées via les directives LuaInputFilter ou LuaOutputFilter sont conçues comme des + fonctions de 3ème phase non blocantes utilisant des sous-routines + pour suspendre et reprendre l'exécution d'une fonction lorsque des + paquets de données sont envoyés à la chaîne de filtrage. La + structure de base d'une telle fonction est : +

    +
    +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
    +    -- certaines conditions, et, si nous le jugeons nécessaire, refuser le
    +    -- filtrage d'une requête :
    +    if something_bad then
    +        return -- Le filtrage est sauté
    +    end
    +    -- Sans se préoccuper des données que nous devons éventuellement ajouter, un arrêt est réalisé ici.
    +    -- Noter que les filtres de sortie sont les seuls capables d'ajouter des éléments au début des données.
    +    -- Les filtres en entrée peuvent ajouter des éléments à la fin des données au stade final.
    +
    +    coroutine.yield([optional header to be prepended to the content])
    +
    +    -- Après cet arrêt, nous allons recevoir d'autres blocs de données, un par un ;
    +    -- nous pouvons les traiter comme il nous plaît et procéder à la réponse.
    +    -- Ces blocs sont conservés dans la variable globale 'bucket', nous réalisons donc
    +    -- une boucle pour vérifier que 'bucket' n'est pas vide :
    +    while bucket ~= nil do
    +        local output = mangle(bucket) -- Do some stuff to the content
    +        coroutine.yield(output) -- Return our new content to the filter chain
    +    end
    +
    +    -- Une fois les blocs de données épuisés, 'bucket' est positionné à une valeur vide ('nil'),
    +    -- ce qui va nous faire sortir de cette boucle et nous amener à l'étape suivante.
    +    -- On peut ajouter ce qu'on veut à la fin des données à cette étape, qui constitue le dernier
    +    -- 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
    +    
    +
    top

    Connectivité aux bases de données

    @@ -562,7 +1242,7 @@ commandes aupr

    L'exemple suivant montre comment se connecter à une base de données et extraire des informations d'une table :

    -function handler(r)
    +function handle(r)
         -- connexion à la base de données
         local database, err = r:dbacquire("mysql", "server=localhost,user=root,dbname=mydb")
         if not err then
    @@ -754,30 +1434,58 @@ le cas des requ
     d'autorisation, elle peut être appelée via la directive Require :

    -
    +
     LuaRoot /usr/local/apache2/lua
     LuaAuthzProvider foo authz.lua authz_check_foo
     <Location />
    -  Require foo bar
    +  Require foo johndoe
     </Location>
     
    -
    + +
    +require "apache2"
    +function authz_check_foo(r, who)
    +    if r.user ~= who then return apache2.AUTHZ_DENIED
    +    return apache2.AUTHZ_GRANTED
    +end
    +
    +
    top

    LuaCodeCache Directive

    - + -
    Description:Configure the compiled code cache.
    Description:Configure le cache de code compilé.
    Syntaxe:LuaCodeCache stat|forever|never
    Défaut:LuaCodeCache stat
    Contexte:configuration du serveur, serveur virtuel, répertoire, .htaccess
    AllowOverride:All
    Statut:Expérimental
    Module:mod_lua

    La documentation de cette directive - n'a pas encore t traduite. Veuillez vous reporter la version - en langue anglaise.

    +

    + Cette directive permet de définir le comportement du cache de code + en mémoire. La valeur par défaut est stat ; dans ce cas, le script + du niveau le plus haut (et pas les scripts inclus) est vérifié à + chaque fois que ce fichier est nécessaire, et est rechargé si la + date de modification est plus récente que celle du script déjà + chargé. Les autres valeurs permettent respectivement de garder le + fichier en cache perpétuellement (forever - jamais vérifié ni + remplacé), ou de ne jamais le mettre en cache (never).

    + +

    En général, les valeurs stat et forever sont utilisées pour un + serveur en production, et les valeurs stat ou never pour un serveur + en développement.

    + +

    Exemples :

    +LuaCodeCache stat
    +LuaCodeCache forever
    +LuaCodeCache never
    +    
    +
    + + +
    top

    LuaHookAccessChecker Directive

    @@ -914,7 +1622,50 @@ traitement de la requ -
    AllowOverride:All
    Statut:Expérimental
    Module:mod_lua

    ...

    + +

    Identique à la directive + LuaHookTranslateName, mais s'exécute à la + 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 :

    +
    +    LuaHookMapToStorage /path/to/lua/script.lua check_cache
    +    
    + +
    +require"apache2"
    +cached_files = {}
    +
    +function read_file(filename)
    +    local input = io.open(filename, "r")
    +    if input then
    +        local data = input:read("*a")
    +        cached_files[filename] = data
    +        file = cached_files[filename]
    +        input:close()
    +    end
    +    return cached_files[filename]
    +end
    +
    +function check_cache(r)
    +    if r.filename:match("%.png$") then -- Only match PNG files
    +        local file = cached_files[r.filename] -- Check cache entries
    +        if not file then
    +            file = read_file(r.filename)  -- Read file into cache
    +        end
    +        if file then -- If file exists, write it out
    +            r.status = 200
    +            r:write(file)
    +            r:info(("Sent %s to client from cache"):format(r.filename))
    +            return apache2.DONE -- skip default handler for PNG files
    +        end
    +    end
    +    return apache2.DECLINED -- If we had nothing to do, let others serve this.
    +end
    +    
    + + +
    top

    LuaHookTranslateName Directive

    @@ -1024,15 +1775,39 @@ parentes sont fusionn
    top

    LuaMapHandler Directive

    - - + + -
    Description:Map a path to a lua handler
    Syntaxe:LuaMapHandler uri-pattern /path/to/lua/script.lua [function-name]
    Description:Met en correspondance un chemin avec un gestionnaire lua
    Syntaxe:LuaMapHandler modele-uri /chemin/vers/lua/script.lua +[nom-fonction]
    Contexte:configuration du serveur, serveur virtuel, répertoire, .htaccess
    AllowOverride:All
    Statut:Expérimental
    Module:mod_lua

    La documentation de cette directive - n'a pas encore t traduite. Veuillez vous reporter la version - en langue anglaise.

    + +

    Cette directive permet de faire correspondre un modèle d'uri avec + une fonction de gestionnaire située dans un fichier spécifique. Elle + utilise les expressions rationnelles PCRE pour mettre en + correspondance l'uri, et supporte les groupes de correspondance + 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.

    +

    Exemples :

    +    LuaMapHandler /(\w+)/(\w+) /scripts/$1.lua handle_$2
    +    
    +
    +

    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.

    + +
    +    LuaMapHandler /bingo /scripts/wombat.lua
    +
    + +

    Cette directive invoquera la fonction "handle" qui est la + valeur par défaut si aucun nom de fonction spécifique n'est + spécifié.

    + +
    top

    LuaOutputFilter Directive

    @@ -1087,11 +1862,21 @@ LuaPackagePath /scripts/lib/?/init.lua - + -
    Description:Fournit un point d'entrée pour la gestion rapide du traitement de la requête
    Syntaxe:LuaQuickHandler /path/to/script.lua hook_function_name
    Contexte:configuration du serveur, serveur virtuel
    Contexte:configuration du serveur, serveur virtuel, répertoire, .htaccess
    AllowOverride:All
    Statut:Expérimental
    Module:mod_lua

    ...

    + +

    Cette phase s'exécute juste après l'attribution de la requête à + un serveur virtuel, et permet d'effectuer certains traitements avant + le déroulement des autres phases, ou de servir une requête sans + avoir à la traduire, l'associer à un espace de stockage, etc... + Comme cette phase s'exécute avant toute autre, les directives telles + que <Location> ou + <Directory> ne + sont pas encore prises en compte, car Les URI n'ont pas encore été + entièrement interprétés. +

    Contexte

    Cette directive ne peut être utilisée ni à l'intérieur d'une section <Directory> ou <Files>, ni dans un fichier htaccess.

    @@ -1119,8 +1904,7 @@ relatifs dans les directives de mod_lua - + @@ -1139,11 +1923,33 @@ once aussi dans la portée de la requête.
    conn:
    idem request, mais attaché à connection_rec
    +
    thread:
    Utilise l'interpréteur pendant toute la durée de vie du thread qui traite la requête (disponible seulement avec les MPMs threadés).
    +
    server:
    Le comportement est ici différent, car la + portée du serveur présente une durée de vie assez longue, et + plusieurs threads vont partager le même server_rec. Pour gérer tout + ceci, les états lua du serveur sont stockés dans une liste de ressources + apr. Les arguments min et max permettent + de spécifier les nombres minimaux et maximaux d'états lua à stocker + dans la liste.
    +

    En général, les portées thread et server + sont 2 à 3 fois plus rapides que les autres, car elles n'ont pas besoin + de régénérer de nouveaux états Lua à chaque requête (comme c'est le + cas avec le MPM event, où même les connexions persistantes utilisent un + nouveau thread pour chaque requête). Si vous pensez que vos scripts + n'auront pas de problème s'il réutilisent un état, alors les portées + thread ou server doivent être utilisées car + elles présenteront de meilleures performances. Alors que la portée + thread fournira les réponses les plus rapides, la portée + server utilisera moins de mémoire car les états sont + rassemblés dans des jeux, permettant par exemple à 1000 threads de + partager 100 états Lua, ne nécessitant ainsi que 10% de la mémoire + requise par la portée thread. +

    diff --git a/docs/manual/mod/mod_lua.xml.meta b/docs/manual/mod/mod_lua.xml.meta index 8fc1a0efdf..b55c7710e9 100644 --- a/docs/manual/mod/mod_lua.xml.meta +++ b/docs/manual/mod/mod_lua.xml.meta @@ -8,6 +8,6 @@ en - fr + fr diff --git a/docs/manual/mod/quickreference.html.fr b/docs/manual/mod/quickreference.html.fr index 01acf7b30f..a468c47517 100644 --- a/docs/manual/mod/quickreference.html.fr +++ b/docs/manual/mod/quickreference.html.fr @@ -725,7 +725,7 @@ journal erreurs - + - + - -
    Description:Une valeur parmi once, request, conn, thread -- la valeur par défaut est once
    Syntaxe:LuaScope once|request|conn|thread -- la valeur par défaur est -once
    Syntaxe:LuaScope once|request|conn|thread|server [min] [max]
    Défaut:LuaScope once
    Contexte:configuration du serveur, serveur virtuel, répertoire, .htaccess
    AllowOverride:All
    LuaAuthzProvider provider_name /path/to/lua/script.lua function_namesX
    Branche une fonction fournisseur d'autorisation dans mod_authz_core
    LuaCodeCache stat|forever|never stat svdhX
    Configure the compiled code cache.
    LuaCodeCache stat|forever|never stat svdhX
    Configure le cache de code compilé.
    LuaHookAccessChecker /chemin/vers/lua/script.lua hook_function_name [early|late]svdhX
    Fournit un point d'entrée pour la phase access_checker du traitement de la requête
    LuaHookAuthChecker /chemin/vers/lua/script.lua hook_function_name [early|late]svdhX
    Fournit un point d'entrée pour la phase auth_checker du @@ -745,16 +745,16 @@ traitement de la requ
    LuaInherit none|parent-first|parent-last parent-first svdhX
    Contrôle la manière dont les sections de configuration parentes sont fusionnées dans les enfants
    LuaInputFilter filter_name /path/to/lua/script.lua function_namesX
    Provide a Lua function for content input filtering
    LuaMapHandler uri-pattern /path/to/lua/script.lua [function-name]svdhX
    Map a path to a lua handler
    LuaMapHandler modele-uri /chemin/vers/lua/script.lua +[nom-fonction]svdhX
    Met en correspondance un chemin avec un gestionnaire lua
    LuaOutputFilter filter_name /path/to/lua/script.lua function_namesX
    Provide a Lua function for content output filtering
    LuaPackageCPath /chemin/vers/include/?.soasvdhX
    Ajoute un répertoire au package.cpath de lua
    LuaPackagePath /chemin/vers/include/?.luasvdhX
    Ajoute un répertoire au package.path de lua
    LuaQuickHandler /path/to/script.lua hook_function_namesvX
    Fournit un point d'entrée pour la gestion rapide du +
    LuaQuickHandler /path/to/script.lua hook_function_namesvdhX
    Fournit un point d'entrée pour la gestion rapide du traitement de la requête
    LuaRoot /chemin/vers/un/répertoiresvdhX
    Spécifie le chemin de base pour la résolution des chemins relatifs dans les directives de mod_lua
    LuaScope once|request|conn|thread -- la valeur par défaur est -once once svdhX
    Une valeur parmi once, request, conn, thread -- la valeur +
    LuaScope once|request|conn|thread|server [min] [max] once svdhX
    Une valeur parmi once, request, conn, thread -- la valeur par défaut est once
    <Macro nom [par1 .. parN]> diff --git a/docs/manual/programs/apxs.html.fr b/docs/manual/programs/apxs.html.fr index 3e4b760ca4..1f98e06d74 100644 --- a/docs/manual/programs/apxs.html.fr +++ b/docs/manual/programs/apxs.html.fr @@ -26,8 +26,6 @@  ko  |  tr 

    -
    Cette traduction peut être périmée. Vérifiez la version - anglaise pour les changements récents.

    apxs est un utilitaire permettant de compiler et d'installer des modules en tant qu'extensions du serveur HTTP @@ -241,6 +239,11 @@ tant qu'options supplémentaires à la commande libtool --mode=link. Vous pouvez l'utiliser pour ajouter des options locales spécifiques à l'éditeur de liens. + +

    -p
    +
    Avec cette option, apxs effectue l'édition de liens avec les + bibliothèques apr/apr-util. Elle permet de compiler les programmes + helper qui utilisent les bibliothèques apr/apr-util.
    diff --git a/docs/manual/programs/apxs.xml.meta b/docs/manual/programs/apxs.xml.meta index a1274c4d18..7c54e6b625 100644 --- a/docs/manual/programs/apxs.xml.meta +++ b/docs/manual/programs/apxs.xml.meta @@ -8,7 +8,7 @@ en - fr + fr ko tr diff --git a/docs/manual/programs/rotatelogs.html.fr b/docs/manual/programs/rotatelogs.html.fr index 2cc375d389..9424e75401 100644 --- a/docs/manual/programs/rotatelogs.html.fr +++ b/docs/manual/programs/rotatelogs.html.fr @@ -28,8 +28,6 @@  ko  |  tr 

    -
    Cette traduction peut être périmée. Vérifiez la version - anglaise pour les changements récents.

    rotatelogs est un programme simple à utiliser en conjonction avec la fonctionnalité d'Apache de redirection dans un @@ -53,6 +51,7 @@ [ -v ] [ -e ] [ -c ] + [ -n nombre-de-fichiers ] fichier-journal heure-de-rotation|taille-fichier(B|K|M|G) [ décalage ]

    @@ -116,6 +115,10 @@ op
    Envoie les messages de journalisation vers stdout. Ceci s'avère utile lorsque les journaux doivent être traités par un autre programme.
    +
    -n nombre-de-fichiers
    +
    Utilise une liste circulaire de fichiers sans repères de temps. Avec +-n 3, la série de fichiers conservés sera "logfile", "logfile.1", "logfile.2".
    +
    fichier-journal

    Le chemin et le nom de base du fichier journal. Si fichier-journal contient des caractères '%', il est considéré diff --git a/docs/manual/programs/rotatelogs.xml.meta b/docs/manual/programs/rotatelogs.xml.meta index 20244d44f2..a0baa665bf 100644 --- a/docs/manual/programs/rotatelogs.xml.meta +++ b/docs/manual/programs/rotatelogs.xml.meta @@ -8,7 +8,7 @@ en - fr + fr ko tr diff --git a/docs/manual/upgrading.html.fr b/docs/manual/upgrading.html.fr index a3865bb8a2..815d0be8ea 100644 --- a/docs/manual/upgrading.html.fr +++ b/docs/manual/upgrading.html.fr @@ -24,6 +24,8 @@

    Langues Disponibles:  en  |  fr 

    +
    Cette traduction peut être périmée. Vérifiez la version + anglaise pour les changements récents.

    Afin d'assister les utilisateurs lors de leurs opérations de mise à jour, nous maintenons un document diff --git a/docs/manual/upgrading.xml.fr b/docs/manual/upgrading.xml.fr index 9bbec8c6ef..d47fc7b258 100644 --- a/docs/manual/upgrading.xml.fr +++ b/docs/manual/upgrading.xml.fr @@ -3,7 +3,7 @@ - +