You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by lg...@apache.org on 2013/02/02 15:01:05 UTC
svn commit: r1441749 - in /httpd/httpd/branches/2.4.x/docs/manual:
expr.xml.fr howto/ssi.xml.fr mod/mod_cache.xml.fr mod/mod_lua.xml.fr
Author: lgentis
Date: Sat Feb 2 14:01:05 2013
New Revision: 1441749
URL: http://svn.apache.org/viewvc?rev=1441749&view=rev
Log:
Updates.
Modified:
httpd/httpd/branches/2.4.x/docs/manual/expr.xml.fr
httpd/httpd/branches/2.4.x/docs/manual/howto/ssi.xml.fr
httpd/httpd/branches/2.4.x/docs/manual/mod/mod_cache.xml.fr
httpd/httpd/branches/2.4.x/docs/manual/mod/mod_lua.xml.fr
Modified: httpd/httpd/branches/2.4.x/docs/manual/expr.xml.fr
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/docs/manual/expr.xml.fr?rev=1441749&r1=1441748&r2=1441749&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/docs/manual/expr.xml.fr (original)
+++ httpd/httpd/branches/2.4.x/docs/manual/expr.xml.fr Sat Feb 2 14:01:05 2013
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
-<!-- English Revision: 1422598:1440056 (outdated) -->
+<!-- English Revision : 1422598 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
@@ -471,7 +471,8 @@ listfunction ::= listfuncname "<strong>(
<tr><td><code>resp</code></td>
<td>Lit l'en-tête de réponse HTTP</td><td></td></tr>
<tr><td><code>reqenv</code></td>
- <td>Recherche une variable d'environnement de requête</td><td></td></tr>
+ <td>Recherche une variable d'environnement de requête (on
+ peut aussi utiliser le raccourci <code>v</code>).</td><td></td></tr>
<tr><td><code>osenv</code></td>
<td>Recherche une variable d'environnement du système
d'exploitation</td><td></td></tr>
Modified: httpd/httpd/branches/2.4.x/docs/manual/howto/ssi.xml.fr
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/docs/manual/howto/ssi.xml.fr?rev=1441749&r1=1441748&r2=1441749&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/docs/manual/howto/ssi.xml.fr (original)
+++ httpd/httpd/branches/2.4.x/docs/manual/howto/ssi.xml.fr Sat Feb 2 14:01:05 2013
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1435328:1440754 (outdated) -->
+<!-- English Revision : 1440754 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
@@ -481,12 +481,6 @@ HTML préexistants.</p>
<!--#endif -->
</example>
- <p>Notez que je n'ai rien contre IE sur Macintosh - J'ai juste
- phosphoré quelques heures la semaine dernière pour faire fonctionner
- du JavaScript sous IE sur Macintosh, alors qu'il fonctionnait sous
- tout autre environnement. Ce qui précède a constitué un
- contournement provisoire.</p>
-
<p>Toute autre variable (que vous avez définie, ou une variable
d'environnement normale) peut être utilisée dans les expressions
conditionnelles. Associée à la possibilité avec Apache de définir
Modified: httpd/httpd/branches/2.4.x/docs/manual/mod/mod_cache.xml.fr
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/docs/manual/mod/mod_cache.xml.fr?rev=1441749&r1=1441748&r2=1441749&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/docs/manual/mod/mod_cache.xml.fr (original)
+++ httpd/httpd/branches/2.4.x/docs/manual/mod/mod_cache.xml.fr Sat Feb 2 14:01:05 2013
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1371059:1439108 (outdated) -->
+<!-- English Revision : 1439108 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
@@ -432,23 +432,25 @@ URL</var>]</syntax>
être activée.</p>
<highlight language="config">
-# Mise en cache de contenu
+# Mise en cache de contenu (gestionnaire normal seulement)
+CacheQuickHandler off
<Location /foo>
CacheEnable disk
</Location>
-# Mise en cache via une expression rationnelle
+# Mise en cache via une expression rationnelle (gestionnaire normal seulement)
+CacheQuickHandler off
<LocationMatch foo$>
CacheEnable disk
</LocationMatch>
-# Mise en cache des URLs mandatées
+# Mise en cache des URLs mandatées (gestionnaire normal ou rapide)
CacheEnable disk /
-# Mise en cache des URLs FTP mandatées
+# Mise en cache des URLs FTP mandatées (gestionnaire normal ou rapide)
CacheEnable disk ftp://
-# Mise en cache des contenus situés dans www.example.org
+# Mise en cache des contenus situés dans www.example.org (gestionnaire normal ou rapide)
CacheEnable disk http://www.example.org/
</highlight>
Modified: httpd/httpd/branches/2.4.x/docs/manual/mod/mod_lua.xml.fr
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/docs/manual/mod/mod_lua.xml.fr?rev=1441749&r1=1441748&r2=1441749&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/docs/manual/mod/mod_lua.xml.fr (original)
+++ httpd/httpd/branches/2.4.x/docs/manual/mod/mod_lua.xml.fr Sat Feb 2 14:01:05 2013
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1425749:1439099 (outdated) -->
+<!-- English Revision : 1439099 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
@@ -447,6 +447,13 @@ end
r:write("une simple chaîne") -- affichage dans le
corps de la réponse
</highlight>
+
+ <highlight language="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.
+ </highlight>
</dd>
</dl>
@@ -492,7 +499,185 @@ contenu suivant :</p>
<p>Les autres codes d'état HTTP ne sont pas encore implémentés.</p>
</section>
+<section id="databases">
+ <title>Connectivité aux bases de données</title>
+ <p>Mod_lua implémente une fonctionnalité basique de connexion aux
+bases de données permettant d'envoyer des requêtes ou d'exécuter des
+commandes auprès des moteurs de base de données les plus courants
+(mySQL, PostgreSQL, FreeTDS, ODBC, SQLite, Oracle), ainsi que mod_dbd.
+ </p>
+ <p>L'exemple suivant montre comment se connecter à une base de
+données et extraire des informations d'une table :</p>
+ <highlight language="lua">
+function handler(r)
+ -- connexion à la base de données
+ local database, err = r:dbacquire("mysql", "server=localhost,user=root,dbname=mydb")
+ if not err then
+ -- Sélection de certaines informations
+ local results, err = database:select(r, "SELECT `name`, `age` FROM `people` WHERE 1")
+ if not err then
+ local rows = results(0) -- extrait tous les enregistrements en mode synchrone
+ for k, row in pairs(rows) do
+ r:puts( string.format("Name: %s, Age: %s<br/>", row[1], row[2]) )
+ end
+ else
+ r:puts("Database query error: " .. err)
+ end
+ database:close()
+ else
+ r:puts("Connexion à la base de données impossible : " .. err)
+ end
+end
+ </highlight>
+ <p>
+ Pour utiliser <module>mod_dbd</module>, spécifiez
+<code>mod_dbd</code> comme type de base de données, ou laissez le champ
+vide :
+ </p>
+ <highlight language="lua">
+ local database = r:dbacquire("mod_dbd")
+ </highlight>
+ <section id="database_object">
+ <title>L'objet database et ses méthodes</title>
+ <p>L'objet database renvoyé par <code>dbacquire</code> possède
+les méthodes suivantes :</p>
+ <p><strong>Sélection normale et requête vers une base de données
+:</strong></p>
+ <highlight language="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")
+ </highlight>
+ <p><strong>Utilisation de requêtes préparées (recommandé) :</strong></p>
+ <highlight language="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
+end
+
+-- Extrait une requête préparée depuis une directive DBDPrepareSQL :
+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
+</highlight>
+ <p><strong>Echappement de valeurs, fermeture de la base données,
+etc...</strong></p>
+ <highlight language="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 :
+database:close()
+
+-- Vérifie si une connexion à une base de données est en service et
+opérationnelle :
+local connected = database:active()
+ </highlight>
+ </section>
+ <section id="result_sets">
+ <title>Travail avec les jeux d'enregistrements renvoyés par les requêtes</title>
+ <p>Les jeux d'enregistrements renvoyés par <code>db:select</code> ou par des
+requêtes préparées créées par <code>db:prepare</code> permettent de
+sélectionner des enregistrements en mode synchrone ou
+asynchrone, selon le nombre d'enregistrements spécifié :<br/>
+ <code>result(0)</code> sélectionne tous les enregistrements en mode
+synchrone en renvoyant une table d'enregistrements.<br/>
+ <code>result(-1)</code> sélectionne le prochain enregistrement disponible en
+mode asynchrone.<br/>
+ <code>result(N)</code> sélectionne l'enregistrement numéro
+<code>N</code> en mode asynchrone.
+ </p>
+ <highlight language="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
+ </highlight>
+ <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>
+ <highlight language="lua">
+function rows(resultset, async)
+ local a = 0
+ local function getnext()
+ a = a + 1
+ local row = resultset(-1)
+ return row and a or nil, row
+ end
+ if not async then
+ return pairs(resultset(0))
+ else
+ return getnext, self
+ end
+end
+
+local statement, err = db:prepare(r, "SELECT * FROM `tbl` WHERE `age` > %u")
+if not err then
+ -- sélectionne des enregistrements en mode asynchrone :
+ local result, err = statement:select(20)
+ if not err then
+ for index, row in rows(result, true) do
+ ....
+ end
+ end
+
+ -- sélectionne des enregistrements en mode synchrone :
+ local result, err = statement:select(20)
+ if not err then
+ for index, row in rows(result, false) do
+ ....
+ end
+ end
+end
+ </highlight>
+ </section>
+ <section id="closing_databases">
+ <title>Fermeture d'une connexion à une base de données</title>
+
+ <p>Lorsqu'elles ne sont plus utilisées, les connexions aux bases de
+données doivent être fermées avec <code>database:close()</code>. Si vous
+ne les fermez pas manuellement, mod_lua les fermera peut-être en tant
+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>
+ <highlight language="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
+</highlight>
+ </section>
+ <section id="database_caveat">
+ <title>Précautions à prendre lorsque l'on travaille avec les bases
+de données</title>
+ <p>Bien que les fonctions <code>query</code> et <code>run</code>
+soient toujours disponibles, il est recommandé d'utiliser des requêtes
+préparées chaque fois que possible, afin d'une part d'optimiser les
+performances (si votre connexion reste longtemps en vie), et d'autre part
+minimiser le risque d'attaques par injection SQL. Les fonctions
+<code>run</code> et <code>query</code> ne doivent être utilisées que
+lorsque la requête ne contient pas de variables (requête statique). Dans
+le cas des requêtes dynamiques, utilisez <code>db:prepare</code> ou
+<code>db:prepared</code>.
+ </p>
+ </section>
+
+</section>
<directivesynopsis>
<name>LuaRoot</name>