Zend_Cache-Frontends.xml 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 15103 -->
  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><classname>Zend_Cache_Core</classname></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><code>caching</code></entry>
  43. <entry><code>boolean</code></entry>
  44. <entry><code>true</code></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><code>cache_id_prefix</code></entry>
  52. <entry><code>string</code></entry>
  53. <entry><code>null</code></entry>
  54. <entry>
  55. Un préfixe pour tous les ID de cache, si réglé à
  56. <code>null</code>, aucun préfixe d'ID de cache ne sera utilisé. Le
  57. préfixe d'ID de cache sert essentiellement à créer des espaces de
  58. noms dans le cache, permettant à plusieurs applications ou sites
  59. Web d'utiliser un cache partagé. Chaque application ou site web
  60. peut utilisé un préfixe d'ID de cache différent et un préfixe peut
  61. aussi être utilisé plusieurs fois.
  62. </entry>
  63. </row>
  64. <row>
  65. <entry><code>lifetime</code></entry>
  66. <entry><code>integer</code></entry>
  67. <entry><code>3600</code></entry>
  68. <entry>
  69. Temps de vie (en secondes) du cache, si défini à
  70. <code>null</code>, le cache est valide indéfiniment
  71. </entry>
  72. </row>
  73. <row>
  74. <entry><code>logging</code></entry>
  75. <entry><code>boolean</code></entry>
  76. <entry><code>false</code></entry>
  77. <entry>
  78. Si défini à <code>true</code>, le logging par
  79. <classname>Zend_Log</classname> est activé (mais le système sera
  80. plus lent)
  81. </entry>
  82. </row>
  83. <row>
  84. <entry><code>write_control</code></entry>
  85. <entry><code>boolean</code></entry>
  86. <entry><code>true</code></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 "<code>writeControl</code>" 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><code>automatic_serialization</code></entry>
  98. <entry><code>boolean</code></entry>
  99. <entry><code>false</code></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><code>automatic_cleaning_factor</code></entry>
  108. <entry><code>int</code></entry>
  109. <entry><code>0</code></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><code>ignore_user_abort</code></entry>
  119. <entry><code>boolean</code></entry>
  120. <entry><code>false</code></entry>
  121. <entry>
  122. Si réglé à <code>true</code>, le cache active un drapeau
  123. "<code>ignore_user_abort</code>" dans la méthode
  124. <code>save()</code> pour prévenir de la corruption du cache dans
  125. 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 "<code>automatic_serialization</code>", il est possible de stocker
  138. des booléens), vous pouvez utiliser une construction plus compact comme&#160;:
  139. </para>
  140. <programlisting role="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))) {
  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 role="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))) {
  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))) {
  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. "<code>automatic_serialization</code>") 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 role="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))) {
  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 PHP pour capturer tout ce qui
  221. passe entre les méthodes <code>start()</code> et <code>end()</code>.
  222. </para>
  223. </sect3>
  224. <sect3 id="zend.cache.frontends.output.options">
  225. <title>Options disponibles</title>
  226. <para>
  227. Ce frontend n'a pas d'options spécifiques autres que celles de
  228. <classname>Zend_Cache_Core</classname>.
  229. </para>
  230. </sect3>
  231. <sect3 id="zend.cache.frontends.output.examples">
  232. <title>Exemples</title>
  233. <para>
  234. Un exemple est donnée dans le manuel, tout au début. Le voici avec des
  235. changements mineurs&#160;:
  236. </para>
  237. <programlisting role="php"><![CDATA[
  238. // s'il y a un cache manquant, la bufferisation de sortie est lancée
  239. if (!$cache->start('mypage')) {
  240. // affiche tout comme d'habitude
  241. echo 'Hello world! ';
  242. echo 'This is cached ('.time().') ';
  243. $cache->end(); // affiche ce qu'il y a dans le buffer
  244. }
  245. echo 'This is never cached ('.time().').';
  246. ]]></programlisting>
  247. <para>
  248. Utiliser cette forme est assez simple pour définir une mise de cache de
  249. sortie dans vos projets déjà en production, avec peu de refactorisation de
  250. code.
  251. </para>
  252. </sect3>
  253. </sect2>
  254. <sect2 id="zend.cache.frontends.function">
  255. <title>Zend_Cache_Frontend_Function</title>
  256. <sect3 id="zend.cache.frontends.function.introduction">
  257. <title>Introduction</title>
  258. <para>
  259. <classname>Zend_Cache_Frontend_Function</classname> met en cache les résultats des
  260. appels de fonction. Elle a une seule méthode principale appelée <code>call()</code>
  261. qui prend un nom de fonction et des paramètres pour l'appel dans un tableau.
  262. </para>
  263. </sect3>
  264. <sect3 id="zend.cache.frontends.function.options">
  265. <title>Options disponibles</title>
  266. <table id="zend.cache.frontends.function.options.table">
  267. <title>Options du frontend Function</title>
  268. <tgroup cols="4">
  269. <thead>
  270. <row>
  271. <entry>Option</entry>
  272. <entry>Type de données</entry>
  273. <entry>Valeur par défaut</entry>
  274. <entry>Description</entry>
  275. </row>
  276. </thead>
  277. <tbody>
  278. <row>
  279. <entry><code>cache_by_default</code></entry>
  280. <entry><code>boolean</code></entry>
  281. <entry><code>true</code></entry>
  282. <entry>
  283. si <code>true</code>, les appels de fonction seront mis en
  284. cache par défaut
  285. </entry>
  286. </row>
  287. <row>
  288. <entry><code>cached_functions</code></entry>
  289. <entry><code>array</code></entry>
  290. <entry></entry>
  291. <entry>les noms de fonctions seront toujours mis en cache</entry>
  292. </row>
  293. <row>
  294. <entry><code>non_cached_functions</code></entry>
  295. <entry><code>array</code></entry>
  296. <entry></entry>
  297. <entry>
  298. les noms de fonctions ne doivent jamais être mis en
  299. cache
  300. </entry>
  301. </row>
  302. </tbody>
  303. </tgroup>
  304. </table>
  305. </sect3>
  306. <sect3 id="zend.cache.frontends.function.examples">
  307. <title>Exemples</title>
  308. <para>
  309. Utiliser la fonction <code>call()</code> est la même chose qu'utiliser
  310. <code>call_user_func_array()</code> en PHP&#160;:
  311. </para>
  312. <programlisting role="php"><![CDATA[
  313. $cache->call('veryExpensiveFunc', $params);
  314. // $params est dans un tableau par exemple, pour appeler
  315. // (avec mise en cache) : veryExpensiveFunc(1, 'foo', 'bar')
  316. // vous devriez utiliser
  317. $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar'));
  318. ]]></programlisting>
  319. <para>
  320. <classname>Zend_Cache_Frontend_Function</classname> est assez intelligente pour
  321. mettre en cache la valeur de retour de la fonction, ainsi que sa sortie interne.
  322. </para>
  323. <note>
  324. <para>
  325. Vous pouvez passer n'importe quelle fonction utilisateur à l'exception de
  326. <code>array()</code>, <code>echo()</code>, <code>empty()</code>,
  327. <code>eval()</code>, <code>exit()</code>, <code>isset()</code>,
  328. <code>list()</code>, <code>print()</code> et <code>unset()</code>.
  329. </para>
  330. </note>
  331. </sect3>
  332. </sect2>
  333. <sect2 id="zend.cache.frontends.class">
  334. <title>Zend_Cache_Frontend_Class</title>
  335. <sect3 id="zend.cache.frontends.class.introduction">
  336. <title>Introduction</title>
  337. <para>
  338. <classname>Zend_Cache_Frontend_Class</classname> est différent de
  339. <classname>Zend_Cache_Frontend_Function</classname> parce qu'elle permet de mettre
  340. en cache les objets et les méthodes statiques.
  341. </para>
  342. </sect3>
  343. <sect3 id="zend.cache.frontends.class.options">
  344. <title>Options disponibles</title>
  345. <table id="zend.cache.frontends.class.options.table">
  346. <title>Options du frontend Class</title>
  347. <tgroup cols="4">
  348. <thead>
  349. <row>
  350. <entry>Option</entry>
  351. <entry>Type de données</entry>
  352. <entry>Valeur par défaut</entry>
  353. <entry>Description</entry>
  354. </row>
  355. </thead>
  356. <tbody>
  357. <row>
  358. <entry><code>cached_entity</code> (requis)</entry>
  359. <entry><code>mixed</code></entry>
  360. <entry></entry>
  361. <entry>
  362. si défini avec un nom de classe, nous allons mettre en cache
  363. une classe abstraite et utiliser uniquement les appels
  364. statiques&#160;; si défini avec un objet, nous allons mettre en
  365. cache les méthodes de cet objet.
  366. </entry>
  367. </row>
  368. <row>
  369. <entry><code>cache_by_default</code></entry>
  370. <entry><code>boolean</code></entry>
  371. <entry><code>true</code></entry>
  372. <entry>
  373. si <code>true</code>, les appels vont être cachés par
  374. défaut
  375. </entry>
  376. </row>
  377. <row>
  378. <entry><code>cached_methods</code></entry>
  379. <entry><code>array</code></entry>
  380. <entry></entry>
  381. <entry>
  382. les noms des méthodes qui seront toujours mis en
  383. cache
  384. </entry>
  385. </row>
  386. <row>
  387. <entry><code>non_cached_methods</code></entry>
  388. <entry><code>array</code></entry>
  389. <entry></entry>
  390. <entry>
  391. les noms des méthodes qui ne doivent jamais être mises en
  392. cache
  393. </entry>
  394. </row>
  395. </tbody>
  396. </tgroup>
  397. </table>
  398. </sect3>
  399. <sect3 id="zend.cache.frontends.class.examples">
  400. <title>Exemples</title>
  401. <para>
  402. Par exemple, pour mettre en cache des appels statiques&#160;:
  403. <programlisting role="php"><![CDATA[
  404. class test {
  405. // Méthode statique
  406. public static function foobar($param1, $param2) {
  407. echo "foobar_output($param1, $param2)";
  408. return "foobar_return($param1, $param2)";
  409. }
  410. }
  411. // [...]
  412. $frontendOptions = array(
  413. 'cached_entity' => 'test' // Le nom de la classe
  414. );
  415. // [...]
  416. // l'appel caché
  417. $res = $cache->foobar('1', '2');
  418. ]]></programlisting>
  419. Pour mettre en cache des appels classiques aux méthodes&#160;:
  420. <programlisting role="php"><![CDATA[
  421. class test {
  422. private $_string = 'hello !';
  423. public function foobar2($param1, $param2) {
  424. echo($this->_string);
  425. echo "foobar2_output($param1, $param2)";
  426. return "foobar2_return($param1, $param2)";
  427. }
  428. }
  429. // [...]
  430. $frontendOptions = array(
  431. 'cached_entity' => new test() // Une instance de la classe
  432. );
  433. // [...]
  434. // L'appel mis en cache
  435. $res = $cache->foobar2('1', '2');
  436. ]]></programlisting>
  437. </para>
  438. </sect3>
  439. </sect2>
  440. <sect2 id="zend.cache.frontends.file">
  441. <title>Zend_Cache_Frontend_File</title>
  442. <sect3 id="zend.cache.frontends.file.introduction">
  443. <title>Introduction</title>
  444. <para>
  445. <classname>Zend_Cache_Frontend_File</classname> est un frontend piloté par la
  446. modification d'un "fichier maître". C'est vraiment intéressant, par exemple, dans
  447. les problématiques de configuration ou de templates. Il est également possible
  448. d'utiliser plusieurs fichiers maîtres.
  449. </para>
  450. <para>
  451. Par exemple, vous avez un fichier de configuration XML qui est analysé par
  452. une fonction, celle-ci retourne un "objet de configuration" (comme avec
  453. <classname>Zend_Config</classname>). Avec
  454. <classname>Zend_Cache_Frontend_File</classname>, vous pouvez stocker l'objet de
  455. configuration dans le cache (pour éviter d'analyser le fichier de configuration XML
  456. chaque fois) mais avec une sorte de forte dépendance au fichier maître. Ainsi si le
  457. fichier XML de configuration est modifié, le cache est immédiatement invalide.
  458. </para>
  459. </sect3>
  460. <sect3 id="zend.cache.frontends.file.options">
  461. <title>Options disponibles</title>
  462. <table id="zend.cache.frontends.file.options.table">
  463. <title>Options du frontend File</title>
  464. <tgroup cols="4">
  465. <thead>
  466. <row>
  467. <entry>Option</entry>
  468. <entry>Type de données</entry>
  469. <entry>Valeur par défaut</entry>
  470. <entry>Description</entry>
  471. </row>
  472. </thead>
  473. <tbody>
  474. <row>
  475. <entry><code>master_file (déprécié)</code></entry>
  476. <entry><code>string</code></entry>
  477. <entry><code></code></entry>
  478. <entry>le chemin complet et le nom du fichier maître</entry>
  479. </row>
  480. <row>
  481. <entry><code>master_files</code></entry>
  482. <entry><code>array</code></entry>
  483. <entry><code></code></entry>
  484. <entry>un tableau de chemin complet de fichiers maîtres</entry>
  485. </row>
  486. <row>
  487. <entry><code>master_files_mode</code></entry>
  488. <entry><code>string</code></entry>
  489. <entry><classname>Zend_Cache_Frontend_File::MODE_OR</classname></entry>
  490. <entry>
  491. <classname>Zend_Cache_Frontend_File::MODE_AND</classname> oU
  492. <classname>Zend_Cache_Frontend_File::MODE_OR</classname> ; si
  493. <code>MODE_AND</code>, alors tous les fichiers maîtres doivent être
  494. modifiés pour rendre invalide le cache, si <code>MODE_OR</code>,
  495. alors un seul fichier maître modifié est nécessaire pour invalider
  496. le cache
  497. </entry>
  498. </row>
  499. <row>
  500. <entry><code>ignore_missing_master_files</code></entry>
  501. <entry><code>boolean</code></entry>
  502. <entry><code>false</code></entry>
  503. <entry>
  504. si <code>true</code>, l'absence de fichiers maîtres est
  505. ignoré silencieusement (sinon une exception est levée)
  506. </entry>
  507. </row>
  508. </tbody>
  509. </tgroup>
  510. </table>
  511. </sect3>
  512. <sect3 id="zend.cache.frontends.file.examples">
  513. <title>Exemples</title>
  514. <para>
  515. L'utilisation de ce frontend est la même que celle de
  516. <classname>Zend_Cache_Core</classname>. Il n'y a pas besoin d'exemple spécifique -
  517. la seule chose à faire est de définir le <code>master_file</code> lors de
  518. l'utilisation de la fabrique.
  519. </para>
  520. </sect3>
  521. </sect2>
  522. <sect2 id="zend.cache.frontends.page">
  523. <title>Zend_Cache_Frontend_Page</title>
  524. <sect3 id="zend.cache.frontends.page.introduction">
  525. <title>Introduction</title>
  526. <para>
  527. <classname>Zend_Cache_Frontend_Page</classname> est comme
  528. <classname>Zend_Cache_Frontend_Output</classname> mais créé pour une page complète.
  529. Il est impossible d'utiliser <classname>Zend_Cache_Frontend_Page</classname> pour
  530. mettre en cache un bloc unique.
  531. </para>
  532. <para>
  533. D'un autre côté, le "cache ID", est calculé automatiquement avec
  534. <code>$_SERVER['REQUEST_URI']</code> et (en fonction des options)
  535. <code>$_GET</code>, <code>$_POST</code>, <code>$_SESSION</code>,
  536. <code>$_COOKIE</code>, <code>$_FILES</code>. De plus, vous avez seulement une
  537. méthode pour appeler (<code>start()</code>) parce que l'appel à <code>end()</code>
  538. est totalement automatique lorsque la page est terminé.
  539. </para>
  540. <para>
  541. Pour le moment, ceci n'est pas implémenté mais nous prévoyons d'ajouter un
  542. système de condition HTTP pour économiser de la bande passante (le système émettra
  543. un en-tête "HTTP 304 Not Modified" si le cache est trouvé, et si le navigateur a
  544. déjà la bonne version).
  545. </para>
  546. </sect3>
  547. <sect3 id="zend.cache.frontends.page.options">
  548. <title>Options disponibles</title>
  549. <table id="zend.cache.frontends.page.options.table">
  550. <title>Options du frontend Page</title>
  551. <tgroup cols="4">
  552. <thead>
  553. <row>
  554. <entry>Option</entry>
  555. <entry>Type de données</entry>
  556. <entry>Valeur par défaut</entry>
  557. <entry>Description</entry>
  558. </row>
  559. </thead>
  560. <tbody>
  561. <row>
  562. <entry><code>http_conditional</code></entry>
  563. <entry><code>boolean</code></entry>
  564. <entry><code>false</code></entry>
  565. <entry>
  566. utilisez le système <code>httpConditionnal</code> ou pas
  567. (pas encore implémenté)
  568. </entry>
  569. </row>
  570. <row>
  571. <entry><code>debug_header</code></entry>
  572. <entry><code>boolean</code></entry>
  573. <entry><code>false</code></entry>
  574. <entry>
  575. si <code>true</code>, un texte de débogage est ajouté avant
  576. chaque page de cache
  577. </entry>
  578. </row>
  579. <row>
  580. <entry><code>default_options</code></entry>
  581. <entry><code>array</code></entry>
  582. <entry><code>array(...see below...)</code></entry>
  583. <entry>
  584. un tableau associatif d'options par défaut&#160;:
  585. <itemizedlist>
  586. <listitem>
  587. <para><code>(boolean, true par défaut) cache</code>&#160;:
  588. le cache est activé si <code>true</code>
  589. </para>
  590. </listitem>
  591. <listitem>
  592. <para>
  593. <code>(boolean, false par défaut)
  594. cache_with_get_variables</code>&#160;: si
  595. <code>true</code>, le cache est toujours activé même s'il
  596. y a des variables dans le tableau <code>$_GET</code>
  597. </para>
  598. </listitem>
  599. <listitem>
  600. <para>
  601. <code>(boolean, false par défaut)
  602. cache_with_post_variables</code>&#160;: si
  603. <code>true</code>, le cache est toujours activé même s'il
  604. y a des variables dans le tableau <code>$_POST</code>
  605. </para>
  606. </listitem>
  607. <listitem>
  608. <para>
  609. <code>(boolean, false par défaut)
  610. cache_with_session_variables</code>&#160;: si
  611. <code>true</code>, le cache est toujours activé s'il y a
  612. des variables dans le tableau <code>$_SESSION</code>
  613. </para>
  614. </listitem>
  615. <listitem>
  616. <para>
  617. <code>(boolean, false par défaut)
  618. cache_with_files_variables</code>&#160;: si
  619. <code>true</code>, le cache est toujours activé s'il y a
  620. des variables dans le tableau <code>$_FILES</code>
  621. </para>
  622. </listitem>
  623. <listitem>
  624. <para>
  625. <code>(boolean, false par défaut)
  626. cache_with_cookie_variables</code>&#160;: si
  627. <code>true</code>, le cache est toujours activé s'il y a
  628. des variables dans le tableau <code>$_COOKIE</code>
  629. </para>
  630. </listitem>
  631. <listitem>
  632. <para>
  633. <code>(boolean, true par défaut)
  634. make_id_with_get_variables</code>&#160;: si
  635. <code>true</code>, l'identifiant du cache sera dépendant
  636. du contenu du tableau <code>$_GET</code>
  637. </para>
  638. </listitem>
  639. <listitem>
  640. <para>
  641. <code>(boolean, true par défaut)
  642. make_id_with_post_variables</code>&#160;: si
  643. <code>true</code>, l'identifiant du cache sera dépendant
  644. du contenu du tableau <code>$_POST</code>
  645. </para>
  646. </listitem>
  647. <listitem>
  648. <para>
  649. <code>(boolean, true par défaut)
  650. make_id_with_session_variables</code>&#160;: si
  651. <code>true</code>, l'identifiant du cache sera dépendant
  652. du contenu du tableau <code>$_SESSION</code>
  653. </para>
  654. </listitem>
  655. <listitem>
  656. <para>
  657. <code>(boolean, true par défaut)
  658. make_id_with_files_variables</code>&#160;: si
  659. <code>true</code>, l'identifiant du cache sera dépendant
  660. du contenu du tableau <code>$_FILES</code>
  661. </para>
  662. </listitem>
  663. <listitem>
  664. <para>
  665. <code>(boolean, true par défaut)
  666. make_id_with_cookie_variables</code>&#160;: si
  667. <code>true</code>, l'identifiant du cache sera dépendant
  668. du contenu du tableau <code>$_COOKIE</code>
  669. </para>
  670. </listitem>
  671. <listitem>
  672. <para>
  673. <code>(int, false par défaut)
  674. specific_lifetime</code>&#160;: si <code>true</code>, la
  675. durée de vie fournie sera utilisée pour l'expression
  676. régulière choisie
  677. </para>
  678. </listitem>
  679. <listitem>
  680. <para>
  681. <code>(array, array() par défaut) tags</code>&#160;:
  682. balises pour l'enregistrement en cache
  683. </para>
  684. </listitem>
  685. <listitem>
  686. <para>
  687. <code>(int, null par défaut) priority</code>&#160;:
  688. priorité (si le backend le supporte)
  689. </para>
  690. </listitem>
  691. </itemizedlist></entry>
  692. </row>
  693. <row>
  694. <entry><code>regexps</code></entry>
  695. <entry><code>array</code></entry>
  696. <entry><code>array()</code></entry>
  697. <entry>
  698. un tableau associatif pour définir les options, uniquement
  699. pour certaines <code>REQUEST_URI</code>, les clés sont des
  700. expressions régulières PCRE, les valeurs sont des tableaux
  701. associatifs avec des options spécifiques pour définir si les
  702. expressions régulières correspondent dans
  703. <code>$_SERVER['REQUEST_URI']</code> (voir les options par défaut
  704. pour la liste des options disponibles) ; si plusieurs expressions
  705. régulières correspondent à un <code>$_SERVER['REQUEST_URI']</code>,
  706. seule la dernière sera utilisée.
  707. </entry>
  708. </row>
  709. <row>
  710. <entry><code>memorize_headers</code></entry>
  711. <entry><code>array</code></entry>
  712. <entry><code>array()</code></entry>
  713. <entry>
  714. un tableau de chaînes correspondant aux noms d'en-têtes
  715. HTTP. Les en-têtes listés seront stockées avec les données de cache
  716. et renvoyées lorsque le cache sera rappelé.
  717. </entry>
  718. </row>
  719. </tbody>
  720. </tgroup>
  721. </table>
  722. </sect3>
  723. <sect3 id="zend.cache.frontends.page.examples">
  724. <title>Exemples</title>
  725. <para>
  726. L'utilisation de <classname>Zend_Cache_Frontend_Page</classname> est vraiment
  727. trivial&#160;:
  728. <programlisting role="php"><![CDATA[
  729. // [...] // require, configuration et factory
  730. $cache->start();
  731. // si le cache est trouvé, le résultat est envoyé au navigateur
  732. // et le script s'arrête là
  733. // reste de la page ...
  734. ]]></programlisting>
  735. </para>
  736. <para>
  737. Un exemple plus complexe qui montre un moyen pour obtenir une gestion
  738. centralisée du cache dans un fichier d'amorçage (pour utiliser avec
  739. <classname>Zend_Controller</classname> par exemple)
  740. <programlisting role="php"><![CDATA[
  741. // vous devriez éviter de mettre trop de lignes avant la section
  742. // de cache par exemple, pour des performances optimales,
  743. // "require_once" ou "Zend_Loader::loadClass" devrait être
  744. // après la section de cache
  745. $frontendOptions = array(
  746. 'lifetime' => 7200,
  747. 'debug_header' => true, // pour le déboguage
  748. 'regexps' => array(
  749. // met en cache la totalité d'IndexController
  750. '^/$' => array('cache' => true),
  751. // met en cache la totalité d'IndexController
  752. '^/index/' => array('cache' => true),
  753. // nous ne mettons pas en cache l'ArticleController...
  754. '^/article/' => array('cache' => false),
  755. // ...mais nous mettons en cache l'action "view"
  756. '^/article/view/' => array(
  757. // de cet ArticleController
  758. 'cache' => true,
  759. // et nous mettons en cache même lorsqu'il y a
  760. // des variables dans $_POST
  761. 'cache_with_post_variables' => true,
  762. // (mais le cache sera dépendent du tableau $_POST)
  763. 'make_id_with_post_variables' => true,
  764. )
  765. )
  766. );
  767. $backendOptions = array(
  768. 'cache_dir' => '/tmp/'
  769. );
  770. // obtenir un objet Zend_Cache_Frontend_Page
  771. $cache = Zend_Cache::factory('Page',
  772. 'File',
  773. $frontendOptions,
  774. $backendOptions);
  775. $cache->start();
  776. // si nous trouvons un cache, le résultat est envoyé au navigateur,
  777. // et le script s'arrête là
  778. // [...] la fin du fichier de démarrage
  779. // (ces lignes ne seront pas exécutées si on trouve un cache)
  780. ]]></programlisting>
  781. </para>
  782. </sect3>
  783. <sect3 id="zend.cache.frontends.page.cancel">
  784. <title>La méthode spécifique <code>cancel</code></title>
  785. <para>
  786. A cause de problèmes de design, dans certains cas (par exemple quand on
  787. utilise des codes de retour HTTP autres que HTTP/200), vous pouvez avoir besoin de
  788. stopper le processus de mise en cache courant. Il a donc été introduit pour ce
  789. frontend en particulier, la méthode <code>cancel()</code>.
  790. </para>
  791. <programlisting role="php"><![CDATA[
  792. // [...] require, configuration et fabrique
  793. $cache->start();
  794. // [...]
  795. if ($unTest) {
  796. $cache->cancel();
  797. // [...]
  798. }
  799. // [...]
  800. ]]></programlisting>
  801. </sect3>
  802. </sect2>
  803. </sect1>