Zend_Cache-Frontends.xml 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 21109 -->
  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
  70. <constant>NULL</constant> 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
  91. des 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
  113. heißt Systematische Cache Löschung und x &gt; 1 heißt
  114. automatisches 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>Funktionsnamen, die immer gecached werden sollen</entry>
  294. </row>
  295. <row>
  296. <entry><emphasis>non_cached_functions</emphasis></entry>
  297. <entry><type>Array</type></entry>
  298. <entry></entry>
  299. <entry>Funktionsnamen, die nie gecached werden sollen</entry>
  300. </row>
  301. </tbody>
  302. </tgroup>
  303. </table>
  304. </sect3>
  305. <sect3 id="zend.cache.frontends.function.examples">
  306. <title>Beispiele</title>
  307. <para>
  308. Die Verwendung der <methodname>call()</methodname> Funktion ist die gleiche, wie
  309. die von <methodname>call_user_func_array()</methodname> in <acronym>PHP</acronym>:
  310. </para>
  311. <programlisting language="php"><![CDATA[
  312. $cache->call('veryExpensiveFunc', $params);
  313. // $params ist ein Array
  314. // Für das Aufrufen von veryExpensiveFunc(1, 'foo', 'bar') mit Caching kann,
  315. // z.B. $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar')) benutzt
  316. // werden
  317. ]]></programlisting>
  318. <para>
  319. <classname>Zend_Cache_Frontend_Function</classname> ist elegant genug, um beides zu
  320. cachen, den Rückgabewert der Funktion und deren interne Ausgabe.
  321. </para>
  322. <note>
  323. <para>
  324. Man kann jede eingebaute oder benutzerdefinierte Funktion übergeben, mit
  325. Ausnahme von <methodname>array()</methodname>, <methodname>echo()</methodname>,
  326. <methodname>empty()</methodname>, <methodname>eval()</methodname>,
  327. <methodname>exit()</methodname>, <methodname>isset()</methodname>,
  328. <methodname>list()</methodname>, <methodname>print()</methodname> und
  329. <methodname>unset()</methodname>.
  330. </para>
  331. </note>
  332. </sect3>
  333. </sect2>
  334. <sect2 id="zend.cache.frontends.class">
  335. <title>Zend_Cache_Frontend_Class</title>
  336. <sect3 id="zend.cache.frontends.class.introduction">
  337. <title>Einführung</title>
  338. <para>
  339. <classname>Zend_Cache_Frontend_Class</classname> ist unterschiedlich zu
  340. <classname>Zend_Cache_Frontend_Function</classname>, weil es das Cachen von Objekten
  341. und statischen Methodenaufrufen erlaubt.
  342. </para>
  343. </sect3>
  344. <sect3 id="zend.cache.frontends.class.options">
  345. <title>Mögliche Optionen</title>
  346. <table id="zend.cache.frontends.class.options.table">
  347. <title>Class Frontend Optionen</title>
  348. <tgroup cols="4">
  349. <thead>
  350. <row>
  351. <entry>Option</entry>
  352. <entry>Datentyp</entry>
  353. <entry>Standardwert</entry>
  354. <entry>Beschreibung</entry>
  355. </row>
  356. </thead>
  357. <tbody>
  358. <row>
  359. <entry><emphasis>cached_entity</emphasis> (Notwendig)</entry>
  360. <entry><type>Mixed</type></entry>
  361. <entry></entry>
  362. <entry>
  363. Wenn auf einen Klassennamen gesetzt, wird eine abstrakte Klasse
  364. gecached und es werden statische Aufrufe verwendet; wenn auf ein
  365. Objekt gesetzt, wird deren Objektmethoden gecached
  366. </entry>
  367. </row>
  368. <row>
  369. <entry><emphasis>cache_by_default</emphasis></entry>
  370. <entry><type>Boolean</type></entry>
  371. <entry><constant>TRUE</constant></entry>
  372. <entry>
  373. Wenn <constant>TRUE</constant>, wird der Aufruf standardmäßig
  374. gecached
  375. </entry>
  376. </row>
  377. <row>
  378. <entry><emphasis>cached_methods</emphasis></entry>
  379. <entry><type>Array</type></entry>
  380. <entry></entry>
  381. <entry>Methodennamen, die immer gecached werden sollen</entry>
  382. </row>
  383. <row>
  384. <entry><emphasis>non_cached_methods</emphasis></entry>
  385. <entry><type>Array</type></entry>
  386. <entry></entry>
  387. <entry>Methodennamen, die nie gecached werden sollen</entry>
  388. </row>
  389. </tbody>
  390. </tgroup>
  391. </table>
  392. </sect3>
  393. <sect3 id="zend.cache.frontends.class.examples">
  394. <title>Beispiele</title>
  395. <para>
  396. zum Beispiel, um einen statischen Aufruf zu cachen:
  397. </para>
  398. <programlisting language="php"><![CDATA[
  399. class Test {
  400. // Statische Methode
  401. public static function foobar($param1, $param2) {
  402. echo "foobar_output($param1, $param2)";
  403. return "foobar_return($param1, $param2)";
  404. }
  405. }
  406. // [...]
  407. $frontendOptions = array(
  408. 'cached_entity' => 'Test' // Der Name der Klasse
  409. );
  410. // [...]
  411. // Der gecachte Aufruf
  412. $result = $cache->foobar('1', '2');
  413. ]]></programlisting>
  414. <para>
  415. Um klassische Methodenaufrufe zu cachen :
  416. </para>
  417. <programlisting language="php"><![CDATA[
  418. class Test {
  419. private $_string = 'Hallo !';
  420. public function foobar2($param1, $param2) {
  421. echo($this->_string);
  422. echo "foobar2_output($param1, $param2)";
  423. return "foobar2_return($param1, $param2)";
  424. }
  425. }
  426. // [...]
  427. $frontendOptions = array(
  428. 'cached_entity' => new Test() // Eine Instanz der Klasse
  429. );
  430. // [...]
  431. // Der gecachte Aufruf
  432. $res = $cache->foobar2('1', '2');
  433. ]]></programlisting>
  434. </sect3>
  435. </sect2>
  436. <sect2 id="zend.cache.frontends.file">
  437. <title>Zend_Cache_Frontend_File</title>
  438. <sect3 id="zend.cache.frontends.file.introduction">
  439. <title>Einführung</title>
  440. <para>
  441. <classname>Zend_Cache_Frontend_File</classname> ist ein Frontend angetrieben durch
  442. den Änderungszeitpunkt einer "Masterdatei". Es ist wirklich interessant für
  443. Beispiele in Konfigurations- oder Templateanwendungen. Es ist auch möglich mehrere
  444. Masterdateien zu verwenden.
  445. </para>
  446. <para>
  447. Zum Beispiel eine <acronym>XML</acronym> Konfigurationsdatei, welche von einer
  448. Funktion geparsed wird und die ein "Config Objekt" zurückgibt (wie durch
  449. <classname>Zend_Config</classname>). Mit
  450. <classname>Zend_Cache_Frontend_File</classname> kann das "Config Objekt" im Cache
  451. gespeichert werden (um zu Verhindern, das die <acronym>XML</acronym> Konfiguration
  452. jedes mal geparsed wird), aber mit einer strengen Abhängigkeit zur "Masterdatei".
  453. Wenn also die <acronym>XML</acronym> Konfigurationsdatei geändert wird, wird der
  454. Cache sofort ungültig.
  455. </para>
  456. </sect3>
  457. <sect3 id="zend.cache.frontends.file.options">
  458. <title>Mögliche Optionen</title>
  459. <table id="zend.cache.frontends.file.options.table">
  460. <title>File Frontend Optionen</title>
  461. <tgroup cols="4">
  462. <thead>
  463. <row>
  464. <entry>Option</entry>
  465. <entry>Daten Typ</entry>
  466. <entry>Standardwert</entry>
  467. <entry>Beschreibung</entry>
  468. </row>
  469. </thead>
  470. <tbody>
  471. <row>
  472. <entry><emphasis>master_File (depreciated)</emphasis></entry>
  473. <entry><type>String</type></entry>
  474. <entry>''</entry>
  475. <entry>Der komplette Pfad und Name der Master Datei</entry>
  476. </row>
  477. <row>
  478. <entry><emphasis>master_files</emphasis></entry>
  479. <entry><type>Array</type></entry>
  480. <entry><methodname>array()</methodname></entry>
  481. <entry>Ein Array der kompletten Pfade der Masterdateien</entry>
  482. </row>
  483. <row>
  484. <entry><emphasis>master_files_mode</emphasis></entry>
  485. <entry><type>String</type></entry>
  486. <entry><constant>Zend_Cache_Frontend_File::MODE_OR</constant></entry>
  487. <entry>
  488. <constant>Zend_Cache_Frontend_File::MODE_AND</constant> oder
  489. <constant>Zend_Cache_Frontend_File::MODE_OR</constant> ;
  490. bei <constant>MODE_AND</constant> müssen alle Masterdateien
  491. angegriffen werden um einen Cache ungültig zu machen, bei
  492. <constant>MODE_OR</constant> ist eine eizelne angegriffene Datei
  493. genug um den Cache ungültig zu machen
  494. </entry>
  495. </row>
  496. <row>
  497. <entry><emphasis>ignore_missing_master_files</emphasis></entry>
  498. <entry><type>Boolean</type></entry>
  499. <entry><constant>FALSE</constant></entry>
  500. <entry>
  501. bei <constant>TRUE</constant> werden fehlende Masterdateien leise
  502. ignoriert (andernfalls wird eine Exception geworfen)
  503. </entry>
  504. </row>
  505. </tbody>
  506. </tgroup>
  507. </table>
  508. </sect3>
  509. <sect3 id="zend.cache.frontends.file.examples">
  510. <title>Beispiele</title>
  511. <para>
  512. Die Verwendung dieses Frontends ist die gleiche wie die von
  513. <classname>Zend_Cache_Core</classname>. Es gibt kein eigenes Beispiel - was als
  514. einziges gemacht werden muß, ist das <emphasis>master_File</emphasis> zu
  515. definieren, wenn die Factory verwendet wird.
  516. </para>
  517. </sect3>
  518. </sect2>
  519. <sect2 id="zend.cache.frontends.page">
  520. <title>Zend_Cache_Frontend_Page</title>
  521. <sect3 id="zend.cache.frontends.page.introduction">
  522. <title>Einführung</title>
  523. <para>
  524. <classname>Zend_Cache_Frontend_Page</classname> ist wie
  525. <classname>Zend_Cache_Frontend_Output</classname> aber entwickelt für eine komplette
  526. Seite. Es ist unmöglich <classname>Zend_Cache_Frontend_Page</classname> nur für das
  527. Cachen eines einzelnen Blockes zu verwenden.
  528. </para>
  529. <para>
  530. Andererseits wird die "Cache ID" automatisch berechnet mit
  531. <varname>$_SERVER['REQUEST_URI']</varname> und (abhängig von den Optionen) mit
  532. <varname>$_GET</varname>, <varname>$_POST</varname>, <varname>$_SESSION</varname>,
  533. <varname>$_COOKIE</varname>, <varname>$_FILES</varname>. Trotzdem muß nur eine
  534. Methode aufgerufen werden (<methodname>start()</methodname>), weil der Aufruf von
  535. <methodname>end()</methodname> immer vollautomatisch ist, wenn die Seite endet.
  536. </para>
  537. <para>
  538. Zur Zeit ist es nicht eingebaut, aber es ist ein <acronym>HTTP</acronym> abhängiges
  539. System geplant, um Bandbreiten zu sparen (das System wird ein
  540. "<acronym>HTTP</acronym> 304 nicht geändert" schicken, wenn der Cache gefunden
  541. wurde und wenn der Browser bereits eine gültige Version hat).
  542. </para>
  543. <note>
  544. <para>
  545. Dieses Frontend arbeitet indem es eine Callback Funktion registriert welche
  546. aufgerufen wird wenn das Buffern der Ausgabe welches es verwendet, gelöscht
  547. wird. Damit dies korrekt arbeitet muss es der letzte Ausgabebuffer in der
  548. Anfrage sein. Um dies zu garantieren muss der Ausgabebuffer, den der Dispatcher
  549. verwendet, deaktiviert sein indem die <methodname>setParam()</methodname>
  550. Methode von <classname>Zend_Controller_Front</classname> verwendet wird. Zum
  551. Beispiel $front->setParam('disableOutputBuffering', true) oder durch hinzufügen
  552. von "resources.frontcontroller.params.disableOutputBuffering = true" zum eigenen
  553. Konfigurationsdatei der Bootstrap (INI angenommen) wenn
  554. <classname>Zend_Application</classname> verwendet wird.
  555. </para>
  556. </note>
  557. </sect3>
  558. <sect3 id="zend.cache.frontends.page.options">
  559. <title>Mögliche Optionen</title>
  560. <table id="zend.cache.frontends.page.options.table">
  561. <title>Page Frontend Optionen</title>
  562. <tgroup cols="4">
  563. <thead>
  564. <row>
  565. <entry>Option</entry>
  566. <entry>Daten Typ</entry>
  567. <entry>Standardwert</entry>
  568. <entry>Beschreibung</entry>
  569. </row>
  570. </thead>
  571. <tbody>
  572. <row>
  573. <entry><emphasis>http_conditional</emphasis></entry>
  574. <entry><type>Boolean</type></entry>
  575. <entry><constant>FALSE</constant></entry>
  576. <entry>
  577. Verwendung des http_conditional Systems (zur Zeit nicht
  578. implementiert)
  579. </entry>
  580. </row>
  581. <row>
  582. <entry><emphasis>debug_header</emphasis></entry>
  583. <entry><type>Boolean</type></entry>
  584. <entry><constant>FALSE</constant></entry>
  585. <entry>
  586. Wenn <constant>TRUE</constant>, wird ein Debugging Text vor
  587. jeder gecacheten Seite hinzugefügt
  588. </entry>
  589. </row>
  590. <row>
  591. <entry><emphasis>default_options</emphasis></entry>
  592. <entry><type>Array</type></entry>
  593. <entry><methodname>array(...siehe unten...)</methodname></entry>
  594. <entry>
  595. Ein assoziatives Array mit Standard Optionen:
  596. <itemizedlist>
  597. <listitem>
  598. <para>
  599. <emphasis>(boolean, <constant>TRUE</constant> per
  600. Default) cache</emphasis>: Cache ist aktiviert
  601. wenn <constant>TRUE</constant>
  602. </para>
  603. </listitem>
  604. <listitem>
  605. <para>
  606. <emphasis>(boolean, <constant>FALSE</constant> per
  607. Default) cache_with_get_variables</emphasis>: wenn
  608. <constant>TRUE</constant>, ist der Cache weiterhin
  609. aktiviert, selbst wenn es einige Variablen im
  610. <varname>$_GET</varname> Array gibt
  611. </para>
  612. </listitem>
  613. <listitem>
  614. <para>
  615. <emphasis>(boolean, <constant>FALSE</constant> per
  616. Default) cache_with_post_variables</emphasis>:
  617. wenn <constant>TRUE</constant>, ist der Cache
  618. weiterhin aktiviert, selbst wenn es einige Variablen
  619. im <varname>$_POST</varname> Array gibt
  620. </para>
  621. </listitem>
  622. <listitem>
  623. <para>
  624. <emphasis>(boolean, <constant>FALSE</constant> per
  625. Default) cache_with_session_variables</emphasis>:
  626. wenn <constant>TRUE</constant>, ist der Cache
  627. weiterhin aktiviert, selbst wenn es einige Variablen
  628. im <varname>$_SESSION</varname> Array gibt
  629. </para>
  630. </listitem>
  631. <listitem>
  632. <para>
  633. <emphasis>(boolean, <constant>FALSE</constant> per
  634. Default) cache_with_files_variables</emphasis>:
  635. wenn <constant>TRUE</constant>, ist der Cache
  636. weiterhin aktiviert, selbst wenn es einige Variablen
  637. im <varname>$_FILES</varname> Array gibt
  638. </para>
  639. </listitem>
  640. <listitem>
  641. <para>
  642. <emphasis>(boolean, <constant>FALSE</constant> per
  643. Default) cache_with_cookie_variables</emphasis>:
  644. wenn <constant>TRUE</constant>, ist der Cache
  645. weiterhin aktiviert, selbst wenn es einige Variablen
  646. im <varname>$_COOKIE</varname> Array gibt
  647. </para>
  648. </listitem>
  649. <listitem>
  650. <para>
  651. <emphasis>(boolean, <constant>TRUE</constant> per
  652. Default) make_id_with_get_variables</emphasis>:
  653. wenn <constant>TRUE</constant>, wird die Cache ID vom
  654. Inhalt des <varname>$_GET</varname> Arrays abhängig
  655. sein
  656. </para>
  657. </listitem>
  658. <listitem>
  659. <para>
  660. <emphasis>(boolean, <constant>TRUE</constant> per
  661. Default) make_id_with_post_variables</emphasis>:
  662. wenn <constant>TRUE</constant>, wird die Cache ID vom
  663. Inhalt des <varname>$_POST</varname> Arrays abhängig
  664. sein
  665. </para>
  666. </listitem>
  667. <listitem>
  668. <para>
  669. <emphasis>(boolean, <constant>TRUE</constant> per
  670. Default)
  671. make_id_with_session_variables</emphasis>: wenn
  672. <constant>TRUE</constant>, wird die Cache ID vom
  673. Inhalt des <varname>$_SESSION</varname> Arrays
  674. abhängig sein
  675. </para>
  676. </listitem>
  677. <listitem>
  678. <para>
  679. <emphasis>(boolean, <constant>TRUE</constant> per
  680. Default) make_id_with_files_variables</emphasis>:
  681. wenn <constant>TRUE</constant>, wird die Cache ID vom
  682. Inhalt des <varname>$_FILES</varname> Arrays abhängig
  683. sein
  684. </para>
  685. </listitem>
  686. <listitem>
  687. <para>
  688. <emphasis>(boolean, <constant>TRUE</constant> per
  689. Default) make_id_with_cookie_variables</emphasis>:
  690. wenn <constant>TRUE</constant>, wird die Cache ID vom
  691. Inhalt des <varname>$_COOKIE</varname> Arrays
  692. abhängig sein
  693. </para>
  694. </listitem>
  695. <listitem>
  696. <para>
  697. <emphasis>(int, <constant>FALSE</constant> by default)
  698. specific_lifetime</emphasis>: wenn nicht
  699. <constant>FALSE</constant>, wird die angegebene
  700. Lifetime für das ausgewählte Regex verwendet
  701. </para>
  702. </listitem>
  703. <listitem>
  704. <para>
  705. <emphasis>(array, <methodname>array()</methodname> by
  706. default) tags</emphasis>: Tags für den Cache
  707. Eintrag
  708. </para>
  709. </listitem>
  710. <listitem>
  711. <para>
  712. <emphasis>(int, <constant>NULL</constant> by default)
  713. priority</emphasis>: Priorität (wenn das Backend
  714. das unterstützt)
  715. </para>
  716. </listitem>
  717. </itemizedlist>
  718. </entry>
  719. </row>
  720. <row>
  721. <entry><emphasis>regexps</emphasis></entry>
  722. <entry><type>Array</type></entry>
  723. <entry><methodname>array()</methodname></entry>
  724. <entry>
  725. Ein assoziatives Array, um Optionen nur für einige
  726. <constant>REQUEST_URI</constant> zu setzen. Die Schlüssel sind
  727. reguläre Ausdrücke (<acronym>PCRE</acronym>), die Werte sind
  728. ein assoziatives Array mit spezifischen Optionen, die gesetzt
  729. werden sollen, wenn der reguläre Ausdruck auf
  730. <varname>$_SERVER['REQUEST_URI']</varname> passt (siehe die
  731. default_options für eine Liste der verfügbaren Optionen); wenn
  732. verschiedene reguläre Ausdrücke auf
  733. <varname>$_SERVER['REQUEST_URI']</varname> passen, wird nur der
  734. letzte verwendet.
  735. </entry>
  736. </row>
  737. <row>
  738. <entry><emphasis>memorize_headers</emphasis></entry>
  739. <entry><type>Array</type></entry>
  740. <entry><methodname>array()</methodname></entry>
  741. <entry>
  742. Ein Array von Strings die zu einem <acronym>HTTP</acronym>
  743. Headernamen korrespondieren. Aufgelistete Header werden mit den
  744. Cache Daten gespeichert und wieder "abgespielt" wenn der Cache
  745. getroffen wird.
  746. </entry>
  747. </row>
  748. </tbody>
  749. </tgroup>
  750. </table>
  751. </sect3>
  752. <sect3 id="zend.cache.frontends.page.examples">
  753. <title>Beispiele</title>
  754. <para>
  755. Die Verwendung von <classname>Zend_Cache_Frontend_Page</classname> ist wirklich
  756. trivial :
  757. </para>
  758. <programlisting language="php"><![CDATA[
  759. // [...] // Benötigt, Konfiguration und Factory
  760. $cache->start();
  761. // Wenn der Cache gefunden wurde, wird das Ergebnis zum Browser geschickt,
  762. // und das Skript stoppt hier
  763. // Rest der Seite ...
  764. ]]></programlisting>
  765. <para>
  766. Ein etwas komplexeres Beispiel, welches einen Weg zeigt, um ein zentralisiertes
  767. Cache Management in einer Bootstrap Datei zu erhalten (um es z.B. mit
  768. <classname>Zend_Controller</classname> zu verwenden)
  769. </para>
  770. <programlisting language="php"><![CDATA[
  771. /*
  772. * Es sollte vermieden werden, zu viele Zeilen vor dem Cache Bereich zu setzen
  773. * zum Beispiel sollten für optimale Performanz "require_once" oder
  774. * "Zend_Loader::loadClass" nach dem Cache Bereich stehen
  775. */
  776. $frontendOptions = array(
  777. 'lifetime' => 7200,
  778. 'debug_header' => true, // für das Debuggen
  779. 'regexps' => array(
  780. // cache den gesamten IndexController
  781. '^/$' => array('cache' => true),
  782. // cache den gesamten IndexController
  783. '^/index/' => array('cache' => true),
  784. // wir cachen nicht den ArticleController...
  785. '^/article/' => array('cache' => false),
  786. // ...aber wir cachen die "View" Aktion von diesem ArticleController
  787. '^/article/view/' => array(
  788. 'cache' => true,
  789. // und wir cachen sogar wenn es einige Variablen in $_POST gibt
  790. 'cache_with_post_variables' => true,
  791. // aber die Cache Id wird vom $_POST Array abhängig sein
  792. 'make_id_with_post_variables' => true,
  793. )
  794. )
  795. );
  796. $backendOptions = array(
  797. 'cache_dir' => '/tmp/'
  798. );
  799. // erhalte ein Zend_Cache_Frontend_Page Objekt
  800. $cache = Zend_Cache::factory('Page',
  801. 'File',
  802. $frontendOptions,
  803. $backendOptions);
  804. $cache->start();
  805. // Wenn der Cache gefunden wurde, wird das Ergebnis zum Browser geschickt,
  806. // und das Skript stoppt hier
  807. // [...] das Ende der Bootstrap Datei
  808. // diese Zeilen werden nicht ausgeführt, wenn der Cache ausgegeben wurde
  809. ]]></programlisting>
  810. </sect3>
  811. <sect3 id="zend.cache.frontends.page.cancel">
  812. <title>Die spezielle cancel Methode</title>
  813. <para>
  814. Aus Designgründen, kann es in einigen Fällen (zum Beispiel bei Verwendung von nicht
  815. <acronym>HTTP</acronym> 200 Return Codes), notwendig sein den aktuellen
  816. Cacheprozess zu unterbrechen. Deshalb zeigen wir für dieses spezielle Frontend die
  817. <methodname>cancel()</methodname> Methode.
  818. </para>
  819. <programlisting language="php"><![CDATA[
  820. // [...] // Benötigt, Konfiguration und Factory
  821. $cache->start();
  822. // [...]
  823. if ($someTest) {
  824. $cache->cancel();
  825. // [...]
  826. }
  827. // [...]
  828. ]]></programlisting>
  829. </sect3>
  830. </sect2>
  831. </sect1>