Zend_Cache-Frontends.xml 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 17136 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.cache.frontends">
  5. <title>Zend_Cache Frontends</title>
  6. <sect2 id="zend.cache.frontends.core">
  7. <title>Zend_Cache_Core</title>
  8. <sect3 id="zend.cache.frontends.core.introduction">
  9. <title>Einführung</title>
  10. <para>
  11. <classname>Zend_Cache_Core</classname> ist ein spezielles Frontend, da es der Kern
  12. dieses Moduls ist. Es ist ein generelles Cache Frontend und wurde von anderen
  13. Klassen erweitert.
  14. </para>
  15. <note>
  16. <para>
  17. Alle Frontends sind von <classname>Zend_Cache_Core</classname> abgeleitet, so
  18. dass deren Methoden und Optionen (wie folgt beschrieben) auch in anderen
  19. Frontends vorhanden sind. Deswegen werden sie dort nicht dokumentiert.
  20. </para>
  21. </note>
  22. </sect3>
  23. <sect3 id="zend.cache.frontends.core.options">
  24. <title>Mögliche Optionen</title>
  25. <para>
  26. Diese Optionen werden der Factory Methode übergeben wie im nachfolgenden Beispiel
  27. demonstriert.
  28. </para>
  29. <table id="zend.cache.frontends.core.options.table">
  30. <title>Core Frontend Optionen</title>
  31. <tgroup cols="4">
  32. <thead>
  33. <row>
  34. <entry>Option</entry>
  35. <entry>Daten Typ</entry>
  36. <entry>Standardwert</entry>
  37. <entry>Beschreibung</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. Ein- / Ausschalten vom Caching (kann sehr nützlich für das
  47. Debuggen von gecachten Skripten sein)
  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. Ein Präfix für alle Cache IDs. Wenn er auf
  56. <constant>NULL</constant> gesetzt wird, wird kein Cache ID Präfix
  57. verwendet. Der Cache ID Präfix erstellt grundsätzlich einen
  58. Namespace im Cache, der verschiedenen Anwendungen oder Websites
  59. die Verwendung eines gemeinsamen Caches erlaubt. Jede Anwendung
  60. oder Website kann einen anderen Cache ID Prüfix verwenden sodas
  61. spezielle Cache IDs mehr als einmal verwendet werden können.
  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. Cache Lebensdauer (in Sekunden), wenn auf <constant>NULL</constant>
  70. gesetzt, ist der Cache für immer gültig.
  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. Wenn auf <constant>TRUE</constant> gesetzt, wird das Logging durch
  79. <classname>Zend_Log</classname> aktiviert (aber das System wird
  80. langsamer)
  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. Ein- / Ausschalten der Schreibkontrolle (der Cache wird gleich
  89. gelesen, nachdem er geschrieben wurde, um fehlerhafte Einträge zu
  90. finden); das Einschalten der Schreibkontrolle wird das Schreiben des
  91. Caches etwas verlangsamen, aber nicht das Lesen des Caches (es
  92. können defekte Cache Dateien entdeckt werden, aber es ist keine
  93. perfekte Kontrolle)
  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. Ein- / Ausschalten der automatischen Serialisierung, kann dafür
  102. benutzt werden, um Daten direkt zu speichern, welche keine Strings
  103. sind (aber es ist langsamer)
  104. </entry>
  105. </row>
  106. <row>
  107. <entry><emphasis>automatic_cleaning_factor</emphasis></entry>
  108. <entry><type>Integer</type></entry>
  109. <entry>10</entry>
  110. <entry>
  111. Ausschalten / Abgleichen des automatischen Löschprozesses (Garbage
  112. Collector): 0 heißt keine automatische Löschung des Caches, 1 heißt
  113. Systematische Cache Löschung und x &gt; 1 heißt automatisches
  114. zufälliges Löschen 1 mal nach x Schreiboperationen.
  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. Auf <constant>TRUE</constant> gesetzt, wird der Kern das
  123. <acronym>PHP</acronym> Flag ignore_user_abort innerhalb der
  124. <methodname>save()</methodname> Methode setzen um Cache Korruption
  125. in einigen Fällen zu verhindern
  126. </entry>
  127. </row>
  128. </tbody>
  129. </tgroup>
  130. </table>
  131. </sect3>
  132. <sect3 id="zend.cache.core.examples">
  133. <title>Beispiele</title>
  134. <para>
  135. Ein Beispiel wird ganz am Anfang des Handbuches gegeben.
  136. </para>
  137. <para>
  138. Wenn nur Strings in den Cache gespeichert werden (denn mit der
  139. "automatic_serialization" Option wäre es möglich Booleans zu speichern), kann ein
  140. kompakterer Weg wie folgt gewählt werden:
  141. </para>
  142. <programlisting language="php"><![CDATA[
  143. // Es wird angenommen das $cache existiert
  144. $id = 'myBigLoop'; // Die Cache ID von dem "das gecached werden soll"
  145. if (!($data = $cache->load($id))) {
  146. // Cache miss
  147. $data = '';
  148. for ($i = 0; $i < 10000; $i++) {
  149. $data = $data . $i;
  150. }
  151. $cache->save($data);
  152. }
  153. // [...] Irgendwas mit $data machen (ausgeben, verarbeiten, usw.)
  154. ]]></programlisting>
  155. <para>
  156. Wenn mehrere Blöcke von Daten oder Daten Instanzen gecached werden sollen, ist die
  157. Idee dahinter die gleiche:
  158. </para>
  159. <programlisting language="php"><![CDATA[
  160. // Sicherstellen, dass eindeutige Identifizierer verwendet werden:
  161. $id1 = 'foo';
  162. $id2 = 'bar';
  163. // Block 1
  164. if (!($data = $cache->load($id1))) {
  165. // Cache miss
  166. $data = '';
  167. for ($i=0;$i<10000;$i++) {
  168. $data = $data . $i;
  169. }
  170. $cache->save($data);
  171. }
  172. echo($data);
  173. // Hier wird NIE gecached
  174. echo('NIE GECACHED! ');
  175. // Block 2
  176. if (!($data = $cache->load($id2))) {
  177. // Cache miss
  178. $data = '';
  179. for ($i=0;$i<10000;$i++) {
  180. $data = $data . '!';
  181. }
  182. $cache->save($data);
  183. }
  184. echo($data);
  185. ]]></programlisting>
  186. <para>
  187. Wenn spezielle Werte gecached werden sollen (boolean mit der
  188. "automatic_serialization" Option) oder leere Strings kann die kompakte Erstellung
  189. wie oben gezeigt nicht verwendet werden. Der Cache Eintrag muß formell getestet
  190. werden.
  191. </para>
  192. <programlisting language="php"><![CDATA[
  193. // Die kompakte Erstellung
  194. // (nicht gut wenn leere Strings und/oder boolsche Werte gecached werden)
  195. if (!($data = $cache->load($id))) {
  196. // Cache fehlgeschlagen
  197. // [...] wir erstellen $data
  198. $cache->save($data);
  199. }
  200. // wir machen etwas mit $data
  201. // [...]
  202. // die komplette Erstellung (funktioniert in jedem Fall)
  203. if (!($cache->test($id))) {
  204. // Cache fehlgeschlagen
  205. // [...] wir erstellen $data
  206. $cache->save($data);
  207. } else {
  208. // Cache getroffen
  209. $data = $cache->load($id);
  210. }
  211. // Wir machen irgendetwas mit $data
  212. ]]></programlisting>
  213. </sect3>
  214. </sect2>
  215. <sect2 id="zend.cache.frontends.output">
  216. <title>Zend_Cache_Frontend_Output</title>
  217. <sect3 id="zend.cache.frontends.output.introduction">
  218. <title>Einführung</title>
  219. <para>
  220. <classname>Zend_Cache_Frontend_Output</classname> ist ein Ausgabe-Empfangendes
  221. Frontend. Es verwendet den Ausgabe Puffer in <acronym>PHP</acronym>, um alles
  222. zwischen der <methodname>start()</methodname> und der
  223. <methodname>end()</methodname> Methode zu fangen.
  224. </para>
  225. </sect3>
  226. <sect3 id="zend.cache.frontends.output.options">
  227. <title>Mögliche Optionen</title>
  228. <para>
  229. Dieses Frontend hat keine bestimmten Optionen zusätzlich zu denen von
  230. <classname>Zend_Cache_Core</classname>.
  231. </para>
  232. </sect3>
  233. <sect3 id="zend.cache.frontends.output.examples">
  234. <title>Beispiele</title>
  235. <para>
  236. Ein Beispiel wird ganz am Anfang des Handbuches gegeben. Hier ist es mit kleinen
  237. Änderungen:
  238. </para>
  239. <programlisting language="php"><![CDATA[
  240. // Wenn es ein Cache Miss ist, wird das puffern der Ausgabe ausgelöst
  241. if( ! ($cache->start('mypage'))) {
  242. // Alle wie gewohnt ausgeben
  243. echo 'Hallo Welt! ';
  244. echo 'Das wird gecached ('.time().') ';
  245. $cache->end(); // Ausgabepufferung beenden
  246. }
  247. echo 'Hier wird nie gecached ('.time().').';
  248. ]]></programlisting>
  249. <para>
  250. Die Verwendung dieser Form ist ziemlich einfach, um Ausgabe caching in einem bereits
  251. bestehenden Projekt, mit nur wenig oder gar keinen Codeänderungen, zu erhalten.
  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>Einführung</title>
  259. <para>
  260. <classname>Zend_Cache_Frontend_Function</classname> cached das Ergebnis von
  261. Funktionsaufrufen. Es hat eine einzelne Hauptmethode genannt
  262. <methodname>call()</methodname>, welche den Funktionsnamen und Parameter für den
  263. Aufruf in einem Array entgegennimmt.
  264. </para>
  265. </sect3>
  266. <sect3 id="zend.cache.frontends.function.options">
  267. <title>Mögliche Optionen</title>
  268. <table id="zend.cache.frontends.function.options.table">
  269. <title>Cache Frontend Optionen</title>
  270. <tgroup cols="4">
  271. <thead>
  272. <row>
  273. <entry>Option</entry>
  274. <entry>Daten Typ</entry>
  275. <entry>Standardwert</entry>
  276. <entry>Beschreibung</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. Wenn <constant>TRUE</constant>, wird der Funktionsaufruf
  286. standardmäßig gecached
  287. </entry>
  288. </row>
  289. <row>
  290. <entry><emphasis>cached_functions</emphasis></entry>
  291. <entry><type>Array</type></entry>
  292. <entry></entry>
  293. <entry>
  294. Funktionsnamen, die immer gecached werden sollen
  295. </entry>
  296. </row>
  297. <row>
  298. <entry><emphasis>non_cached_functions</emphasis></entry>
  299. <entry><type>Array</type></entry>
  300. <entry></entry>
  301. <entry>
  302. Funktionsnamen, die nie gecached werden sollen
  303. </entry>
  304. </row>
  305. </tbody>
  306. </tgroup>
  307. </table>
  308. </sect3>
  309. <sect3 id="zend.cache.frontends.function.examples">
  310. <title>Beispiele</title>
  311. <para>
  312. Die Verwendung der <methodname>call()</methodname> Funktion ist die gleiche, wie
  313. die von <methodname>call_user_func_array()</methodname> in <acronym>PHP</acronym>:
  314. </para>
  315. <programlisting language="php"><![CDATA[
  316. $cache->call('veryExpensiveFunc', $params);
  317. // $params ist ein Array
  318. // Für das Aufrufen von veryExpensiveFunc(1, 'foo', 'bar') mit Caching kann,
  319. // z.B. $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar')) benutzt
  320. // werden
  321. ]]></programlisting>
  322. <para>
  323. <classname>Zend_Cache_Frontend_Function</classname> ist elegant genug, um beides zu
  324. cachen, den Rückgabewert der Funktion und deren interne Ausgabe.
  325. </para>
  326. <note><para>
  327. Man kann jede eingebaute oder benutzerdefinierte Funktion übergeben, mit Ausnahme
  328. von <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> und
  332. <methodname>unset()</methodname>.
  333. </para></note>
  334. </sect3>
  335. </sect2>
  336. <sect2 id="zend.cache.frontends.class">
  337. <title>Zend_Cache_Frontend_Class</title>
  338. <sect3 id="zend.cache.frontends.class.introduction">
  339. <title>Einführung</title>
  340. <para>
  341. <classname>Zend_Cache_Frontend_Class</classname> ist unterschiedlich zu
  342. <classname>Zend_Cache_Frontend_Function</classname>, weil es das Cachen von Objekten
  343. und statischen Methodenaufrufen erlaubt.
  344. </para>
  345. </sect3>
  346. <sect3 id="zend.cache.frontends.class.options">
  347. <title>Mögliche Optionen</title>
  348. <table id="zend.cache.frontends.class.options.table">
  349. <title>Class Frontend Optionen</title>
  350. <tgroup cols="4">
  351. <thead>
  352. <row>
  353. <entry>Option</entry>
  354. <entry>Datentyp</entry>
  355. <entry>Standardwert</entry>
  356. <entry>Beschreibung</entry>
  357. </row>
  358. </thead>
  359. <tbody>
  360. <row>
  361. <entry><emphasis>cached_entity</emphasis> (Notwendig)</entry>
  362. <entry><type>Mixed</type></entry>
  363. <entry></entry>
  364. <entry>
  365. Wenn auf einen Klassennamen gesetzt, wird eine abstrakte Klasse
  366. gecached und es werden statische Aufrufe verwendet; wenn auf ein
  367. Objekt gesetzt, wird deren Objektmethoden gecached
  368. </entry>
  369. </row>
  370. <row>
  371. <entry><emphasis>cache_by_default</emphasis></entry>
  372. <entry><type>Boolean</type></entry>
  373. <entry><constant>TRUE</constant></entry>
  374. <entry>
  375. Wenn <constant>TRUE</constant>, wird der Aufruf standardmäßig
  376. gecached
  377. </entry>
  378. </row>
  379. <row>
  380. <entry><emphasis>cached_methods</emphasis></entry>
  381. <entry><type>Array</type></entry>
  382. <entry></entry>
  383. <entry>
  384. Methodennamen, die immer gecached werden sollen
  385. </entry>
  386. </row>
  387. <row>
  388. <entry><emphasis>non_cached_methods</emphasis></entry>
  389. <entry><type>Array</type></entry>
  390. <entry></entry>
  391. <entry>
  392. Methodennamen, die nie gecached werden sollen
  393. </entry>
  394. </row>
  395. </tbody>
  396. </tgroup>
  397. </table>
  398. </sect3>
  399. <sect3 id="zend.cache.frontends.class.examples">
  400. <title>Beispiele</title>
  401. <para>
  402. zum Beispiel, um einen statischen Aufruf zu cachen:
  403. </para>
  404. <programlisting language="php"><![CDATA[
  405. class Test {
  406. // Statische Methode
  407. public static function foobar($param1, $param2) {
  408. echo "foobar_output($param1, $param2)";
  409. return "foobar_return($param1, $param2)";
  410. }
  411. }
  412. // [...]
  413. $frontendOptions = array(
  414. 'cached_entity' => 'Test' // Der Name der Klasse
  415. );
  416. // [...]
  417. // Der gecachte Aufruf
  418. $result = $cache->foobar('1', '2');
  419. ]]></programlisting>
  420. <para>
  421. Um klassische Methodenaufrufe zu cachen :
  422. </para>
  423. <programlisting language="php"><![CDATA[
  424. class Test {
  425. private $_string = 'Hallo !';
  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() // Eine Instanz der Klasse
  435. );
  436. // [...]
  437. // Der gecachte Aufruf
  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>Einführung</title>
  446. <para>
  447. <classname>Zend_Cache_Frontend_File</classname> ist ein Frontend angetrieben durch
  448. den Änderungszeitpunkt einer "Masterdatei". Es ist wirklich interessant für
  449. Beispiele in Konfigurations- oder Templateanwendungen. Es ist auch möglich mehrere
  450. Masterdateien zu verwenden.
  451. </para>
  452. <para>
  453. Zum Beispiel eine <acronym>XML</acronym> Konfigurationsdatei, welche von einer
  454. Funktion geparsed wird und die ein "Config Objekt" zurückgibt (wie durch
  455. <classname>Zend_Config</classname>). Mit
  456. <classname>Zend_Cache_Frontend_File</classname> kann das "Config Objekt" im Cache
  457. gespeichert werden (um zu Verhindern, das die <acronym>XML</acronym> Konfiguration
  458. jedes mal geparsed wird), aber mit einer strengen Abhängigkeit zur "Masterdatei".
  459. Wenn also die <acronym>XML</acronym> Konfigurationsdatei geändert wird, wird der
  460. Cache sofort ungültig.
  461. </para>
  462. </sect3>
  463. <sect3 id="zend.cache.frontends.file.options">
  464. <title>Mögliche Optionen</title>
  465. <table id="zend.cache.frontends.file.options.table">
  466. <title>File Frontend Optionen</title>
  467. <tgroup cols="4">
  468. <thead>
  469. <row>
  470. <entry>Option</entry>
  471. <entry>Daten Typ</entry>
  472. <entry>Standardwert</entry>
  473. <entry>Beschreibung</entry>
  474. </row>
  475. </thead>
  476. <tbody>
  477. <row>
  478. <entry><emphasis>master_File (depreciated)</emphasis></entry>
  479. <entry><type>String</type></entry>
  480. <entry>''</entry>
  481. <entry>
  482. Der komplette Pfad und Name der Master Datei
  483. </entry>
  484. </row>
  485. <row>
  486. <entry><emphasis>master_files</emphasis></entry>
  487. <entry><type>Array</type></entry>
  488. <entry><methodname>array()</methodname></entry>
  489. <entry>
  490. Ein Array der kompletten Pfade der Masterdateien
  491. </entry>
  492. </row>
  493. <row>
  494. <entry><emphasis>master_files_mode</emphasis></entry>
  495. <entry><type>String</type></entry>
  496. <entry>
  497. <constant>Zend_Cache_Frontend_File::MODE_OR</constant>
  498. </entry>
  499. <entry>
  500. <constant>Zend_Cache_Frontend_File::MODE_AND</constant> oder
  501. <constant>Zend_Cache_Frontend_File::MODE_OR</constant> ;
  502. bei <constant>MODE_AND</constant> müssen alle Masterdateien
  503. angegriffen werden um einen Cache ungültig zu machen, bei
  504. <constant>MODE_OR</constant> ist eine eizelne angegriffene Datei
  505. genug um den Cache ungültig zu machen
  506. </entry>
  507. </row>
  508. <row>
  509. <entry><emphasis>ignore_missing_master_files</emphasis></entry>
  510. <entry><type>Boolean</type></entry>
  511. <entry><constant>FALSE</constant></entry>
  512. <entry>
  513. bei <constant>TRUE</constant> werden fehlende Masterdateien leise
  514. ignoriert (andernfalls wird eine Exception geworfen)
  515. </entry>
  516. </row>
  517. </tbody>
  518. </tgroup>
  519. </table>
  520. </sect3>
  521. <sect3 id="zend.cache.frontends.file.examples">
  522. <title>Beispiele</title>
  523. <para>
  524. Die Verwendung dieses Frontends ist die gleiche wie die von
  525. <classname>Zend_Cache_Core</classname>. Es gibt kein eigenes Beispiel - was als
  526. einziges gemacht werden muß, ist das <emphasis>master_File</emphasis> zu
  527. definieren, wenn die Factory verwendet wird.
  528. </para>
  529. </sect3>
  530. </sect2>
  531. <sect2 id="zend.cache.frontends.page">
  532. <title>Zend_Cache_Frontend_Page</title>
  533. <sect3 id="zend.cache.frontends.page.introduction">
  534. <title>Einführung</title>
  535. <para>
  536. <classname>Zend_Cache_Frontend_Page</classname> ist wie
  537. <classname>Zend_Cache_Frontend_Output</classname> aber entwickelt für eine komplette
  538. Seite. Es ist unmöglich <classname>Zend_Cache_Frontend_Page</classname> nur für das
  539. Cachen eines einzelnen Blockes zu verwenden.
  540. </para>
  541. <para>
  542. Andererseits wird die "Cache ID" automatisch berechnet mit
  543. <varname>$_SERVER['REQUEST_URI']</varname> und (abhängig von den Optionen) mit
  544. <varname>$_GET</varname>, <varname>$_POST</varname>, <varname>$_SESSION</varname>,
  545. <varname>$_COOKIE</varname>, <varname>$_FILES</varname>. Trotzdem muß nur eine
  546. Methode aufgerufen werden (<methodname>start()</methodname>), weil der Aufruf von
  547. <methodname>end()</methodname> immer vollautomatisch ist, wenn die Seite endet.
  548. </para>
  549. <para>
  550. Zur Zeit ist es nicht eingebaut, aber es ist ein <acronym>HTTP</acronym> abhängiges
  551. System geplant, um Bandbreiten zu sparen (das System wird ein
  552. "<acronym>HTTP</acronym> 304 nicht geändert" schicken, wenn der Cache gefunden
  553. wurde und wenn der Browser bereits eine gültige Version hat).
  554. </para>
  555. </sect3>
  556. <sect3 id="zend.cache.frontends.page.options">
  557. <title>Mögliche Optionen</title>
  558. <table id="zend.cache.frontends.page.options.table">
  559. <title>Page Frontend Optionen</title>
  560. <tgroup cols="4">
  561. <thead>
  562. <row>
  563. <entry>Option</entry>
  564. <entry>Daten Typ</entry>
  565. <entry>Standardwert</entry>
  566. <entry>Beschreibung</entry>
  567. </row>
  568. </thead>
  569. <tbody>
  570. <row>
  571. <entry><emphasis>http_conditional</emphasis></entry>
  572. <entry><type>Boolean</type></entry>
  573. <entry><constant>FALSE</constant></entry>
  574. <entry>
  575. Verwendung des http_conditional Systems (zur Zeit nicht
  576. implementiert)
  577. </entry>
  578. </row>
  579. <row>
  580. <entry><emphasis>debug_header</emphasis></entry>
  581. <entry><type>Boolean</type></entry>
  582. <entry><constant>FALSE</constant></entry>
  583. <entry>
  584. Wenn <constant>TRUE</constant>, wird ein Debugging Text vor
  585. jeder gecacheten Seite hinzugefügt
  586. </entry>
  587. </row>
  588. <row>
  589. <entry><emphasis>default_options</emphasis></entry>
  590. <entry><type>Array</type></entry>
  591. <entry><methodname>array(...siehe unten...)</methodname></entry>
  592. <entry>
  593. Ein assoziatives Array mit Standard Optionen:
  594. <itemizedlist>
  595. <listitem>
  596. <para>
  597. <emphasis>(boolean, <constant>TRUE</constant> per
  598. Default) cache</emphasis>: Cache ist aktiviert
  599. wenn <constant>TRUE</constant>
  600. </para>
  601. </listitem>
  602. <listitem>
  603. <para>
  604. <emphasis>(boolean, <constant>FALSE</constant> per
  605. Default) cache_with_get_variables</emphasis>: wenn
  606. <constant>TRUE</constant>, ist der Cache weiterhin
  607. aktiviert, selbst wenn es einige Variablen im
  608. <varname>$_GET</varname> Array gibt
  609. </para>
  610. </listitem>
  611. <listitem>
  612. <para>
  613. <emphasis>(boolean, <constant>FALSE</constant> per
  614. Default) cache_with_post_variables</emphasis>:
  615. wenn <constant>TRUE</constant>, ist der Cache
  616. weiterhin aktiviert, selbst wenn es einige Variablen
  617. im <varname>$_POST</varname> Array gibt
  618. </para>
  619. </listitem>
  620. <listitem>
  621. <para>
  622. <emphasis>(boolean, <constant>FALSE</constant> per
  623. Default) cache_with_session_variables</emphasis>:
  624. wenn <constant>TRUE</constant>, ist der Cache
  625. weiterhin aktiviert, selbst wenn es einige Variablen
  626. im <varname>$_SESSION</varname> Array gibt
  627. </para>
  628. </listitem>
  629. <listitem>
  630. <para>
  631. <emphasis>(boolean, <constant>FALSE</constant> per
  632. Default) cache_with_files_variables</emphasis>:
  633. wenn <constant>TRUE</constant>, ist der Cache
  634. weiterhin aktiviert, selbst wenn es einige Variablen
  635. im <varname>$_FILES</varname> Array gibt
  636. </para>
  637. </listitem>
  638. <listitem>
  639. <para>
  640. <emphasis>(boolean, <constant>FALSE</constant> per
  641. Default) cache_with_cookie_variables</emphasis>:
  642. wenn <constant>TRUE</constant>, ist der Cache
  643. weiterhin aktiviert, selbst wenn es einige Variablen
  644. im <varname>$_COOKIE</varname> Array gibt
  645. </para>
  646. </listitem>
  647. <listitem>
  648. <para>
  649. <emphasis>(boolean, <constant>TRUE</constant> per
  650. Default) make_id_with_get_variables</emphasis>:
  651. wenn <constant>TRUE</constant>, wird die Cache ID vom
  652. Inhalt des <varname>$_GET</varname> Arrays abhängig
  653. sein
  654. </para>
  655. </listitem>
  656. <listitem>
  657. <para>
  658. <emphasis>(boolean, <constant>TRUE</constant> per
  659. Default) make_id_with_post_variables</emphasis>:
  660. wenn <constant>TRUE</constant>, wird die Cache ID vom
  661. Inhalt des <varname>$_POST</varname> Arrays abhängig
  662. sein
  663. </para>
  664. </listitem>
  665. <listitem>
  666. <para>
  667. <emphasis>(boolean, <constant>TRUE</constant> per
  668. Default)
  669. make_id_with_session_variables</emphasis>: wenn
  670. <constant>TRUE</constant>, wird die Cache ID vom
  671. Inhalt des <varname>$_SESSION</varname> Arrays
  672. abhängig sein
  673. </para>
  674. </listitem>
  675. <listitem>
  676. <para>
  677. <emphasis>(boolean, <constant>TRUE</constant> per
  678. Default) make_id_with_files_variables</emphasis>:
  679. wenn <constant>TRUE</constant>, wird die Cache ID vom
  680. Inhalt des <varname>$_FILES</varname> Arrays abhängig
  681. sein
  682. </para>
  683. </listitem>
  684. <listitem>
  685. <para>
  686. <emphasis>(boolean, <constant>TRUE</constant> per
  687. Default) make_id_with_cookie_variables</emphasis>:
  688. wenn <constant>TRUE</constant>, wird die Cache ID vom
  689. Inhalt des <varname>$_COOKIE</varname> Arrays
  690. abhängig sein
  691. </para>
  692. </listitem>
  693. <listitem>
  694. <para>
  695. <emphasis>(int, <constant>FALSE</constant> by default)
  696. specific_lifetime</emphasis>: wenn nicht
  697. <constant>FALSE</constant>, wird die angegebene
  698. Lifetime für das ausgewählte Regex verwendet
  699. </para>
  700. </listitem>
  701. <listitem>
  702. <para>
  703. <emphasis>(array, <methodname>array()</methodname> by
  704. default) tags</emphasis>: Tags für den Cache
  705. Eintrag
  706. </para>
  707. </listitem>
  708. <listitem>
  709. <para>
  710. <emphasis>(int, <constant>NULL</constant> by default)
  711. priority</emphasis>: Priorität (wenn das Backend
  712. das unterstützt)
  713. </para>
  714. </listitem>
  715. </itemizedlist>
  716. </entry>
  717. </row>
  718. <row>
  719. <entry><emphasis>regexps</emphasis></entry>
  720. <entry><type>Array</type></entry>
  721. <entry><methodname>array()</methodname></entry>
  722. <entry>
  723. Ein assoziatives Array, um Optionen nur für einige
  724. <constant>REQUEST_URI</constant> zu setzen. Die Schlüssel sind
  725. reguläre Ausdrücke (<acronym>PCRE</acronym>), die Werte sind
  726. ein assoziatives Array mit spezifischen Optionen, die gesetzt
  727. werden sollen, wenn der reguläre Ausdruck auf
  728. <varname>$_SERVER['REQUEST_URI']</varname> passt (siehe die
  729. default_options für eine Liste der verfügbaren Optionen); wenn
  730. verschiedene reguläre Ausdrücke auf
  731. <varname>$_SERVER['REQUEST_URI']</varname> passen, wird nur der
  732. letzte verwendet.
  733. </entry>
  734. </row>
  735. <row>
  736. <entry><emphasis>memorize_headers</emphasis></entry>
  737. <entry><type>Array</type></entry>
  738. <entry><methodname>array()</methodname></entry>
  739. <entry>
  740. Ein Array von Strings die zu einem <acronym>HTTP</acronym>
  741. Headernamen korrespondieren. Aufgelistete Header werden mit den
  742. Cache Daten gespeichert und wieder "abgespielt" wenn der Cache
  743. getroffen wird.
  744. </entry>
  745. </row>
  746. </tbody>
  747. </tgroup>
  748. </table>
  749. </sect3>
  750. <sect3 id="zend.cache.frontends.page.examples">
  751. <title>Beispiele</title>
  752. <para>
  753. Die Verwendung von <classname>Zend_Cache_Frontend_Page</classname> ist wirklich
  754. trivial :
  755. </para>
  756. <programlisting language="php"><![CDATA[
  757. // [...] // Benötigt, Konfiguration und Factory
  758. $cache->start();
  759. // Wenn der Cache gefunden wurde, wird das Ergebnis zum Browser geschickt,
  760. // und das Skript stoppt hier
  761. // Rest der Seite ...
  762. ]]></programlisting>
  763. <para>
  764. Ein etwas komplexeres Beispiel, welches einen Weg zeigt, um ein zentralisiertes
  765. Cache Management in einer Bootstrap Datei zu erhalten (um es z.B. mit
  766. <classname>Zend_Controller</classname> zu verwenden)
  767. </para>
  768. <programlisting language="php"><![CDATA[
  769. /*
  770. * Es sollte vermieden werden, zu viele Zeilen vor dem Cache Bereich zu setzen
  771. * zum Beispiel sollten für optimale Performanz "require_once" oder
  772. * "Zend_Loader::loadClass" nach dem Cache Bereich stehen
  773. */
  774. $frontendOptions = array(
  775. 'lifetime' => 7200,
  776. 'debug_header' => true, // für das Debuggen
  777. 'regexps' => array(
  778. // cache den gesamten IndexController
  779. '^/$' => array('cache' => true),
  780. // cache den gesamten IndexController
  781. '^/index/' => array('cache' => true),
  782. // wir cachen nicht den ArticleController...
  783. '^/article/' => array('cache' => false),
  784. // ...aber wir cachen die "View" Aktion von diesem ArticleController
  785. '^/article/view/' => array(
  786. 'cache' => true,
  787. // und wir cachen sogar wenn es einige Variablen in $_POST gibt
  788. 'cache_with_post_variables' => true,
  789. // aber die Cache Id wird vom $_POST Array abhängig sein
  790. 'make_id_with_post_variables' => true,
  791. )
  792. )
  793. );
  794. $backendOptions = array(
  795. 'cache_dir' => '/tmp/'
  796. );
  797. // erhalte ein Zend_Cache_Frontend_Page Objekt
  798. $cache = Zend_Cache::factory('Page',
  799. 'File',
  800. $frontendOptions,
  801. $backendOptions);
  802. $cache->start();
  803. // Wenn der Cache gefunden wurde, wird das Ergebnis zum Browser geschickt,
  804. // und das Skript stoppt hier
  805. // [...] das Ende der Bootstrap Datei
  806. // diese Zeilen werden nicht ausgeführt, wenn der Cache ausgegeben wurde
  807. ]]></programlisting>
  808. </sect3>
  809. <sect3 id="zend.cache.frontends.page.cancel">
  810. <title>Die spezielle cancel Methode</title>
  811. <para>
  812. Aus Designgründen, kann es in einigen Fällen (zum Beispiel bei Verwendung von nicht
  813. <acronym>HTTP</acronym> 200 Return Codes), notwendig sein den aktuellen
  814. Cacheprozess zu unterbrechen. Deshalb zeigen wir für dieses spezielle Frontend die
  815. <methodname>cancel()</methodname> Methode.
  816. </para>
  817. <programlisting language="php"><![CDATA[
  818. // [...] // Benötigt, Konfiguration und Factory
  819. $cache->start();
  820. // [...]
  821. if ($someTest) {
  822. $cache->cancel();
  823. // [...]
  824. }
  825. // [...]
  826. ]]></programlisting>
  827. </sect3>
  828. </sect2>
  829. </sect1>