1 <?xml version="1.0" encoding="utf-8"?>
2 <!-- EN-Revision: 22140 -->
4 <sect1 id="zend.cache.frontends">
5 <title>Les frontends Zend_Cache</title>
7 <sect2 id="zend.cache.frontends.core">
8 <title>Zend_Cache_Core</title>
10 <sect3 id="zend.cache.frontends.core.introduction">
11 <title>Introduction</title>
14 <classname>Zend_Cache_Core</classname> est un frontend spécial parce qu'il est le
15 coeur du module. C'est le frontend de cache générique qui est étendu par les autres
21 Tous les frontends héritent de <classname>Zend_Cache_Core</classname> ainsi ses
22 méthodes et options (décrites ci-dessous) seront aussi disponibles dans les
23 autres frontends, cependant ils ne sont pas documentés ici.
28 <sect3 id="zend.cache.frontends.core.options">
29 <title>Options disponibles</title>
32 Ces options sont passées à la méthode de fabrique comme montrées dans les
36 <table id="zend.cache.frontends.core.options.table">
37 <title>Options du frontend Core</title>
43 <entry>Type de données</entry>
44 <entry>Valeur par défaut</entry>
45 <entry>Description</entry>
50 <entry><emphasis>caching</emphasis></entry>
51 <entry><type>Boolean</type></entry>
52 <entry><constant>TRUE</constant></entry>
54 Active / désactive le cache (peut-être très utile pour le
55 débogage de scripts en cache)
59 <entry><emphasis>cache_id_prefix</emphasis></entry>
60 <entry><type>String</type></entry>
61 <entry><constant>NULL</constant></entry>
63 Un préfixe pour tous les ID de cache, si réglé à
64 <constant>NULL</constant>, aucun préfixe d'ID de cache ne sera
65 utilisé. Le préfixe d'ID de cache sert essentiellement à créer des
66 espaces de noms dans le cache, permettant à plusieurs applications
67 ou sites Web d'utiliser un cache partagé. Chaque application ou
68 site web peut utilisé un préfixe d'ID de cache différent et un
69 préfixe peut aussi être utilisé plusieurs fois.
73 <entry><emphasis>lifetime</emphasis></entry>
74 <entry><type>Integer</type></entry>
77 Temps de vie (en secondes) du cache, si défini à
78 <constant>NULL</constant>, le cache est valide indéfiniment
82 <entry><emphasis>logging</emphasis></entry>
83 <entry><type>Boolean</type></entry>
84 <entry><constant>FALSE</constant></entry>
86 Si défini à <constant>TRUE</constant>, le logging par
87 <classname>Zend_Log</classname> est activé (mais le système sera
92 <entry><emphasis>write_control</emphasis></entry>
93 <entry><type>Boolean</type></entry>
94 <entry><constant>TRUE</constant></entry>
96 Active / désactive le contrôle d'écriture (le cache est lu
97 juste après l'écriture pour détecter des entrées corrompues),
98 activer "writeControl" va ralentir un petit peu
99 l'écriture du cache, mais pas la lecture (il peut détecter des
100 fichiers de cache corrompus, mais ceci n'est pas un contrôle
105 <entry><emphasis>automatic_serialization</emphasis></entry>
106 <entry><type>Boolean</type></entry>
107 <entry><constant>FALSE</constant></entry>
109 Active / désactive la sérialisation automatique, il peut
110 être utilisé pour enregistrer directement des données qui ne sont
111 pas des chaînes de caractères (mais c'est plus lent).
115 <entry><emphasis>automatic_cleaning_factor</emphasis></entry>
116 <entry><type>Integer</type></entry>
119 Active / désactive le nettoyage automatique ("garbage
120 collector"): 0 signifie aucun nettoyage automatique de cache, 1
121 signifie un nettoyage systématique du cache et x > 1 signifie le
122 nettoyage aléatoire 1 fois toute les x écritures.
126 <entry><emphasis>ignore_user_abort</emphasis></entry>
127 <entry><type>Boolean</type></entry>
128 <entry><constant>FALSE</constant></entry>
130 Si réglé à <constant>TRUE</constant>, le cache active le drapeau
131 <acronym>PHP</acronym> "ignore_user_abort" dans la méthode
132 <methodname>save()</methodname> pour prévenir de la corruption du
133 cache dans certains cas.
141 <sect3 id="zend.cache.core.examples">
142 <title>Exemples</title>
144 <para>Un exemple est donné dans le manuel, tout au début.</para>
147 Si vous stocker uniquement des chaînes de caractères dans le cache (parce
148 qu'avec l'option "automatic_serialization", il est possible de stocker
149 des booléens), vous pouvez utiliser une construction plus compact comme :
152 <programlisting language="php"><![CDATA[
153 // nous avons déjà $cache
155 $id = 'myBigLoop'; // id de cache de "ce que l'on veut cacher"
157 if (!($data = $cache->load($id))) {
161 for ($i = 0; $i < 10000; $i++) {
169 // [...] fait quelque chose avec $data
170 // (affichage, passage ailleurs, etc, etc)
174 Si vous voulez cacher des blocs multiples ou des instances de données, l'idée
178 <programlisting language="php"><![CDATA[
179 // on s'assure que l'on utilise des identifiant uniques
184 if (!($data = $cache->load($id1))) {
188 for ($i=0;$i<10000;$i++) {
197 // ceci n'est pas affecté par la mise en cache
198 echo('NEVER CACHED! ');
201 if (!($data = $cache->load($id2))) {
205 for ($i=0;$i<10000;$i++) {
216 Si vous voulez cacher des valeurs "spéciales" (des booléens avec l'option
217 "automatic_serialization") ou des chaînes vides, vous ne pouvez pas
218 utiliser la construction compacte montrée ci-dessus. Vous devez tester de manière
219 formelle l'état du cache.
222 <programlisting language="php"><![CDATA[
223 // La construction compacte (ne pas utiliser si vous cachez
224 // des chaînes et/ou des booléens)
225 if (!($data = $cache->load($id))) {
229 // [...] on crée $data
235 // on fait qqch avec $data
239 // La construction complète (fonctionne dans tous les cas)
240 if (!($cache->test($id))) {
244 // [...] on crée $data
252 $data = $cache->load($id);
256 // on fait qqch avec $data
261 <sect2 id="zend.cache.frontends.output">
262 <title>Zend_Cache_Frontend_Output</title>
264 <sect3 id="zend.cache.frontends.output.introduction">
265 <title>Introduction</title>
268 <classname>Zend_Cache_Frontend_Output</classname> est un frontend capturant la
269 sortie. Il utilise la bufferisation de sortie de <acronym>PHP</acronym> pour
270 capturer tout ce qui passe entre les méthodes <methodname>start()</methodname> et
271 <methodname>end()</methodname>.
275 <sect3 id="zend.cache.frontends.output.options">
276 <title>Options disponibles</title>
279 Ce frontend n'a pas d'options spécifiques autres que celles de
280 <classname>Zend_Cache_Core</classname>.
284 <sect3 id="zend.cache.frontends.output.examples">
285 <title>Exemples</title>
288 Un exemple est donnée dans le manuel, tout au début. Le voici avec des
289 changements mineurs :
292 <programlisting language="php"><![CDATA[
293 // s'il y a un cache manquant, la bufferisation de sortie est lancée
294 if (!$cache->start('mypage')) {
296 // affiche tout comme d'habitude
297 echo 'Hello world! ';
298 echo 'This is cached ('.time().') ';
300 $cache->end(); // affiche ce qu'il y a dans le buffer
303 echo 'This is never cached ('.time().').';
307 Utiliser cette forme est assez simple pour définir une mise de cache de
308 sortie dans vos projets déjà en production, avec peu de refactorisation de
314 <sect2 id="zend.cache.frontends.function">
315 <title>Zend_Cache_Frontend_Function</title>
317 <sect3 id="zend.cache.frontends.function.introduction">
318 <title>Introduction</title>
321 <classname>Zend_Cache_Frontend_Function</classname> met en cache les résultats des
322 appels de fonction. Elle a une seule méthode principale appelée
323 <methodname>call()</methodname> qui prend un nom de fonction et des paramètres pour
324 l'appel dans un tableau.
328 <sect3 id="zend.cache.frontends.function.options">
329 <title>Options disponibles</title>
331 <table id="zend.cache.frontends.function.options.table">
332 <title>Options du frontend Function</title>
337 <entry>Option</entry>
338 <entry>Type de données</entry>
339 <entry>Valeur par défaut</entry>
340 <entry>Description</entry>
345 <entry><emphasis>cache_by_default</emphasis></entry>
346 <entry><type>Boolean</type></entry>
347 <entry><constant>TRUE</constant></entry>
349 si <constant>TRUE</constant>, les appels de fonction seront mis en
354 <entry><emphasis>cached_functions</emphasis></entry>
355 <entry><type>Array</type></entry>
357 <entry>les noms de fonctions seront toujours mis en cache</entry>
360 <entry><emphasis>non_cached_functions</emphasis></entry>
361 <entry><type>Array</type></entry>
364 les noms de fonctions ne doivent jamais être mis en
373 <sect3 id="zend.cache.frontends.function.examples">
374 <title>Exemples</title>
377 Utiliser la fonction <methodname>call()</methodname> est la même chose qu'utiliser
378 <methodname>call_user_func_array()</methodname> en <acronym>PHP</acronym> :
381 <programlisting language="php"><![CDATA[
382 $cache->call('veryExpensiveFunc', $params);
384 // $params est dans un tableau par exemple, pour appeler
385 // (avec mise en cache) : veryExpensiveFunc(1, 'foo', 'bar')
386 // vous devriez utiliser
387 $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar'));
391 <classname>Zend_Cache_Frontend_Function</classname> est assez intelligente pour
392 mettre en cache la valeur de retour de la fonction, ainsi que sa sortie interne.
397 Vous pouvez passer n'importe quelle fonction utilisateur à l'exception de
398 <methodname>array()</methodname>, <methodname>echo()</methodname>,
399 <methodname>empty()</methodname>, <methodname>eval()</methodname>,
400 <methodname>exit()</methodname>, <methodname>isset()</methodname>,
401 <methodname>list()</methodname>, <methodname>print()</methodname>
402 et <methodname>unset()</methodname>.
408 <sect2 id="zend.cache.frontends.class">
409 <title>Zend_Cache_Frontend_Class</title>
411 <sect3 id="zend.cache.frontends.class.introduction">
412 <title>Introduction</title>
415 <classname>Zend_Cache_Frontend_Class</classname> est différent de
416 <classname>Zend_Cache_Frontend_Function</classname> parce qu'elle permet de mettre
417 en cache les objets et les méthodes statiques.
421 <sect3 id="zend.cache.frontends.class.options">
422 <title>Options disponibles</title>
424 <table id="zend.cache.frontends.class.options.table">
425 <title>Options du frontend Class</title>
430 <entry>Option</entry>
431 <entry>Type de données</entry>
432 <entry>Valeur par défaut</entry>
433 <entry>Description</entry>
438 <entry><emphasis>cached_entity</emphasis> (requis)</entry>
439 <entry><type>Mixed</type></entry>
442 si défini avec un nom de classe, nous allons mettre en cache
443 une classe abstraite et utiliser uniquement les appels
444 statiques ; si défini avec un objet, nous allons mettre en
445 cache les méthodes de cet objet.
449 <entry><emphasis>cache_by_default</emphasis></entry>
450 <entry><type>Boolean</type></entry>
451 <entry><constant>TRUE</constant></entry>
453 si <constant>TRUE</constant>, les appels vont être cachés par
458 <entry><emphasis>cached_methods</emphasis></entry>
459 <entry><type>Array</type></entry>
462 les noms des méthodes qui seront toujours mis en
467 <entry><emphasis>non_cached_methods</emphasis></entry>
468 <entry><type>Array</type></entry>
471 les noms des méthodes qui ne doivent jamais être mises en
480 <sect3 id="zend.cache.frontends.class.examples">
481 <title>Exemples</title>
483 <para>Par exemple, pour mettre en cache des appels statiques :</para>
485 <programlisting language="php"><![CDATA[
489 public static function foobar($param1, $param2) {
490 echo "foobar_output($param1, $param2)";
491 return "foobar_return($param1, $param2)";
497 $frontendOptions = array(
498 'cached_entity' => 'test' // Le nom de la classe
503 $res = $cache->foobar('1', '2');
506 <para>Pour mettre en cache des appels classiques aux méthodes :</para>
508 <programlisting language="php"><![CDATA[
511 private $_string = 'hello !';
513 public function foobar2($param1, $param2) {
514 echo($this->_string);
515 echo "foobar2_output($param1, $param2)";
516 return "foobar2_return($param1, $param2)";
522 $frontendOptions = array(
523 'cached_entity' => new test() // Une instance de la classe
527 // L'appel mis en cache
528 $res = $cache->foobar2('1', '2');
533 <sect2 id="zend.cache.frontends.file">
534 <title>Zend_Cache_Frontend_File</title>
536 <sect3 id="zend.cache.frontends.file.introduction">
537 <title>Introduction</title>
540 <classname>Zend_Cache_Frontend_File</classname> est un frontend piloté par la
541 modification d'un "fichier maître". C'est vraiment intéressant, par exemple, dans
542 les problématiques de configuration ou de templates. Il est également possible
543 d'utiliser plusieurs fichiers maîtres.
547 Par exemple, vous avez un fichier de configuration <acronym>XML</acronym> qui est
548 analysé par une fonction, celle-ci retourne un "objet de configuration" (comme avec
549 <classname>Zend_Config</classname>). Avec
550 <classname>Zend_Cache_Frontend_File</classname>, vous pouvez stocker l'objet de
551 configuration dans le cache (pour éviter d'analyser le fichier de configuration
552 <acronym>XML</acronym> chaque fois) mais avec une sorte de forte dépendance au
553 fichier maître. Ainsi si le fichier <acronym>XML</acronym> de configuration est
554 modifié, le cache est immédiatement invalide.
558 <sect3 id="zend.cache.frontends.file.options">
559 <title>Options disponibles</title>
561 <table id="zend.cache.frontends.file.options.table">
562 <title>Options du frontend File</title>
567 <entry>Option</entry>
568 <entry>Type de données</entry>
569 <entry>Valeur par défaut</entry>
570 <entry>Description</entry>
575 <entry><emphasis>master_file</emphasis> (déprécié)</entry>
576 <entry><type>String</type></entry>
578 <entry>le chemin complet et le nom du fichier maître</entry>
581 <entry><emphasis>master_files</emphasis></entry>
582 <entry><type>Array</type></entry>
583 <entry><methodname>array()</methodname></entry>
584 <entry>un tableau de chemin complet de fichiers maîtres</entry>
587 <entry><emphasis>master_files_mode</emphasis></entry>
588 <entry><type>String</type></entry>
589 <entry><constant>Zend_Cache_Frontend_File::MODE_OR</constant></entry>
591 <constant>Zend_Cache_Frontend_File::MODE_AND</constant> oU
592 <constant>Zend_Cache_Frontend_File::MODE_OR</constant> ; si
593 <constant>MODE_AND</constant>, alors tous les fichiers maîtres
594 doivent être modifiés pour rendre invalide le cache, si
595 <constant>MODE_OR</constant>, alors un seul fichier maître modifié
596 est nécessaire pour invalider le cache
600 <entry><emphasis>ignore_missing_master_files</emphasis></entry>
601 <entry><type>Boolean</type></entry>
602 <entry><constant>FALSE</constant></entry>
604 si <constant>TRUE</constant>, l'absence de fichiers maîtres est
605 ignoré silencieusement (sinon une exception est levée)
613 <sect3 id="zend.cache.frontends.file.examples">
614 <title>Exemples</title>
617 L'utilisation de ce frontend est la même que celle de
618 <classname>Zend_Cache_Core</classname>. Il n'y a pas besoin d'exemple spécifique -
619 la seule chose à faire est de définir le <emphasis>master_file</emphasis> lors de
620 l'utilisation de la fabrique.
625 <sect2 id="zend.cache.frontends.page">
626 <title>Zend_Cache_Frontend_Page</title>
628 <sect3 id="zend.cache.frontends.page.introduction">
629 <title>Introduction</title>
632 <classname>Zend_Cache_Frontend_Page</classname> est comme
633 <classname>Zend_Cache_Frontend_Output</classname> mais créé pour une page complète.
634 Il est impossible d'utiliser <classname>Zend_Cache_Frontend_Page</classname> pour
635 mettre en cache un bloc unique.
639 D'un autre côté, le "cache ID", est calculé automatiquement avec
640 <varname>$_SERVER['REQUEST_URI']</varname> et (en fonction des options)
641 <varname>$_GET</varname>, <varname>$_POST</varname>, <varname>$_SESSION</varname>,
642 <varname>$_COOKIE</varname>, <varname>$_FILES</varname>. De plus, vous avez
643 seulement une méthode pour appeler (<methodname>start()</methodname>) parce que
644 l'appel à <methodname>end()</methodname> est totalement automatique lorsque la page
649 Pour le moment, ceci n'est pas implémenté mais nous prévoyons d'ajouter un
650 système de condition <acronym>HTTP</acronym> pour économiser de la bande passante
651 (le système émettra un en-tête "<acronym>HTTP</acronym> 304 Not Modified" si le
652 cache est trouvé, et si le navigateur a déjà la bonne version).
657 Ce frontend opére en enregistrant une fonction de rappel qui doit être appelée
658 quand le buffer de sortie qu'il utilise est nettoyé. Dans le but de fonctionner
659 correctement, il doit être le buffer de sortie final de la requête. Pour
660 garantir ceci, le buffer de sortie utilisé par le distributeur (Dispatcher)
661 <emphasis>doit</emphasis> être désactivé en appelant la méthode
662 <methodname>setParam()</methodname> de
663 <classname>Zend_Controller_Front</classname>, par exemple
664 <command>$front->setParam('disableOutputBuffering', true);</command> ou en
665 ajoutant "resources.frontcontroller.params.disableOutputBuffering = true"
666 à votre fichier d'amorçage (présumé de type <acronym>INI</acronym>) si vous
667 utilisez <classname>Zend_Application</classname>.
672 <sect3 id="zend.cache.frontends.page.options">
673 <title>Options disponibles</title>
675 <table id="zend.cache.frontends.page.options.table">
676 <title>Options du frontend Page</title>
681 <entry>Option</entry>
682 <entry>Type de données</entry>
683 <entry>Valeur par défaut</entry>
684 <entry>Description</entry>
689 <entry><emphasis>http_conditional</emphasis></entry>
690 <entry><type>Boolean</type></entry>
691 <entry><constant>FALSE</constant></entry>
693 utilisez le système "httpConditionnal" ou pas
694 (pas encore implémenté)
698 <entry><emphasis>debug_header</emphasis></entry>
699 <entry><type>Boolean</type></entry>
700 <entry><constant>FALSE</constant></entry>
702 si <constant>TRUE</constant>, un texte de débogage est ajouté avant
707 <entry><emphasis>default_options</emphasis></entry>
708 <entry><type>Array</type></entry>
709 <entry><methodname>array(...see below...)</methodname></entry>
711 un tableau associatif d'options par défaut :
715 <emphasis>(boolean, <constant>TRUE</constant> par
716 défaut) cache</emphasis> :
717 le cache est activé si <constant>TRUE</constant>
722 <emphasis>(boolean, <constant>FALSE</constant> par
723 défaut) cache_with_get_variables</emphasis> : si
724 <constant>TRUE</constant>, le cache est toujours activé
725 même s'il y a des variables dans le tableau
726 <varname>$_GET</varname>
731 <emphasis>(boolean, <constant>FALSE</constant> par
732 défaut) cache_with_post_variables</emphasis> : si
733 <constant>TRUE</constant>, le cache est toujours activé
734 même s'il y a des variables dans le tableau
735 <varname>$_POST</varname>
740 <emphasis>(boolean, <constant>FALSE</constant> par
741 défaut) cache_with_session_variables</emphasis> :
742 si <constant>TRUE</constant>, le cache est toujours
743 activé s'il y a des variables dans le tableau
744 <varname>$_SESSION</varname>
749 <emphasis>(boolean, <constant>FALSE</constant> par
750 défaut) cache_with_files_variables</emphasis> : si
751 <constant>TRUE</constant>, le cache est toujours activé
752 s'il y a des variables dans le tableau
753 <varname>$_FILES</varname>
758 <emphasis>(boolean, <constant>FALSE</constant> par
759 défaut) cache_with_cookie_variables</emphasis> : si
760 <constant>TRUE</constant>, le cache est toujours activé
761 s'il y a des variables dans le tableau
762 <varname>$_COOKIE</varname>
767 <emphasis>(boolean, <constant>TRUE</constant> par
768 défaut) make_id_with_get_variables</emphasis> : si
769 <constant>TRUE</constant>, l'identifiant du cache sera
770 dépendant du contenu du tableau <varname>$_GET</varname>
775 <emphasis>(boolean, <constant>TRUE</constant> par
776 défaut) make_id_with_post_variables</emphasis> :
777 si <constant>TRUE</constant>, l'identifiant du cache
778 sera dépendant du contenu du tableau
779 <varname>$_POST</varname>
784 <emphasis>(boolean, <constant>TRUE</constant> par
785 défaut) make_id_with_session_variables</emphasis> :
786 si <constant>TRUE</constant>, l'identifiant du cache
787 sera dépendant du contenu du tableau
788 <varname>$_SESSION</varname>
793 <emphasis>(boolean, <constant>TRUE</constant> par
794 défaut) make_id_with_files_variables</emphasis> :
795 si <constant>TRUE</constant>, l'identifiant du cache
796 sera dépendant du contenu du tableau
797 <varname>$_FILES</varname>
802 <emphasis>(boolean, <constant>TRUE</constant> par
803 défaut) make_id_with_cookie_variables</emphasis> :
804 si <constant>TRUE</constant>, l'identifiant du cache
805 sera dépendant du contenu du tableau
806 <varname>$_COOKIE</varname>
811 <emphasis>(int, <constant>FALSE</constant> par défaut)
812 specific_lifetime</emphasis> : si
813 <constant>TRUE</constant>, la durée de vie fournie sera
814 utilisée pour l'expression régulière choisie
819 <emphasis>(array, <methodname>array()</methodname> par
820 défaut) tags</emphasis> :
821 balises pour l'enregistrement en cache
826 <emphasis>(int, <constant>NULL</constant> par défaut)
827 priority</emphasis> :
828 priorité (si le backend le supporte)
831 </itemizedlist></entry>
834 <entry><emphasis>regexps</emphasis></entry>
835 <entry><type>Array</type></entry>
836 <entry><methodname>array()</methodname></entry>
838 un tableau associatif pour définir les options, uniquement
839 pour certaines <constant>REQUEST_URI</constant>, les clés sont des
840 expressions régulières <acronym>PCRE</acronym>, les valeurs sont
841 des tableaux associatifs avec des options spécifiques pour définir
842 si les expressions régulières correspondent dans
843 <varname>$_SERVER['REQUEST_URI']</varname> (voir les options par
844 défaut pour la liste des options disponibles) ; si plusieurs
845 expressions régulières correspondent à un
846 <varname>$_SERVER['REQUEST_URI']</varname>, seule la dernière
851 <entry><emphasis>memorize_headers</emphasis></entry>
852 <entry><type>Array</type></entry>
853 <entry><methodname>array()</methodname></entry>
855 un tableau de chaînes correspondant aux noms d'en-têtes
856 <acronym>HTTP</acronym>. Les en-têtes listés seront stockées avec
857 les données de cache et renvoyées lorsque le cache sera rappelé.
865 <sect3 id="zend.cache.frontends.page.examples">
866 <title>Exemples</title>
869 L'utilisation de <classname>Zend_Cache_Frontend_Page</classname> est vraiment
873 <programlisting language="php"><![CDATA[
874 // [...] // require, configuration et factory
877 // si le cache est trouvé, le résultat est envoyé au navigateur
878 // et le script s'arrête là
880 // reste de la page ...
884 Un exemple plus complexe qui montre un moyen pour obtenir une gestion
885 centralisée du cache dans un fichier d'amorçage (pour utiliser avec
886 <classname>Zend_Controller</classname> par exemple)
889 <programlisting language="php"><![CDATA[
890 // vous devriez éviter de mettre trop de lignes avant la section
891 // de cache par exemple, pour des performances optimales,
892 // "require_once" ou "Zend_Loader::loadClass" devrait être
893 // après la section de cache
895 $frontendOptions = array(
897 'debug_header' => true, // pour le déboguage
899 // met en cache la totalité d'IndexController
900 '^/$' => array('cache' => true),
902 // met en cache la totalité d'IndexController
903 '^/index/' => array('cache' => true),
905 // nous ne mettons pas en cache l'ArticleController...
906 '^/article/' => array('cache' => false),
908 // ...mais nous mettons en cache l'action "view"
909 '^/article/view/' => array(
910 // de cet ArticleController
913 // et nous mettons en cache même lorsqu'il y a
914 // des variables dans $_POST
915 'cache_with_post_variables' => true,
917 // (mais le cache sera dépendent du tableau $_POST)
918 'make_id_with_post_variables' => true,
922 $backendOptions = array(
923 'cache_dir' => '/tmp/'
926 // obtenir un objet Zend_Cache_Frontend_Page
927 $cache = Zend_Cache::factory('Page',
933 // si nous trouvons un cache, le résultat est envoyé au navigateur,
934 // et le script s'arrête là
936 // [...] la fin du fichier de démarrage
937 // (ces lignes ne seront pas exécutées si on trouve un cache)
941 <sect3 id="zend.cache.frontends.page.cancel">
942 <title>La méthode spécifique cancel()</title>
945 A cause de problèmes de design, dans certains cas (par exemple quand on
946 utilise des codes de retour <acronym>HTTP</acronym> autres que 200), vous
947 pouvez avoir besoin de stopper le processus de mise en cache courant. Il a donc été
948 introduit pour ce frontend en particulier, la méthode
949 <methodname>cancel()</methodname>.
952 <programlisting language="php"><![CDATA[
953 // [...] require, configuration et fabrique
969 <sect2 id="zend.cache.frontends.capture">
970 <title>Zend_Cache_Frontend_Capture</title>
972 <sect3 id="zend.cache.frontends.capture.introduction">
973 <title>Introduction</title>
976 <classname>Zend_Cache_Frontend_Capture</classname> is like
977 <classname>Zend_Cache_Frontend_Output</classname> but designed for a complete page.
978 It's impossible to use <classname>Zend_Cache_Frontend_Capture</classname> for
979 caching only a single block. This class is specifically designed to operate in
980 concert only with the <classname>Zend_Cache_Backend_Static</classname> backend to
981 assist in caching entire pages of <acronym>HTML</acronym> / <acronym>XML</acronym>
982 or other content to a physical static file on the local filesystem.
986 Please refer to the documentation on
987 <classname>Zend_Cache_Backend_Static</classname> for all use cases pertaining to
993 This frontend operates by registering a callback function to be called
994 when the output buffering it uses is cleaned. In order for this to operate
995 correctly, it must be the final output buffer in the request. To guarantee
996 this, the output buffering used by the Dispatcher <emphasis>must</emphasis> be
997 disabled by calling <classname>Zend_Controller_Front</classname>'s
998 <methodname>setParam()</methodname> method, for example,
999 <command>$front->setParam('disableOutputBuffering', true);</command> or adding
1000 "resources.frontcontroller.params.disableOutputBuffering = true"
1001 to your bootstrap configuration file (assumed <acronym>INI</acronym>) if using
1002 <classname>Zend_Application</classname>.