| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 15617 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.cache.frontends">
- <title>Les frontends Zend_Cache</title>
- <sect2 id="zend.cache.frontends.core">
- <title>Zend_Cache_Core</title>
- <sect3 id="zend.cache.frontends.core.introduction">
- <title>Introduction</title>
- <para>
- <classname>Zend_Cache_Core</classname> est un frontend spécial parce qu'il est le
- coeur du module. C'est le frontend de cache générique qui est étendu par les autres
- classes.
- </para>
- <note>
- <para>
- Tous les frontends héritent de <classname>Zend_Cache_Core</classname> ainsi ses
- méthodes et options (décrites ci-dessous) seront aussi disponibles dans les
- autres frontends, cependant ils ne sont pas documentés ici.
- </para>
- </note>
- </sect3>
- <sect3 id="zend.cache.frontends.core.options">
- <title>Options disponibles</title>
- <para>
- Ces options sont passées à la méthode de fabrique comme montrées dans les
- exemples précédents.
- </para>
- <table id="zend.cache.frontends.core.options.table">
- <title>Options du frontend Core</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Option</entry>
- <entry>Type de données</entry>
- <entry>Valeur par défaut</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><code>caching</code></entry>
- <entry><code>boolean</code></entry>
- <entry><code>true</code></entry>
- <entry>
- Active / désactive le cache (peut-être très utile pour le
- débogage de scripts en cache)
- </entry>
- </row>
- <row>
- <entry><code>cache_id_prefix</code></entry>
- <entry><code>string</code></entry>
- <entry><code>null</code></entry>
- <entry>
- Un préfixe pour tous les ID de cache, si réglé à
- <code>null</code>, aucun préfixe d'ID de cache ne sera utilisé. Le
- préfixe d'ID de cache sert essentiellement à créer des espaces de
- noms dans le cache, permettant à plusieurs applications ou sites
- Web d'utiliser un cache partagé. Chaque application ou site web
- peut utilisé un préfixe d'ID de cache différent et un préfixe peut
- aussi être utilisé plusieurs fois.
- </entry>
- </row>
- <row>
- <entry><code>lifetime</code></entry>
- <entry><code>integer</code></entry>
- <entry><code>3600</code></entry>
- <entry>
- Temps de vie (en secondes) du cache, si défini à
- <code>null</code>, le cache est valide indéfiniment
- </entry>
- </row>
- <row>
- <entry><code>logging</code></entry>
- <entry><code>boolean</code></entry>
- <entry><code>false</code></entry>
- <entry>
- Si défini à <code>true</code>, le logging par
- <classname>Zend_Log</classname> est activé (mais le système sera
- plus lent)
- </entry>
- </row>
- <row>
- <entry><code>write_control</code></entry>
- <entry><code>boolean</code></entry>
- <entry><code>true</code></entry>
- <entry>
- Active / désactive le contrôle d'écriture (le cache est lu
- juste après l'écriture pour détecter des entrées corrompues),
- activer "<code>writeControl</code>" va ralentir un petit peu
- l'écriture du cache, mais pas la lecture (il peut détecter des
- fichiers de cache corrompus, mais ceci n'est pas un contrôle
- parfait).
- </entry>
- </row>
- <row>
- <entry><code>automatic_serialization</code></entry>
- <entry><code>boolean</code></entry>
- <entry><code>false</code></entry>
- <entry>
- Active / désactive la sérialisation automatique, il peut
- être utilisé pour enregistrer directement des données qui ne sont
- pas des chaînes de caractères (mais c'est plus lent).
- </entry>
- </row>
- <row>
- <entry><code>automatic_cleaning_factor</code></entry>
- <entry><code>int</code></entry>
- <entry><code>0</code></entry>
- <entry>
- Active / désactive le nettoyage automatique ("garbage
- collector"): 0 signifie aucun nettoyage automatique de cache, 1
- signifie un nettoyage systématique du cache et x > 1 signifie le
- nettoyage aléatoire 1 fois toute les x écritures.
- </entry>
- </row>
- <row>
- <entry><code>ignore_user_abort</code></entry>
- <entry><code>boolean</code></entry>
- <entry><code>false</code></entry>
- <entry>
- Si réglé à <code>true</code>, le cache active un drapeau
- "<code>ignore_user_abort</code>" dans la méthode
- <code>save()</code> pour prévenir de la corruption du cache dans
- certains cas.
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect3>
- <sect3 id="zend.cache.core.examples">
- <title>Exemples</title>
- <para>Un exemple est donné dans le manuel, tout au début.</para>
- <para>
- Si vous stocker uniquement des chaînes de caractères dans le cache (parce
- qu'avec l'option "<code>automatic_serialization</code>", il est possible de stocker
- des booléens), vous pouvez utiliser une construction plus compact comme :
- </para>
- <programlisting language="php"><![CDATA[
- // nous avons déjà $cache
- $id = 'myBigLoop'; // id de cache de "ce que l'on veut cacher"
- if (!($data = $cache->load($id))) {
- // cache absent
- $data = '';
- for ($i = 0; $i < 10000; $i++) {
- $data = $data . $i;
- }
- $cache->save($data);
- }
- // [...] fait quelque chose avec $data
- // (affichage, passage ailleurs, etc, etc)
- ]]></programlisting>
- <para>
- Si vous voulez cacher des blocs multiples ou des instances de données, l'idée
- reste la même :
- </para>
- <programlisting language="php"><![CDATA[
- // on s'assure que l'on utilise des identifiant uniques
- $id1 = 'foo';
- $id2 = 'bar';
- // block 1
- if (!($data = $cache->load($id1))) {
- // cache absent
- $data = '';
- for ($i=0;$i<10000;$i++) {
- $data = $data . $i;
- }
- $cache->save($data);
- }
- echo($data);
- // ceci n'est pas affecté par la mise en cache
- echo('NEVER CACHED! ');
- // block 2
- if (!($data = $cache->load($id2))) {
- // cache missed
- $data = '';
- for ($i=0;$i<10000;$i++) {
- $data = $data . '!';
- }
- $cache->save($data);
- }
- echo($data);
- ]]></programlisting>
- <para>
- Si vous voulez cacher des valeurs "spéciales" (des booléens avec l'option
- "<code>automatic_serialization</code>") ou des chaînes vides, vous ne pouvez pas
- utiliser la construction compacte montrée ci-dessus. Vous devez tester de manière
- formelle l'état du cache.
- </para>
- <programlisting language="php"><![CDATA[
- // La construction compacte (ne pas utiliser si vous cachez
- // des chaînes et/ou des booléens)
- if (!($data = $cache->load($id))) {
- // cache absent
- // [...] on crée $data
- $cache->save($data);
- }
- // on fait qqch avec $data
- // [...]
- // La construction complète (fonctionne dans tous les cas)
- if (!($cache->test($id))) {
- // cache absent
- // [...] on crée $data
- $cache->save($data);
- } else {
- // lecture du cache
- $data = $cache->load($id);
- }
- // on fait qqch avec $data
- ]]></programlisting>
- </sect3>
- </sect2>
- <sect2 id="zend.cache.frontends.output">
- <title>Zend_Cache_Frontend_Output</title>
- <sect3 id="zend.cache.frontends.output.introduction">
- <title>Introduction</title>
- <para>
- <classname>Zend_Cache_Frontend_Output</classname> est un frontend capturant la
- sortie. Il utilise la bufferisation de sortie de PHP pour capturer tout ce qui
- passe entre les méthodes <code>start()</code> et <code>end()</code>.
- </para>
- </sect3>
- <sect3 id="zend.cache.frontends.output.options">
- <title>Options disponibles</title>
- <para>
- Ce frontend n'a pas d'options spécifiques autres que celles de
- <classname>Zend_Cache_Core</classname>.
- </para>
- </sect3>
- <sect3 id="zend.cache.frontends.output.examples">
- <title>Exemples</title>
- <para>
- Un exemple est donnée dans le manuel, tout au début. Le voici avec des
- changements mineurs :
- </para>
- <programlisting language="php"><![CDATA[
- // s'il y a un cache manquant, la bufferisation de sortie est lancée
- if (!$cache->start('mypage')) {
- // affiche tout comme d'habitude
- echo 'Hello world! ';
- echo 'This is cached ('.time().') ';
- $cache->end(); // affiche ce qu'il y a dans le buffer
- }
- echo 'This is never cached ('.time().').';
- ]]></programlisting>
- <para>
- Utiliser cette forme est assez simple pour définir une mise de cache de
- sortie dans vos projets déjà en production, avec peu de refactorisation de
- code.
- </para>
- </sect3>
- </sect2>
- <sect2 id="zend.cache.frontends.function">
- <title>Zend_Cache_Frontend_Function</title>
- <sect3 id="zend.cache.frontends.function.introduction">
- <title>Introduction</title>
- <para>
- <classname>Zend_Cache_Frontend_Function</classname> met en cache les résultats des
- appels de fonction. Elle a une seule méthode principale appelée <code>call()</code>
- qui prend un nom de fonction et des paramètres pour l'appel dans un tableau.
- </para>
- </sect3>
- <sect3 id="zend.cache.frontends.function.options">
- <title>Options disponibles</title>
- <table id="zend.cache.frontends.function.options.table">
- <title>Options du frontend Function</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Option</entry>
- <entry>Type de données</entry>
- <entry>Valeur par défaut</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><code>cache_by_default</code></entry>
- <entry><code>boolean</code></entry>
- <entry><code>true</code></entry>
- <entry>
- si <code>true</code>, les appels de fonction seront mis en
- cache par défaut
- </entry>
- </row>
- <row>
- <entry><code>cached_functions</code></entry>
- <entry><code>array</code></entry>
- <entry></entry>
- <entry>les noms de fonctions seront toujours mis en cache</entry>
- </row>
- <row>
- <entry><code>non_cached_functions</code></entry>
- <entry><code>array</code></entry>
- <entry></entry>
- <entry>
- les noms de fonctions ne doivent jamais être mis en
- cache
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect3>
- <sect3 id="zend.cache.frontends.function.examples">
- <title>Exemples</title>
- <para>
- Utiliser la fonction <code>call()</code> est la même chose qu'utiliser
- <code>call_user_func_array()</code> en PHP :
- </para>
- <programlisting language="php"><![CDATA[
- $cache->call('veryExpensiveFunc', $params);
- // $params est dans un tableau par exemple, pour appeler
- // (avec mise en cache) : veryExpensiveFunc(1, 'foo', 'bar')
- // vous devriez utiliser
- $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar'));
- ]]></programlisting>
- <para>
- <classname>Zend_Cache_Frontend_Function</classname> est assez intelligente pour
- mettre en cache la valeur de retour de la fonction, ainsi que sa sortie interne.
- </para>
- <note>
- <para>
- Vous pouvez passer n'importe quelle fonction utilisateur à l'exception de
- <code>array()</code>, <code>echo()</code>, <code>empty()</code>,
- <code>eval()</code>, <code>exit()</code>, <code>isset()</code>,
- <code>list()</code>, <code>print()</code> et <code>unset()</code>.
- </para>
- </note>
- </sect3>
- </sect2>
- <sect2 id="zend.cache.frontends.class">
- <title>Zend_Cache_Frontend_Class</title>
- <sect3 id="zend.cache.frontends.class.introduction">
- <title>Introduction</title>
- <para>
- <classname>Zend_Cache_Frontend_Class</classname> est différent de
- <classname>Zend_Cache_Frontend_Function</classname> parce qu'elle permet de mettre
- en cache les objets et les méthodes statiques.
- </para>
- </sect3>
- <sect3 id="zend.cache.frontends.class.options">
- <title>Options disponibles</title>
- <table id="zend.cache.frontends.class.options.table">
- <title>Options du frontend Class</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Option</entry>
- <entry>Type de données</entry>
- <entry>Valeur par défaut</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><code>cached_entity</code> (requis)</entry>
- <entry><code>mixed</code></entry>
- <entry></entry>
- <entry>
- si défini avec un nom de classe, nous allons mettre en cache
- une classe abstraite et utiliser uniquement les appels
- statiques ; si défini avec un objet, nous allons mettre en
- cache les méthodes de cet objet.
- </entry>
- </row>
- <row>
- <entry><code>cache_by_default</code></entry>
- <entry><code>boolean</code></entry>
- <entry><code>true</code></entry>
- <entry>
- si <code>true</code>, les appels vont être cachés par
- défaut
- </entry>
- </row>
- <row>
- <entry><code>cached_methods</code></entry>
- <entry><code>array</code></entry>
- <entry></entry>
- <entry>
- les noms des méthodes qui seront toujours mis en
- cache
- </entry>
- </row>
- <row>
- <entry><code>non_cached_methods</code></entry>
- <entry><code>array</code></entry>
- <entry></entry>
- <entry>
- les noms des méthodes qui ne doivent jamais être mises en
- cache
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect3>
- <sect3 id="zend.cache.frontends.class.examples">
- <title>Exemples</title>
- <para>Par exemple, pour mettre en cache des appels statiques :</para>
- <programlisting language="php"><![CDATA[
- class test {
- // Méthode statique
- public static function foobar($param1, $param2) {
- echo "foobar_output($param1, $param2)";
- return "foobar_return($param1, $param2)";
- }
- }
- // [...]
- $frontendOptions = array(
- 'cached_entity' => 'test' // Le nom de la classe
- );
- // [...]
- // l'appel caché
- $res = $cache->foobar('1', '2');
- ]]></programlisting>
- <para>Pour mettre en cache des appels classiques aux méthodes :</para>
- <programlisting language="php"><![CDATA[
- class test {
- private $_string = 'hello !';
- public function foobar2($param1, $param2) {
- echo($this->_string);
- echo "foobar2_output($param1, $param2)";
- return "foobar2_return($param1, $param2)";
- }
- }
- // [...]
- $frontendOptions = array(
- 'cached_entity' => new test() // Une instance de la classe
- );
- // [...]
- // L'appel mis en cache
- $res = $cache->foobar2('1', '2');
- ]]></programlisting>
- </sect3>
- </sect2>
- <sect2 id="zend.cache.frontends.file">
- <title>Zend_Cache_Frontend_File</title>
- <sect3 id="zend.cache.frontends.file.introduction">
- <title>Introduction</title>
- <para>
- <classname>Zend_Cache_Frontend_File</classname> est un frontend piloté par la
- modification d'un "fichier maître". C'est vraiment intéressant, par exemple, dans
- les problématiques de configuration ou de templates. Il est également possible
- d'utiliser plusieurs fichiers maîtres.
- </para>
- <para>
- Par exemple, vous avez un fichier de configuration XML qui est analysé par
- une fonction, celle-ci retourne un "objet de configuration" (comme avec
- <classname>Zend_Config</classname>). Avec
- <classname>Zend_Cache_Frontend_File</classname>, vous pouvez stocker l'objet de
- configuration dans le cache (pour éviter d'analyser le fichier de configuration XML
- chaque fois) mais avec une sorte de forte dépendance au fichier maître. Ainsi si le
- fichier XML de configuration est modifié, le cache est immédiatement invalide.
- </para>
- </sect3>
- <sect3 id="zend.cache.frontends.file.options">
- <title>Options disponibles</title>
- <table id="zend.cache.frontends.file.options.table">
- <title>Options du frontend File</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Option</entry>
- <entry>Type de données</entry>
- <entry>Valeur par défaut</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><code>master_file (déprécié)</code></entry>
- <entry><code>string</code></entry>
- <entry><code></code></entry>
- <entry>le chemin complet et le nom du fichier maître</entry>
- </row>
- <row>
- <entry><code>master_files</code></entry>
- <entry><code>array</code></entry>
- <entry><code></code></entry>
- <entry>un tableau de chemin complet de fichiers maîtres</entry>
- </row>
- <row>
- <entry><code>master_files_mode</code></entry>
- <entry><code>string</code></entry>
- <entry><classname>Zend_Cache_Frontend_File::MODE_OR</classname></entry>
- <entry>
- <classname>Zend_Cache_Frontend_File::MODE_AND</classname> oU
- <classname>Zend_Cache_Frontend_File::MODE_OR</classname> ; si
- <code>MODE_AND</code>, alors tous les fichiers maîtres doivent être
- modifiés pour rendre invalide le cache, si <code>MODE_OR</code>,
- alors un seul fichier maître modifié est nécessaire pour invalider
- le cache
- </entry>
- </row>
- <row>
- <entry><code>ignore_missing_master_files</code></entry>
- <entry><code>boolean</code></entry>
- <entry><code>false</code></entry>
- <entry>
- si <code>true</code>, l'absence de fichiers maîtres est
- ignoré silencieusement (sinon une exception est levée)
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect3>
- <sect3 id="zend.cache.frontends.file.examples">
- <title>Exemples</title>
- <para>
- L'utilisation de ce frontend est la même que celle de
- <classname>Zend_Cache_Core</classname>. Il n'y a pas besoin d'exemple spécifique -
- la seule chose à faire est de définir le <code>master_file</code> lors de
- l'utilisation de la fabrique.
- </para>
- </sect3>
- </sect2>
- <sect2 id="zend.cache.frontends.page">
- <title>Zend_Cache_Frontend_Page</title>
- <sect3 id="zend.cache.frontends.page.introduction">
- <title>Introduction</title>
- <para>
- <classname>Zend_Cache_Frontend_Page</classname> est comme
- <classname>Zend_Cache_Frontend_Output</classname> mais créé pour une page complète.
- Il est impossible d'utiliser <classname>Zend_Cache_Frontend_Page</classname> pour
- mettre en cache un bloc unique.
- </para>
- <para>
- D'un autre côté, le "cache ID", est calculé automatiquement avec
- <code>$_SERVER['REQUEST_URI']</code> et (en fonction des options)
- <code>$_GET</code>, <code>$_POST</code>, <code>$_SESSION</code>,
- <code>$_COOKIE</code>, <code>$_FILES</code>. De plus, vous avez seulement une
- méthode pour appeler (<code>start()</code>) parce que l'appel à <code>end()</code>
- est totalement automatique lorsque la page est terminé.
- </para>
- <para>
- Pour le moment, ceci n'est pas implémenté mais nous prévoyons d'ajouter un
- système de condition HTTP pour économiser de la bande passante (le système émettra
- un en-tête "HTTP 304 Not Modified" si le cache est trouvé, et si le navigateur a
- déjà la bonne version).
- </para>
- </sect3>
- <sect3 id="zend.cache.frontends.page.options">
- <title>Options disponibles</title>
- <table id="zend.cache.frontends.page.options.table">
- <title>Options du frontend Page</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Option</entry>
- <entry>Type de données</entry>
- <entry>Valeur par défaut</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><code>http_conditional</code></entry>
- <entry><code>boolean</code></entry>
- <entry><code>false</code></entry>
- <entry>
- utilisez le système <code>httpConditionnal</code> ou pas
- (pas encore implémenté)
- </entry>
- </row>
- <row>
- <entry><code>debug_header</code></entry>
- <entry><code>boolean</code></entry>
- <entry><code>false</code></entry>
- <entry>
- si <code>true</code>, un texte de débogage est ajouté avant
- chaque page de cache
- </entry>
- </row>
- <row>
- <entry><code>default_options</code></entry>
- <entry><code>array</code></entry>
- <entry><code>array(...see below...)</code></entry>
- <entry>
- un tableau associatif d'options par défaut :
- <itemizedlist>
- <listitem>
- <para><code>(boolean, true par défaut) cache</code> :
- le cache est activé si <code>true</code>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(boolean, false par défaut)
- cache_with_get_variables</code> : si
- <code>true</code>, le cache est toujours activé même s'il
- y a des variables dans le tableau <code>$_GET</code>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(boolean, false par défaut)
- cache_with_post_variables</code> : si
- <code>true</code>, le cache est toujours activé même s'il
- y a des variables dans le tableau <code>$_POST</code>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(boolean, false par défaut)
- cache_with_session_variables</code> : si
- <code>true</code>, le cache est toujours activé s'il y a
- des variables dans le tableau <code>$_SESSION</code>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(boolean, false par défaut)
- cache_with_files_variables</code> : si
- <code>true</code>, le cache est toujours activé s'il y a
- des variables dans le tableau <code>$_FILES</code>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(boolean, false par défaut)
- cache_with_cookie_variables</code> : si
- <code>true</code>, le cache est toujours activé s'il y a
- des variables dans le tableau <code>$_COOKIE</code>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(boolean, true par défaut)
- make_id_with_get_variables</code> : si
- <code>true</code>, l'identifiant du cache sera dépendant
- du contenu du tableau <code>$_GET</code>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(boolean, true par défaut)
- make_id_with_post_variables</code> : si
- <code>true</code>, l'identifiant du cache sera dépendant
- du contenu du tableau <code>$_POST</code>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(boolean, true par défaut)
- make_id_with_session_variables</code> : si
- <code>true</code>, l'identifiant du cache sera dépendant
- du contenu du tableau <code>$_SESSION</code>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(boolean, true par défaut)
- make_id_with_files_variables</code> : si
- <code>true</code>, l'identifiant du cache sera dépendant
- du contenu du tableau <code>$_FILES</code>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(boolean, true par défaut)
- make_id_with_cookie_variables</code> : si
- <code>true</code>, l'identifiant du cache sera dépendant
- du contenu du tableau <code>$_COOKIE</code>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(int, false par défaut)
- specific_lifetime</code> : si <code>true</code>, la
- durée de vie fournie sera utilisée pour l'expression
- régulière choisie
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(array, array() par défaut) tags</code> :
- balises pour l'enregistrement en cache
- </para>
- </listitem>
- <listitem>
- <para>
- <code>(int, null par défaut) priority</code> :
- priorité (si le backend le supporte)
- </para>
- </listitem>
- </itemizedlist></entry>
- </row>
- <row>
- <entry><code>regexps</code></entry>
- <entry><code>array</code></entry>
- <entry><code>array()</code></entry>
- <entry>
- un tableau associatif pour définir les options, uniquement
- pour certaines <code>REQUEST_URI</code>, les clés sont des
- expressions régulières PCRE, les valeurs sont des tableaux
- associatifs avec des options spécifiques pour définir si les
- expressions régulières correspondent dans
- <code>$_SERVER['REQUEST_URI']</code> (voir les options par défaut
- pour la liste des options disponibles) ; si plusieurs expressions
- régulières correspondent à un <code>$_SERVER['REQUEST_URI']</code>,
- seule la dernière sera utilisée.
- </entry>
- </row>
- <row>
- <entry><code>memorize_headers</code></entry>
- <entry><code>array</code></entry>
- <entry><code>array()</code></entry>
- <entry>
- un tableau de chaînes correspondant aux noms d'en-têtes
- HTTP. Les en-têtes listés seront stockées avec les données de cache
- et renvoyées lorsque le cache sera rappelé.
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect3>
- <sect3 id="zend.cache.frontends.page.examples">
- <title>Exemples</title>
- <para>
- L'utilisation de <classname>Zend_Cache_Frontend_Page</classname> est vraiment
- trivial :
- </para>
- <programlisting language="php"><![CDATA[
- // [...] // require, configuration et factory
- $cache->start();
- // si le cache est trouvé, le résultat est envoyé au navigateur
- // et le script s'arrête là
- // reste de la page ...
- ]]></programlisting>
- <para>
- Un exemple plus complexe qui montre un moyen pour obtenir une gestion
- centralisée du cache dans un fichier d'amorçage (pour utiliser avec
- <classname>Zend_Controller</classname> par exemple)
- </para>
- <programlisting language="php"><![CDATA[
- // vous devriez éviter de mettre trop de lignes avant la section
- // de cache par exemple, pour des performances optimales,
- // "require_once" ou "Zend_Loader::loadClass" devrait être
- // après la section de cache
- $frontendOptions = array(
- 'lifetime' => 7200,
- 'debug_header' => true, // pour le déboguage
- 'regexps' => array(
- // met en cache la totalité d'IndexController
- '^/$' => array('cache' => true),
- // met en cache la totalité d'IndexController
- '^/index/' => array('cache' => true),
- // nous ne mettons pas en cache l'ArticleController...
- '^/article/' => array('cache' => false),
- // ...mais nous mettons en cache l'action "view"
- '^/article/view/' => array(
- // de cet ArticleController
- 'cache' => true,
- // et nous mettons en cache même lorsqu'il y a
- // des variables dans $_POST
- 'cache_with_post_variables' => true,
- // (mais le cache sera dépendent du tableau $_POST)
- 'make_id_with_post_variables' => true,
- )
- )
- );
- $backendOptions = array(
- 'cache_dir' => '/tmp/'
- );
- // obtenir un objet Zend_Cache_Frontend_Page
- $cache = Zend_Cache::factory('Page',
- 'File',
- $frontendOptions,
- $backendOptions);
- $cache->start();
- // si nous trouvons un cache, le résultat est envoyé au navigateur,
- // et le script s'arrête là
- // [...] la fin du fichier de démarrage
- // (ces lignes ne seront pas exécutées si on trouve un cache)
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.cache.frontends.page.cancel">
- <title>La méthode spécifique cancel()</title>
- <para>
- A cause de problèmes de design, dans certains cas (par exemple quand on
- utilise des codes de retour HTTP autres que HTTP/200), vous pouvez avoir besoin de
- stopper le processus de mise en cache courant. Il a donc été introduit pour ce
- frontend en particulier, la méthode <code>cancel()</code>.
- </para>
- <programlisting language="php"><![CDATA[
- // [...] require, configuration et fabrique
- $cache->start();
- // [...]
- if ($unTest) {
- $cache->cancel();
- // [...]
- }
- // [...]
- ]]></programlisting>
- </sect3>
- </sect2>
- </sect1>
|