| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- 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><emphasis>caching</emphasis></entry>
- <entry><type>Boolean</type></entry>
- <entry><constant>TRUE</constant></entry>
- <entry>
- Active / désactive le cache (peut-être très utile pour le
- débogage de scripts en cache)
- </entry>
- </row>
- <row>
- <entry><emphasis>cache_id_prefix</emphasis></entry>
- <entry><type>String</type></entry>
- <entry><constant>NULL</constant></entry>
- <entry>
- Un préfixe pour tous les ID de cache, si réglé à
- <constant>NULL</constant>, 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><emphasis>lifetime</emphasis></entry>
- <entry><type>Integer</type></entry>
- <entry>3600</entry>
- <entry>
- Temps de vie (en secondes) du cache, si défini à
- <constant>NULL</constant>, le cache est valide indéfiniment
- </entry>
- </row>
- <row>
- <entry><emphasis>logging</emphasis></entry>
- <entry><type>Boolean</type></entry>
- <entry><constant>FALSE</constant></entry>
- <entry>
- Si défini à <constant>TRUE</constant>, la journalisation par
- <classname>Zend_Log</classname> est activé (mais le système sera
- plus lent)
- </entry>
- </row>
- <row>
- <entry><emphasis>write_control</emphasis></entry>
- <entry><type>Boolean</type></entry>
- <entry><constant>TRUE</constant></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 "writeControl" 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><emphasis>automatic_serialization</emphasis></entry>
- <entry><type>Boolean</type></entry>
- <entry><constant>FALSE</constant></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><emphasis>automatic_cleaning_factor</emphasis></entry>
- <entry><type>Integer</type></entry>
- <entry>0</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><emphasis>ignore_user_abort</emphasis></entry>
- <entry><type>Boolean</type></entry>
- <entry><constant>FALSE</constant></entry>
- <entry>
- Si réglé à <constant>TRUE</constant>, le cache active le drapeau
- <acronym>PHP</acronym> "ignore_user_abort" dans la méthode
- <methodname>save()</methodname> 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 "automatic_serialization", 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)) === false ) {
- // 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)) === false ) {
- // 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)) === false ) {
- // 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
- "automatic_serialization") 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)) === false ) {
- // 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 <acronym>PHP</acronym> pour
- capturer tout ce qui passe entre les méthodes <methodname>start()</methodname> et
- <methodname>end()</methodname>.
- </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
- <methodname>call()</methodname> 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><emphasis>cache_by_default</emphasis></entry>
- <entry><type>Boolean</type></entry>
- <entry><constant>TRUE</constant></entry>
- <entry>
- si <constant>TRUE</constant>, les appels de fonction seront mis en
- cache par défaut
- </entry>
- </row>
- <row>
- <entry><emphasis>cached_functions</emphasis></entry>
- <entry><type>Array</type></entry>
- <entry>''</entry>
- <entry>les noms de fonctions seront toujours mis en cache</entry>
- </row>
- <row>
- <entry><emphasis>non_cached_functions</emphasis></entry>
- <entry><type>Array</type></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 <methodname>call()</methodname> est la même chose qu'utiliser
- <methodname>call_user_func_array()</methodname> en <acronym>PHP</acronym> :
- </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
- <methodname>array()</methodname>, <methodname>echo()</methodname>,
- <methodname>empty()</methodname>, <methodname>eval()</methodname>,
- <methodname>exit()</methodname>, <methodname>isset()</methodname>,
- <methodname>list()</methodname>, <methodname>print()</methodname>
- et <methodname>unset()</methodname>.
- </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><emphasis>cached_entity</emphasis> (requis)</entry>
- <entry><type>Mixed</type></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><emphasis>cache_by_default</emphasis></entry>
- <entry><type>Boolean</type></entry>
- <entry><constant>TRUE</constant></entry>
- <entry>
- si <constant>TRUE</constant>, les appels vont être cachés par
- défaut
- </entry>
- </row>
- <row>
- <entry><emphasis>cached_methods</emphasis></entry>
- <entry><type>Array</type></entry>
- <entry></entry>
- <entry>
- les noms des méthodes qui seront toujours mis en
- cache
- </entry>
- </row>
- <row>
- <entry><emphasis>non_cached_methods</emphasis></entry>
- <entry><type>Array</type></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 <acronym>XML</acronym> 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
- <acronym>XML</acronym> chaque fois) mais avec une sorte de forte dépendance au
- fichier maître. Ainsi si le fichier <acronym>XML</acronym> 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><emphasis>master_file</emphasis> (déprécié)</entry>
- <entry><type>String</type></entry>
- <entry>''</entry>
- <entry>le chemin complet et le nom du fichier maître</entry>
- </row>
- <row>
- <entry><emphasis>master_files</emphasis></entry>
- <entry><type>Array</type></entry>
- <entry><methodname>array()</methodname></entry>
- <entry>un tableau de chemin complet de fichiers maîtres</entry>
- </row>
- <row>
- <entry><emphasis>master_files_mode</emphasis></entry>
- <entry><type>String</type></entry>
- <entry><constant>Zend_Cache_Frontend_File::MODE_OR</constant></entry>
- <entry>
- <constant>Zend_Cache_Frontend_File::MODE_AND</constant> ou
- <constant>Zend_Cache_Frontend_File::MODE_OR</constant> ; si
- <constant>MODE_AND</constant>, alors tous les fichiers maîtres
- doivent être modifiés pour rendre invalide le cache, si
- <constant>MODE_OR</constant>, alors un seul fichier maître modifié
- est nécessaire pour invalider le cache
- </entry>
- </row>
- <row>
- <entry><emphasis>ignore_missing_master_files</emphasis></entry>
- <entry><type>Boolean</type></entry>
- <entry><constant>FALSE</constant></entry>
- <entry>
- si <constant>TRUE</constant>, 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 <emphasis>master_file</emphasis> 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
- <varname>$_SERVER['REQUEST_URI']</varname> et (en fonction des options)
- <varname>$_GET</varname>, <varname>$_POST</varname>, <varname>$_SESSION</varname>,
- <varname>$_COOKIE</varname>, <varname>$_FILES</varname>. De plus, vous avez
- seulement une méthode pour appeler (<methodname>start()</methodname>) parce que
- l'appel à <methodname>end()</methodname> 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 <acronym>HTTP</acronym> pour économiser de la bande passante
- (le système émettra un en-tête "<acronym>HTTP</acronym> 304 Not Modified" si le
- cache est trouvé, et si le navigateur a déjà la bonne version).
- </para>
- <note>
- <para>
- Ce frontend opère en enregistrant une fonction de rappel qui doit être appelée
- quand le buffer de sortie qu'il utilise est nettoyé. Dans le but de fonctionner
- correctement, il doit être le buffer de sortie final de la requête. Pour
- garantir ceci, le buffer de sortie utilisé par le distributeur (Dispatcher)
- <emphasis>doit</emphasis> être désactivé en appelant la méthode
- <methodname>setParam()</methodname> de
- <classname>Zend_Controller_Front</classname>, par exemple
- <command>$front->setParam('disableOutputBuffering', true);</command> ou en
- ajoutant "resources.frontcontroller.params.disableOutputBuffering = true"
- à votre fichier d'amorçage (présumé de type <acronym>INI</acronym>) si vous
- utilisez <classname>Zend_Application</classname>.
- </para>
- </note>
- </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><emphasis>http_conditional</emphasis></entry>
- <entry><type>Boolean</type></entry>
- <entry><constant>FALSE</constant></entry>
- <entry>
- utilisez le système "httpConditionnal" ou pas
- (pas encore implémenté)
- </entry>
- </row>
- <row>
- <entry><emphasis>debug_header</emphasis></entry>
- <entry><type>Boolean</type></entry>
- <entry><constant>FALSE</constant></entry>
- <entry>
- si <constant>TRUE</constant>, un texte de débogage est ajouté avant
- chaque page de cache
- </entry>
- </row>
- <row>
- <entry><emphasis>default_options</emphasis></entry>
- <entry><type>Array</type></entry>
- <entry><methodname>array(...see below...)</methodname></entry>
- <entry>
- un tableau associatif d'options par défaut :
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>(boolean, <constant>TRUE</constant> par
- défaut) cache</emphasis> :
- le cache est activé si <constant>TRUE</constant>
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(boolean, <constant>FALSE</constant> par
- défaut) cache_with_get_variables</emphasis> : si
- <constant>TRUE</constant>, le cache est toujours activé
- même s'il y a des variables dans le tableau
- <varname>$_GET</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(boolean, <constant>FALSE</constant> par
- défaut) cache_with_post_variables</emphasis> : si
- <constant>TRUE</constant>, le cache est toujours activé
- même s'il y a des variables dans le tableau
- <varname>$_POST</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(boolean, <constant>FALSE</constant> par
- défaut) cache_with_session_variables</emphasis> :
- si <constant>TRUE</constant>, le cache est toujours
- activé s'il y a des variables dans le tableau
- <varname>$_SESSION</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(boolean, <constant>FALSE</constant> par
- défaut) cache_with_files_variables</emphasis> : si
- <constant>TRUE</constant>, le cache est toujours activé
- s'il y a des variables dans le tableau
- <varname>$_FILES</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(boolean, <constant>FALSE</constant> par
- défaut) cache_with_cookie_variables</emphasis> : si
- <constant>TRUE</constant>, le cache est toujours activé
- s'il y a des variables dans le tableau
- <varname>$_COOKIE</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(boolean, <constant>TRUE</constant> par
- défaut) make_id_with_get_variables</emphasis> : si
- <constant>TRUE</constant>, l'identifiant du cache sera
- dépendant du contenu du tableau <varname>$_GET</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(boolean, <constant>TRUE</constant> par
- défaut) make_id_with_post_variables</emphasis> :
- si <constant>TRUE</constant>, l'identifiant du cache
- sera dépendant du contenu du tableau
- <varname>$_POST</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(boolean, <constant>TRUE</constant> par
- défaut) make_id_with_session_variables</emphasis> :
- si <constant>TRUE</constant>, l'identifiant du cache
- sera dépendant du contenu du tableau
- <varname>$_SESSION</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(boolean, <constant>TRUE</constant> par
- défaut) make_id_with_files_variables</emphasis> :
- si <constant>TRUE</constant>, l'identifiant du cache
- sera dépendant du contenu du tableau
- <varname>$_FILES</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(boolean, <constant>TRUE</constant> par
- défaut) make_id_with_cookie_variables</emphasis> :
- si <constant>TRUE</constant>, l'identifiant du cache
- sera dépendant du contenu du tableau
- <varname>$_COOKIE</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(int, <constant>FALSE</constant> par défaut)
- specific_lifetime</emphasis> : si
- <constant>TRUE</constant>, la durée de vie fournie sera
- utilisée pour l'expression régulière choisie
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(array, <methodname>array()</methodname> par
- défaut) tags</emphasis> :
- balises pour l'enregistrement en cache
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>(int, <constant>NULL</constant> par défaut)
- priority</emphasis> :
- priorité (si le backend le supporte)
- </para>
- </listitem>
- </itemizedlist></entry>
- </row>
- <row>
- <entry><emphasis>regexps</emphasis></entry>
- <entry><type>Array</type></entry>
- <entry><methodname>array()</methodname></entry>
- <entry>
- un tableau associatif pour définir les options, uniquement
- pour certaines <constant>REQUEST_URI</constant>, les clés sont des
- expressions régulières <acronym>PCRE</acronym>, les valeurs sont
- des tableaux associatifs avec des options spécifiques pour définir
- si les expressions régulières correspondent dans
- <varname>$_SERVER['REQUEST_URI']</varname> (voir les options par
- défaut pour la liste des options disponibles) ; si plusieurs
- expressions régulières correspondent à un
- <varname>$_SERVER['REQUEST_URI']</varname>, seule la dernière
- sera utilisée.
- </entry>
- </row>
- <row>
- <entry><emphasis>memorize_headers</emphasis></entry>
- <entry><type>Array</type></entry>
- <entry><methodname>array()</methodname></entry>
- <entry>
- un tableau de chaînes correspondant aux noms d'en-têtes
- <acronym>HTTP</acronym>. 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 <acronym>HTTP</acronym> autres que 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
- <methodname>cancel()</methodname>.
- </para>
- <programlisting language="php"><![CDATA[
- // [...] require, configuration et fabrique
- $cache->start();
- // [...]
- if ($unTest) {
- $cache->cancel();
- // [...]
- }
- // [...]
- ]]></programlisting>
- </sect3>
- </sect2>
- <sect2 id="zend.cache.frontends.capture">
- <title>Zend_Cache_Frontend_Capture</title>
- <sect3 id="zend.cache.frontends.capture.introduction">
- <title>Introduction</title>
- <para>
- <classname>Zend_Cache_Frontend_Capture</classname> is like
- <classname>Zend_Cache_Frontend_Output</classname> but designed for a complete page.
- It's impossible to use <classname>Zend_Cache_Frontend_Capture</classname> for
- caching only a single block. This class is specifically designed to operate in
- concert only with the <classname>Zend_Cache_Backend_Static</classname> backend to
- assist in caching entire pages of <acronym>HTML</acronym> / <acronym>XML</acronym>
- or other content to a physical static file on the local filesystem.
- </para>
- <para>
- Please refer to the documentation on
- <classname>Zend_Cache_Backend_Static</classname> for all use cases pertaining to
- this class.
- </para>
- <note>
- <para>
- This frontend operates by registering a callback function to be called
- when the output buffering it uses is cleaned. In order for this to operate
- correctly, it must be the final output buffer in the request. To guarantee
- this, the output buffering used by the Dispatcher <emphasis>must</emphasis> be
- disabled by calling <classname>Zend_Controller_Front</classname>'s
- <methodname>setParam()</methodname> method, for example,
- <command>$front->setParam('disableOutputBuffering', true);</command> or adding
- "resources.frontcontroller.params.disableOutputBuffering = true"
- to your bootstrap configuration file (assumed <acronym>INI</acronym>) if using
- <classname>Zend_Application</classname>.
- </para>
- </note>
- </sect3>
- </sect2>
- </sect1>
|