Zend_Cache-Frontends.xml 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.cache.frontends">
  5. <title>Les frontends Zend_Cache</title>
  6. <sect2 id="zend.cache.frontends.core">
  7. <title>Zend_Cache_Core</title>
  8. <sect3 id="zend.cache.frontends.core.introduction">
  9. <title>Introduction</title>
  10. <para>
  11. <classname>Zend_Cache_Core</classname> est un frontend spécial parce qu'il est le
  12. coeur du module. C'est le frontend de cache générique qui est étendu par les autres
  13. classes.
  14. </para>
  15. <note>
  16. <para>
  17. Tous les frontends héritent de <classname>Zend_Cache_Core</classname> ainsi ses
  18. méthodes et options (décrites ci-dessous) seront aussi disponibles dans les
  19. autres frontends, cependant ils ne sont pas documentés ici.
  20. </para>
  21. </note>
  22. </sect3>
  23. <sect3 id="zend.cache.frontends.core.options">
  24. <title>Options disponibles</title>
  25. <para>
  26. Ces options sont passées à la méthode de fabrique comme montrées dans les
  27. exemples précédents.
  28. </para>
  29. <table id="zend.cache.frontends.core.options.table">
  30. <title>Options du frontend Core</title>
  31. <tgroup cols="4">
  32. <thead>
  33. <row>
  34. <entry>Option</entry>
  35. <entry>Type de données</entry>
  36. <entry>Valeur par défaut</entry>
  37. <entry>Description</entry>
  38. </row>
  39. </thead>
  40. <tbody>
  41. <row>
  42. <entry><emphasis>caching</emphasis></entry>
  43. <entry><type>Boolean</type></entry>
  44. <entry><constant>TRUE</constant></entry>
  45. <entry>
  46. Active / désactive le cache (peut-être très utile pour le
  47. débogage de scripts en cache)
  48. </entry>
  49. </row>
  50. <row>
  51. <entry><emphasis>cache_id_prefix</emphasis></entry>
  52. <entry><type>String</type></entry>
  53. <entry><constant>NULL</constant></entry>
  54. <entry>
  55. Un préfixe pour tous les ID de cache, si réglé à
  56. <constant>NULL</constant>, aucun préfixe d'ID de cache ne sera
  57. utilisé. Le préfixe d'ID de cache sert essentiellement à créer des
  58. espaces de noms dans le cache, permettant à plusieurs applications
  59. ou sites Web d'utiliser un cache partagé. Chaque application ou
  60. site web peut utilisé un préfixe d'ID de cache différent et un
  61. préfixe peut aussi être utilisé plusieurs fois.
  62. </entry>
  63. </row>
  64. <row>
  65. <entry><emphasis>lifetime</emphasis></entry>
  66. <entry><type>Integer</type></entry>
  67. <entry>3600</entry>
  68. <entry>
  69. Temps de vie (en secondes) du cache, si défini à
  70. <constant>NULL</constant>, le cache est valide indéfiniment
  71. </entry>
  72. </row>
  73. <row>
  74. <entry><emphasis>logging</emphasis></entry>
  75. <entry><type>Boolean</type></entry>
  76. <entry><constant>FALSE</constant></entry>
  77. <entry>
  78. Si défini à <constant>TRUE</constant>, la journalisation par
  79. <classname>Zend_Log</classname> est activé (mais le système sera
  80. plus lent)
  81. </entry>
  82. </row>
  83. <row>
  84. <entry><emphasis>write_control</emphasis></entry>
  85. <entry><type>Boolean</type></entry>
  86. <entry><constant>TRUE</constant></entry>
  87. <entry>
  88. Active / désactive le contrôle d'écriture (le cache est lu
  89. juste après l'écriture pour détecter des entrées corrompues),
  90. activer "writeControl" va ralentir un petit peu
  91. l'écriture du cache, mais pas la lecture (il peut détecter des
  92. fichiers de cache corrompus, mais ceci n'est pas un contrôle
  93. parfait).
  94. </entry>
  95. </row>
  96. <row>
  97. <entry><emphasis>automatic_serialization</emphasis></entry>
  98. <entry><type>Boolean</type></entry>
  99. <entry><constant>FALSE</constant></entry>
  100. <entry>
  101. Active / désactive la sérialisation automatique, il peut
  102. être utilisé pour enregistrer directement des données qui ne sont
  103. pas des chaînes de caractères (mais c'est plus lent).
  104. </entry>
  105. </row>
  106. <row>
  107. <entry><emphasis>automatic_cleaning_factor</emphasis></entry>
  108. <entry><type>Integer</type></entry>
  109. <entry>0</entry>
  110. <entry>
  111. Active / désactive le nettoyage automatique ("garbage
  112. collector"): 0 signifie aucun nettoyage automatique de cache, 1
  113. signifie un nettoyage systématique du cache et x &gt; 1 signifie le
  114. nettoyage aléatoire 1 fois toute les x écritures.
  115. </entry>
  116. </row>
  117. <row>
  118. <entry><emphasis>ignore_user_abort</emphasis></entry>
  119. <entry><type>Boolean</type></entry>
  120. <entry><constant>FALSE</constant></entry>
  121. <entry>
  122. Si réglé à <constant>TRUE</constant>, le cache active le drapeau
  123. <acronym>PHP</acronym> "ignore_user_abort" dans la méthode
  124. <methodname>save()</methodname> pour prévenir de la corruption du
  125. cache dans certains cas.
  126. </entry>
  127. </row>
  128. </tbody>
  129. </tgroup>
  130. </table>
  131. </sect3>
  132. <sect3 id="zend.cache.core.examples">
  133. <title>Exemples</title>
  134. <para>Un exemple est donné dans le manuel, tout au début.</para>
  135. <para>
  136. Si vous stocker uniquement des chaînes de caractères dans le cache (parce
  137. qu'avec l'option "automatic_serialization", il est possible de stocker
  138. des booléens), vous pouvez utiliser une construction plus compact comme&#160;:
  139. </para>
  140. <programlisting language="php"><![CDATA[
  141. // nous avons déjà $cache
  142. $id = 'myBigLoop'; // id de cache de "ce que l'on veut cacher"
  143. if ( ($data = $cache->load($id)) === false ) {
  144. // cache absent
  145. $data = '';
  146. for ($i = 0; $i < 10000; $i++) {
  147. $data = $data . $i;
  148. }
  149. $cache->save($data);
  150. }
  151. // [...] fait quelque chose avec $data
  152. // (affichage, passage ailleurs, etc, etc)
  153. ]]></programlisting>
  154. <para>
  155. Si vous voulez cacher des blocs multiples ou des instances de données, l'idée
  156. reste la même&#160;:
  157. </para>
  158. <programlisting language="php"><![CDATA[
  159. // on s'assure que l'on utilise des identifiant uniques
  160. $id1 = 'foo';
  161. $id2 = 'bar';
  162. // block 1
  163. if ( ($data = $cache->load($id1)) === false ) {
  164. // cache absent
  165. $data = '';
  166. for ($i=0;$i<10000;$i++) {
  167. $data = $data . $i;
  168. }
  169. $cache->save($data);
  170. }
  171. echo($data);
  172. // ceci n'est pas affecté par la mise en cache
  173. echo('NEVER CACHED! ');
  174. // block 2
  175. if ( ($data = $cache->load($id2)) === false ) {
  176. // cache missed
  177. $data = '';
  178. for ($i=0;$i<10000;$i++) {
  179. $data = $data . '!';
  180. }
  181. $cache->save($data);
  182. }
  183. echo($data);
  184. ]]></programlisting>
  185. <para>
  186. Si vous voulez cacher des valeurs "spéciales" (des booléens avec l'option
  187. "automatic_serialization") ou des chaînes vides, vous ne pouvez pas
  188. utiliser la construction compacte montrée ci-dessus. Vous devez tester de manière
  189. formelle l'état du cache.
  190. </para>
  191. <programlisting language="php"><![CDATA[
  192. // La construction compacte (ne pas utiliser si vous cachez
  193. // des chaînes et/ou des booléens)
  194. if ( ($data = $cache->load($id)) === false ) {
  195. // cache absent
  196. // [...] on crée $data
  197. $cache->save($data);
  198. }
  199. // on fait qqch avec $data
  200. // [...]
  201. // La construction complète (fonctionne dans tous les cas)
  202. if (!($cache->test($id))) {
  203. // cache absent
  204. // [...] on crée $data
  205. $cache->save($data);
  206. } else {
  207. // lecture du cache
  208. $data = $cache->load($id);
  209. }
  210. // on fait qqch avec $data
  211. ]]></programlisting>
  212. </sect3>
  213. </sect2>
  214. <sect2 id="zend.cache.frontends.output">
  215. <title>Zend_Cache_Frontend_Output</title>
  216. <sect3 id="zend.cache.frontends.output.introduction">
  217. <title>Introduction</title>
  218. <para>
  219. <classname>Zend_Cache_Frontend_Output</classname> est un frontend capturant la
  220. sortie. Il utilise la bufferisation de sortie de <acronym>PHP</acronym> pour
  221. capturer tout ce qui passe entre les méthodes <methodname>start()</methodname> et
  222. <methodname>end()</methodname>.
  223. </para>
  224. </sect3>
  225. <sect3 id="zend.cache.frontends.output.options">
  226. <title>Options disponibles</title>
  227. <para>
  228. Ce frontend n'a pas d'options spécifiques autres que celles de
  229. <classname>Zend_Cache_Core</classname>.
  230. </para>
  231. </sect3>
  232. <sect3 id="zend.cache.frontends.output.examples">
  233. <title>Exemples</title>
  234. <para>
  235. Un exemple est donnée dans le manuel, tout au début. Le voici avec des
  236. changements mineurs&#160;:
  237. </para>
  238. <programlisting language="php"><![CDATA[
  239. // s'il y a un cache manquant, la bufferisation de sortie est lancée
  240. if (!$cache->start('mypage')) {
  241. // affiche tout comme d'habitude
  242. echo 'Hello world! ';
  243. echo 'This is cached ('.time().') ';
  244. $cache->end(); // affiche ce qu'il y a dans le buffer
  245. }
  246. echo 'This is never cached ('.time().').';
  247. ]]></programlisting>
  248. <para>
  249. Utiliser cette forme est assez simple pour définir une mise de cache de
  250. sortie dans vos projets déjà en production, avec peu de refactorisation de
  251. code.
  252. </para>
  253. </sect3>
  254. </sect2>
  255. <sect2 id="zend.cache.frontends.function">
  256. <title>Zend_Cache_Frontend_Function</title>
  257. <sect3 id="zend.cache.frontends.function.introduction">
  258. <title>Introduction</title>
  259. <para>
  260. <classname>Zend_Cache_Frontend_Function</classname> met en cache les résultats des
  261. appels de fonction. Elle a une seule méthode principale appelée
  262. <methodname>call()</methodname> qui prend un nom de fonction et des paramètres pour
  263. l'appel dans un tableau.
  264. </para>
  265. </sect3>
  266. <sect3 id="zend.cache.frontends.function.options">
  267. <title>Options disponibles</title>
  268. <table id="zend.cache.frontends.function.options.table">
  269. <title>Options du frontend Function</title>
  270. <tgroup cols="4">
  271. <thead>
  272. <row>
  273. <entry>Option</entry>
  274. <entry>Type de données</entry>
  275. <entry>Valeur par défaut</entry>
  276. <entry>Description</entry>
  277. </row>
  278. </thead>
  279. <tbody>
  280. <row>
  281. <entry><emphasis>cache_by_default</emphasis></entry>
  282. <entry><type>Boolean</type></entry>
  283. <entry><constant>TRUE</constant></entry>
  284. <entry>
  285. si <constant>TRUE</constant>, les appels de fonction seront mis en
  286. cache par défaut
  287. </entry>
  288. </row>
  289. <row>
  290. <entry><emphasis>cached_functions</emphasis></entry>
  291. <entry><type>Array</type></entry>
  292. <entry>''</entry>
  293. <entry>les noms de fonctions seront toujours mis en cache</entry>
  294. </row>
  295. <row>
  296. <entry><emphasis>non_cached_functions</emphasis></entry>
  297. <entry><type>Array</type></entry>
  298. <entry>''</entry>
  299. <entry>
  300. les noms de fonctions ne doivent jamais être mis en
  301. cache
  302. </entry>
  303. </row>
  304. </tbody>
  305. </tgroup>
  306. </table>
  307. </sect3>
  308. <sect3 id="zend.cache.frontends.function.examples">
  309. <title>Exemples</title>
  310. <para>
  311. Utiliser la fonction <methodname>call()</methodname> est la même chose qu'utiliser
  312. <methodname>call_user_func_array()</methodname> en <acronym>PHP</acronym>&#160;:
  313. </para>
  314. <programlisting language="php"><![CDATA[
  315. $cache->call('veryExpensiveFunc', $params);
  316. // $params est dans un tableau par exemple, pour appeler
  317. // (avec mise en cache) : veryExpensiveFunc(1, 'foo', 'bar')
  318. // vous devriez utiliser
  319. $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar'));
  320. ]]></programlisting>
  321. <para>
  322. <classname>Zend_Cache_Frontend_Function</classname> est assez intelligente pour
  323. mettre en cache la valeur de retour de la fonction, ainsi que sa sortie interne.
  324. </para>
  325. <note>
  326. <para>
  327. Vous pouvez passer n'importe quelle fonction utilisateur à l'exception de
  328. <methodname>array()</methodname>, <methodname>echo()</methodname>,
  329. <methodname>empty()</methodname>, <methodname>eval()</methodname>,
  330. <methodname>exit()</methodname>, <methodname>isset()</methodname>,
  331. <methodname>list()</methodname>, <methodname>print()</methodname>
  332. et <methodname>unset()</methodname>.
  333. </para>
  334. </note>
  335. </sect3>
  336. </sect2>
  337. <sect2 id="zend.cache.frontends.class">
  338. <title>Zend_Cache_Frontend_Class</title>
  339. <sect3 id="zend.cache.frontends.class.introduction">
  340. <title>Introduction</title>
  341. <para>
  342. <classname>Zend_Cache_Frontend_Class</classname> est différent de
  343. <classname>Zend_Cache_Frontend_Function</classname> parce qu'elle permet de mettre
  344. en cache les objets et les méthodes statiques.
  345. </para>
  346. </sect3>
  347. <sect3 id="zend.cache.frontends.class.options">
  348. <title>Options disponibles</title>
  349. <table id="zend.cache.frontends.class.options.table">
  350. <title>Options du frontend Class</title>
  351. <tgroup cols="4">
  352. <thead>
  353. <row>
  354. <entry>Option</entry>
  355. <entry>Type de données</entry>
  356. <entry>Valeur par défaut</entry>
  357. <entry>Description</entry>
  358. </row>
  359. </thead>
  360. <tbody>
  361. <row>
  362. <entry><emphasis>cached_entity</emphasis> (requis)</entry>
  363. <entry><type>Mixed</type></entry>
  364. <entry></entry>
  365. <entry>
  366. si défini avec un nom de classe, nous allons mettre en cache
  367. une classe abstraite et utiliser uniquement les appels
  368. statiques&#160;; si défini avec un objet, nous allons mettre en
  369. cache les méthodes de cet objet.
  370. </entry>
  371. </row>
  372. <row>
  373. <entry><emphasis>cache_by_default</emphasis></entry>
  374. <entry><type>Boolean</type></entry>
  375. <entry><constant>TRUE</constant></entry>
  376. <entry>
  377. si <constant>TRUE</constant>, les appels vont être cachés par
  378. défaut
  379. </entry>
  380. </row>
  381. <row>
  382. <entry><emphasis>cached_methods</emphasis></entry>
  383. <entry><type>Array</type></entry>
  384. <entry></entry>
  385. <entry>
  386. les noms des méthodes qui seront toujours mis en
  387. cache
  388. </entry>
  389. </row>
  390. <row>
  391. <entry><emphasis>non_cached_methods</emphasis></entry>
  392. <entry><type>Array</type></entry>
  393. <entry></entry>
  394. <entry>
  395. les noms des méthodes qui ne doivent jamais être mises en
  396. cache
  397. </entry>
  398. </row>
  399. </tbody>
  400. </tgroup>
  401. </table>
  402. </sect3>
  403. <sect3 id="zend.cache.frontends.class.examples">
  404. <title>Exemples</title>
  405. <para>Par exemple, pour mettre en cache des appels statiques&#160;:</para>
  406. <programlisting language="php"><![CDATA[
  407. class test {
  408. // Méthode statique
  409. public static function foobar($param1, $param2) {
  410. echo "foobar_output($param1, $param2)";
  411. return "foobar_return($param1, $param2)";
  412. }
  413. }
  414. // [...]
  415. $frontendOptions = array(
  416. 'cached_entity' => 'test' // Le nom de la classe
  417. );
  418. // [...]
  419. // l'appel caché
  420. $res = $cache->foobar('1', '2');
  421. ]]></programlisting>
  422. <para>Pour mettre en cache des appels classiques aux méthodes&#160;:</para>
  423. <programlisting language="php"><![CDATA[
  424. class test {
  425. private $_string = 'hello !';
  426. public function foobar2($param1, $param2) {
  427. echo($this->_string);
  428. echo "foobar2_output($param1, $param2)";
  429. return "foobar2_return($param1, $param2)";
  430. }
  431. }
  432. // [...]
  433. $frontendOptions = array(
  434. 'cached_entity' => new test() // Une instance de la classe
  435. );
  436. // [...]
  437. // L'appel mis en cache
  438. $res = $cache->foobar2('1', '2');
  439. ]]></programlisting>
  440. </sect3>
  441. </sect2>
  442. <sect2 id="zend.cache.frontends.file">
  443. <title>Zend_Cache_Frontend_File</title>
  444. <sect3 id="zend.cache.frontends.file.introduction">
  445. <title>Introduction</title>
  446. <para>
  447. <classname>Zend_Cache_Frontend_File</classname> est un frontend piloté par la
  448. modification d'un "fichier maître". C'est vraiment intéressant, par exemple, dans
  449. les problématiques de configuration ou de templates. Il est également possible
  450. d'utiliser plusieurs fichiers maîtres.
  451. </para>
  452. <para>
  453. Par exemple, vous avez un fichier de configuration <acronym>XML</acronym> qui est
  454. analysé par une fonction, celle-ci retourne un "objet de configuration" (comme avec
  455. <classname>Zend_Config</classname>). Avec
  456. <classname>Zend_Cache_Frontend_File</classname>, vous pouvez stocker l'objet de
  457. configuration dans le cache (pour éviter d'analyser le fichier de configuration
  458. <acronym>XML</acronym> chaque fois) mais avec une sorte de forte dépendance au
  459. fichier maître. Ainsi si le fichier <acronym>XML</acronym> de configuration est
  460. modifié, le cache est immédiatement invalide.
  461. </para>
  462. </sect3>
  463. <sect3 id="zend.cache.frontends.file.options">
  464. <title>Options disponibles</title>
  465. <table id="zend.cache.frontends.file.options.table">
  466. <title>Options du frontend File</title>
  467. <tgroup cols="4">
  468. <thead>
  469. <row>
  470. <entry>Option</entry>
  471. <entry>Type de données</entry>
  472. <entry>Valeur par défaut</entry>
  473. <entry>Description</entry>
  474. </row>
  475. </thead>
  476. <tbody>
  477. <row>
  478. <entry><emphasis>master_file</emphasis> (déprécié)</entry>
  479. <entry><type>String</type></entry>
  480. <entry>''</entry>
  481. <entry>le chemin complet et le nom du fichier maître</entry>
  482. </row>
  483. <row>
  484. <entry><emphasis>master_files</emphasis></entry>
  485. <entry><type>Array</type></entry>
  486. <entry><methodname>array()</methodname></entry>
  487. <entry>un tableau de chemin complet de fichiers maîtres</entry>
  488. </row>
  489. <row>
  490. <entry><emphasis>master_files_mode</emphasis></entry>
  491. <entry><type>String</type></entry>
  492. <entry><constant>Zend_Cache_Frontend_File::MODE_OR</constant></entry>
  493. <entry>
  494. <constant>Zend_Cache_Frontend_File::MODE_AND</constant> ou
  495. <constant>Zend_Cache_Frontend_File::MODE_OR</constant> ; si
  496. <constant>MODE_AND</constant>, alors tous les fichiers maîtres
  497. doivent être modifiés pour rendre invalide le cache, si
  498. <constant>MODE_OR</constant>, alors un seul fichier maître modifié
  499. est nécessaire pour invalider le cache
  500. </entry>
  501. </row>
  502. <row>
  503. <entry><emphasis>ignore_missing_master_files</emphasis></entry>
  504. <entry><type>Boolean</type></entry>
  505. <entry><constant>FALSE</constant></entry>
  506. <entry>
  507. si <constant>TRUE</constant>, l'absence de fichiers maîtres est
  508. ignoré silencieusement (sinon une exception est levée)
  509. </entry>
  510. </row>
  511. </tbody>
  512. </tgroup>
  513. </table>
  514. </sect3>
  515. <sect3 id="zend.cache.frontends.file.examples">
  516. <title>Exemples</title>
  517. <para>
  518. L'utilisation de ce frontend est la même que celle de
  519. <classname>Zend_Cache_Core</classname>. Il n'y a pas besoin d'exemple spécifique -
  520. la seule chose à faire est de définir le <emphasis>master_file</emphasis> lors de
  521. l'utilisation de la fabrique.
  522. </para>
  523. </sect3>
  524. </sect2>
  525. <sect2 id="zend.cache.frontends.page">
  526. <title>Zend_Cache_Frontend_Page</title>
  527. <sect3 id="zend.cache.frontends.page.introduction">
  528. <title>Introduction</title>
  529. <para>
  530. <classname>Zend_Cache_Frontend_Page</classname> est comme
  531. <classname>Zend_Cache_Frontend_Output</classname> mais créé pour une page complète.
  532. Il est impossible d'utiliser <classname>Zend_Cache_Frontend_Page</classname> pour
  533. mettre en cache un bloc unique.
  534. </para>
  535. <para>
  536. D'un autre côté, le "cache ID", est calculé automatiquement avec
  537. <varname>$_SERVER['REQUEST_URI']</varname> et (en fonction des options)
  538. <varname>$_GET</varname>, <varname>$_POST</varname>, <varname>$_SESSION</varname>,
  539. <varname>$_COOKIE</varname>, <varname>$_FILES</varname>. De plus, vous avez
  540. seulement une méthode pour appeler (<methodname>start()</methodname>) parce que
  541. l'appel à <methodname>end()</methodname> est totalement automatique lorsque la page
  542. est terminé.
  543. </para>
  544. <para>
  545. Pour le moment, ceci n'est pas implémenté mais nous prévoyons d'ajouter un
  546. système de condition <acronym>HTTP</acronym> pour économiser de la bande passante
  547. (le système émettra un en-tête "<acronym>HTTP</acronym> 304 Not Modified" si le
  548. cache est trouvé, et si le navigateur a déjà la bonne version).
  549. </para>
  550. <note>
  551. <para>
  552. Ce frontend opère en enregistrant une fonction de rappel qui doit être appelée
  553. quand le buffer de sortie qu'il utilise est nettoyé. Dans le but de fonctionner
  554. correctement, il doit être le buffer de sortie final de la requête. Pour
  555. garantir ceci, le buffer de sortie utilisé par le distributeur (Dispatcher)
  556. <emphasis>doit</emphasis> être désactivé en appelant la méthode
  557. <methodname>setParam()</methodname> de
  558. <classname>Zend_Controller_Front</classname>, par exemple
  559. <command>$front->setParam('disableOutputBuffering', true);</command> ou en
  560. ajoutant "resources.frontcontroller.params.disableOutputBuffering = true"
  561. à votre fichier d'amorçage (présumé de type <acronym>INI</acronym>) si vous
  562. utilisez <classname>Zend_Application</classname>.
  563. </para>
  564. </note>
  565. </sect3>
  566. <sect3 id="zend.cache.frontends.page.options">
  567. <title>Options disponibles</title>
  568. <table id="zend.cache.frontends.page.options.table">
  569. <title>Options du frontend Page</title>
  570. <tgroup cols="4">
  571. <thead>
  572. <row>
  573. <entry>Option</entry>
  574. <entry>Type de données</entry>
  575. <entry>Valeur par défaut</entry>
  576. <entry>Description</entry>
  577. </row>
  578. </thead>
  579. <tbody>
  580. <row>
  581. <entry><emphasis>http_conditional</emphasis></entry>
  582. <entry><type>Boolean</type></entry>
  583. <entry><constant>FALSE</constant></entry>
  584. <entry>
  585. utilisez le système "httpConditionnal" ou pas
  586. (pas encore implémenté)
  587. </entry>
  588. </row>
  589. <row>
  590. <entry><emphasis>debug_header</emphasis></entry>
  591. <entry><type>Boolean</type></entry>
  592. <entry><constant>FALSE</constant></entry>
  593. <entry>
  594. si <constant>TRUE</constant>, un texte de débogage est ajouté avant
  595. chaque page de cache
  596. </entry>
  597. </row>
  598. <row>
  599. <entry><emphasis>default_options</emphasis></entry>
  600. <entry><type>Array</type></entry>
  601. <entry><methodname>array(...see below...)</methodname></entry>
  602. <entry>
  603. un tableau associatif d'options par défaut&#160;:
  604. <itemizedlist>
  605. <listitem>
  606. <para>
  607. <emphasis>(boolean, <constant>TRUE</constant> par
  608. défaut) cache</emphasis>&#160;:
  609. le cache est activé si <constant>TRUE</constant>
  610. </para>
  611. </listitem>
  612. <listitem>
  613. <para>
  614. <emphasis>(boolean, <constant>FALSE</constant> par
  615. défaut) cache_with_get_variables</emphasis>&#160;: si
  616. <constant>TRUE</constant>, le cache est toujours activé
  617. même s'il y a des variables dans le tableau
  618. <varname>$_GET</varname>
  619. </para>
  620. </listitem>
  621. <listitem>
  622. <para>
  623. <emphasis>(boolean, <constant>FALSE</constant> par
  624. défaut) cache_with_post_variables</emphasis>&#160;: si
  625. <constant>TRUE</constant>, le cache est toujours activé
  626. même s'il y a des variables dans le tableau
  627. <varname>$_POST</varname>
  628. </para>
  629. </listitem>
  630. <listitem>
  631. <para>
  632. <emphasis>(boolean, <constant>FALSE</constant> par
  633. défaut) cache_with_session_variables</emphasis>&#160;:
  634. si <constant>TRUE</constant>, le cache est toujours
  635. activé s'il y a des variables dans le tableau
  636. <varname>$_SESSION</varname>
  637. </para>
  638. </listitem>
  639. <listitem>
  640. <para>
  641. <emphasis>(boolean, <constant>FALSE</constant> par
  642. défaut) cache_with_files_variables</emphasis>&#160;: si
  643. <constant>TRUE</constant>, le cache est toujours activé
  644. s'il y a des variables dans le tableau
  645. <varname>$_FILES</varname>
  646. </para>
  647. </listitem>
  648. <listitem>
  649. <para>
  650. <emphasis>(boolean, <constant>FALSE</constant> par
  651. défaut) cache_with_cookie_variables</emphasis>&#160;: si
  652. <constant>TRUE</constant>, le cache est toujours activé
  653. s'il y a des variables dans le tableau
  654. <varname>$_COOKIE</varname>
  655. </para>
  656. </listitem>
  657. <listitem>
  658. <para>
  659. <emphasis>(boolean, <constant>TRUE</constant> par
  660. défaut) make_id_with_get_variables</emphasis>&#160;: si
  661. <constant>TRUE</constant>, l'identifiant du cache sera
  662. dépendant du contenu du tableau <varname>$_GET</varname>
  663. </para>
  664. </listitem>
  665. <listitem>
  666. <para>
  667. <emphasis>(boolean, <constant>TRUE</constant> par
  668. défaut) make_id_with_post_variables</emphasis>&#160;:
  669. si <constant>TRUE</constant>, l'identifiant du cache
  670. sera dépendant du contenu du tableau
  671. <varname>$_POST</varname>
  672. </para>
  673. </listitem>
  674. <listitem>
  675. <para>
  676. <emphasis>(boolean, <constant>TRUE</constant> par
  677. défaut) make_id_with_session_variables</emphasis>&#160;:
  678. si <constant>TRUE</constant>, l'identifiant du cache
  679. sera dépendant du contenu du tableau
  680. <varname>$_SESSION</varname>
  681. </para>
  682. </listitem>
  683. <listitem>
  684. <para>
  685. <emphasis>(boolean, <constant>TRUE</constant> par
  686. défaut) make_id_with_files_variables</emphasis>&#160;:
  687. si <constant>TRUE</constant>, l'identifiant du cache
  688. sera dépendant du contenu du tableau
  689. <varname>$_FILES</varname>
  690. </para>
  691. </listitem>
  692. <listitem>
  693. <para>
  694. <emphasis>(boolean, <constant>TRUE</constant> par
  695. défaut) make_id_with_cookie_variables</emphasis>&#160;:
  696. si <constant>TRUE</constant>, l'identifiant du cache
  697. sera dépendant du contenu du tableau
  698. <varname>$_COOKIE</varname>
  699. </para>
  700. </listitem>
  701. <listitem>
  702. <para>
  703. <emphasis>(int, <constant>FALSE</constant> par défaut)
  704. specific_lifetime</emphasis>&#160;: si
  705. <constant>TRUE</constant>, la durée de vie fournie sera
  706. utilisée pour l'expression régulière choisie
  707. </para>
  708. </listitem>
  709. <listitem>
  710. <para>
  711. <emphasis>(array, <methodname>array()</methodname> par
  712. défaut) tags</emphasis>&#160;:
  713. balises pour l'enregistrement en cache
  714. </para>
  715. </listitem>
  716. <listitem>
  717. <para>
  718. <emphasis>(int, <constant>NULL</constant> par défaut)
  719. priority</emphasis>&#160;:
  720. priorité (si le backend le supporte)
  721. </para>
  722. </listitem>
  723. </itemizedlist></entry>
  724. </row>
  725. <row>
  726. <entry><emphasis>regexps</emphasis></entry>
  727. <entry><type>Array</type></entry>
  728. <entry><methodname>array()</methodname></entry>
  729. <entry>
  730. un tableau associatif pour définir les options, uniquement
  731. pour certaines <constant>REQUEST_URI</constant>, les clés sont des
  732. expressions régulières <acronym>PCRE</acronym>, les valeurs sont
  733. des tableaux associatifs avec des options spécifiques pour définir
  734. si les expressions régulières correspondent dans
  735. <varname>$_SERVER['REQUEST_URI']</varname> (voir les options par
  736. défaut pour la liste des options disponibles) ; si plusieurs
  737. expressions régulières correspondent à un
  738. <varname>$_SERVER['REQUEST_URI']</varname>, seule la dernière
  739. sera utilisée.
  740. </entry>
  741. </row>
  742. <row>
  743. <entry><emphasis>memorize_headers</emphasis></entry>
  744. <entry><type>Array</type></entry>
  745. <entry><methodname>array()</methodname></entry>
  746. <entry>
  747. un tableau de chaînes correspondant aux noms d'en-têtes
  748. <acronym>HTTP</acronym>. Les en-têtes listés seront stockées avec
  749. les données de cache et renvoyées lorsque le cache sera rappelé.
  750. </entry>
  751. </row>
  752. </tbody>
  753. </tgroup>
  754. </table>
  755. </sect3>
  756. <sect3 id="zend.cache.frontends.page.examples">
  757. <title>Exemples</title>
  758. <para>
  759. L'utilisation de <classname>Zend_Cache_Frontend_Page</classname> est vraiment
  760. trivial&#160;:
  761. </para>
  762. <programlisting language="php"><![CDATA[
  763. // [...] // require, configuration et factory
  764. $cache->start();
  765. // si le cache est trouvé, le résultat est envoyé au navigateur
  766. // et le script s'arrête là
  767. // reste de la page ...
  768. ]]></programlisting>
  769. <para>
  770. Un exemple plus complexe qui montre un moyen pour obtenir une gestion
  771. centralisée du cache dans un fichier d'amorçage (pour utiliser avec
  772. <classname>Zend_Controller</classname> par exemple)
  773. </para>
  774. <programlisting language="php"><![CDATA[
  775. // vous devriez éviter de mettre trop de lignes avant la section
  776. // de cache par exemple, pour des performances optimales,
  777. // "require_once" ou "Zend_Loader::loadClass" devrait être
  778. // après la section de cache
  779. $frontendOptions = array(
  780. 'lifetime' => 7200,
  781. 'debug_header' => true, // pour le déboguage
  782. 'regexps' => array(
  783. // met en cache la totalité d'IndexController
  784. '^/$' => array('cache' => true),
  785. // met en cache la totalité d'IndexController
  786. '^/index/' => array('cache' => true),
  787. // nous ne mettons pas en cache l'ArticleController...
  788. '^/article/' => array('cache' => false),
  789. // ...mais nous mettons en cache l'action "view"
  790. '^/article/view/' => array(
  791. // de cet ArticleController
  792. 'cache' => true,
  793. // et nous mettons en cache même lorsqu'il y a
  794. // des variables dans $_POST
  795. 'cache_with_post_variables' => true,
  796. // (mais le cache sera dépendent du tableau $_POST)
  797. 'make_id_with_post_variables' => true,
  798. )
  799. )
  800. );
  801. $backendOptions = array(
  802. 'cache_dir' => '/tmp/'
  803. );
  804. // obtenir un objet Zend_Cache_Frontend_Page
  805. $cache = Zend_Cache::factory('Page',
  806. 'File',
  807. $frontendOptions,
  808. $backendOptions);
  809. $cache->start();
  810. // si nous trouvons un cache, le résultat est envoyé au navigateur,
  811. // et le script s'arrête là
  812. // [...] la fin du fichier de démarrage
  813. // (ces lignes ne seront pas exécutées si on trouve un cache)
  814. ]]></programlisting>
  815. </sect3>
  816. <sect3 id="zend.cache.frontends.page.cancel">
  817. <title>La méthode spécifique cancel()</title>
  818. <para>
  819. A cause de problèmes de design, dans certains cas (par exemple quand on
  820. utilise des codes de retour <acronym>HTTP</acronym> autres que 200), vous
  821. pouvez avoir besoin de stopper le processus de mise en cache courant. Il a donc été
  822. introduit pour ce frontend en particulier, la méthode
  823. <methodname>cancel()</methodname>.
  824. </para>
  825. <programlisting language="php"><![CDATA[
  826. // [...] require, configuration et fabrique
  827. $cache->start();
  828. // [...]
  829. if ($unTest) {
  830. $cache->cancel();
  831. // [...]
  832. }
  833. // [...]
  834. ]]></programlisting>
  835. </sect3>
  836. </sect2>
  837. <sect2 id="zend.cache.frontends.capture">
  838. <title>Zend_Cache_Frontend_Capture</title>
  839. <sect3 id="zend.cache.frontends.capture.introduction">
  840. <title>Introduction</title>
  841. <para>
  842. <classname>Zend_Cache_Frontend_Capture</classname> is like
  843. <classname>Zend_Cache_Frontend_Output</classname> but designed for a complete page.
  844. It's impossible to use <classname>Zend_Cache_Frontend_Capture</classname> for
  845. caching only a single block. This class is specifically designed to operate in
  846. concert only with the <classname>Zend_Cache_Backend_Static</classname> backend to
  847. assist in caching entire pages of <acronym>HTML</acronym> / <acronym>XML</acronym>
  848. or other content to a physical static file on the local filesystem.
  849. </para>
  850. <para>
  851. Please refer to the documentation on
  852. <classname>Zend_Cache_Backend_Static</classname> for all use cases pertaining to
  853. this class.
  854. </para>
  855. <note>
  856. <para>
  857. This frontend operates by registering a callback function to be called
  858. when the output buffering it uses is cleaned. In order for this to operate
  859. correctly, it must be the final output buffer in the request. To guarantee
  860. this, the output buffering used by the Dispatcher <emphasis>must</emphasis> be
  861. disabled by calling <classname>Zend_Controller_Front</classname>'s
  862. <methodname>setParam()</methodname> method, for example,
  863. <command>$front->setParam('disableOutputBuffering', true);</command> or adding
  864. "resources.frontcontroller.params.disableOutputBuffering = true"
  865. to your bootstrap configuration file (assumed <acronym>INI</acronym>) if using
  866. <classname>Zend_Application</classname>.
  867. </para>
  868. </note>
  869. </sect3>
  870. </sect2>
  871. </sect1>