Zend_Cache-Frontends.xml 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 22140 -->
  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 <emphasis>muss</emphasis> der
  549. Ausgabebuffer, den der Dispatcher verwendet, deaktiviert sein indem die
  550. <methodname>setParam()</methodname> Methode von
  551. <classname>Zend_Controller_Front</classname> verwendet wird. Zum Beispiel
  552. <command>$front->setParam('disableOutputBuffering', true)</command> oder durch
  553. Hinzufügen von "resources.frontcontroller.params.disableOutputBuffering = true"
  554. zum eigenen Konfigurationsdatei der Bootstrap (<acronym>INI</acronym>
  555. angenommen) wenn <classname>Zend_Application</classname> verwendet wird.
  556. </para>
  557. </note>
  558. </sect3>
  559. <sect3 id="zend.cache.frontends.page.options">
  560. <title>Mögliche Optionen</title>
  561. <table id="zend.cache.frontends.page.options.table">
  562. <title>Page Frontend Optionen</title>
  563. <tgroup cols="4">
  564. <thead>
  565. <row>
  566. <entry>Option</entry>
  567. <entry>Daten Typ</entry>
  568. <entry>Standardwert</entry>
  569. <entry>Beschreibung</entry>
  570. </row>
  571. </thead>
  572. <tbody>
  573. <row>
  574. <entry><emphasis>http_conditional</emphasis></entry>
  575. <entry><type>Boolean</type></entry>
  576. <entry><constant>FALSE</constant></entry>
  577. <entry>
  578. Verwendung des http_conditional Systems (zur Zeit nicht
  579. implementiert)
  580. </entry>
  581. </row>
  582. <row>
  583. <entry><emphasis>debug_header</emphasis></entry>
  584. <entry><type>Boolean</type></entry>
  585. <entry><constant>FALSE</constant></entry>
  586. <entry>
  587. Wenn <constant>TRUE</constant>, wird ein Debugging Text vor
  588. jeder gecacheten Seite hinzugefügt
  589. </entry>
  590. </row>
  591. <row>
  592. <entry><emphasis>default_options</emphasis></entry>
  593. <entry><type>Array</type></entry>
  594. <entry><methodname>array(...siehe unten...)</methodname></entry>
  595. <entry>
  596. Ein assoziatives Array mit Standard Optionen:
  597. <itemizedlist>
  598. <listitem>
  599. <para>
  600. <emphasis>(boolean, <constant>TRUE</constant> per
  601. Default) cache</emphasis>: Cache ist aktiviert
  602. wenn <constant>TRUE</constant>
  603. </para>
  604. </listitem>
  605. <listitem>
  606. <para>
  607. <emphasis>(boolean, <constant>FALSE</constant> per
  608. Default) cache_with_get_variables</emphasis>: wenn
  609. <constant>TRUE</constant>, ist der Cache weiterhin
  610. aktiviert, selbst wenn es einige Variablen im
  611. <varname>$_GET</varname> Array gibt
  612. </para>
  613. </listitem>
  614. <listitem>
  615. <para>
  616. <emphasis>(boolean, <constant>FALSE</constant> per
  617. Default) cache_with_post_variables</emphasis>:
  618. wenn <constant>TRUE</constant>, ist der Cache
  619. weiterhin aktiviert, selbst wenn es einige Variablen
  620. im <varname>$_POST</varname> Array gibt
  621. </para>
  622. </listitem>
  623. <listitem>
  624. <para>
  625. <emphasis>(boolean, <constant>FALSE</constant> per
  626. Default) cache_with_session_variables</emphasis>:
  627. wenn <constant>TRUE</constant>, ist der Cache
  628. weiterhin aktiviert, selbst wenn es einige Variablen
  629. im <varname>$_SESSION</varname> Array gibt
  630. </para>
  631. </listitem>
  632. <listitem>
  633. <para>
  634. <emphasis>(boolean, <constant>FALSE</constant> per
  635. Default) cache_with_files_variables</emphasis>:
  636. wenn <constant>TRUE</constant>, ist der Cache
  637. weiterhin aktiviert, selbst wenn es einige Variablen
  638. im <varname>$_FILES</varname> Array gibt
  639. </para>
  640. </listitem>
  641. <listitem>
  642. <para>
  643. <emphasis>(boolean, <constant>FALSE</constant> per
  644. Default) cache_with_cookie_variables</emphasis>:
  645. wenn <constant>TRUE</constant>, ist der Cache
  646. weiterhin aktiviert, selbst wenn es einige Variablen
  647. im <varname>$_COOKIE</varname> Array gibt
  648. </para>
  649. </listitem>
  650. <listitem>
  651. <para>
  652. <emphasis>(boolean, <constant>TRUE</constant> per
  653. Default) make_id_with_get_variables</emphasis>:
  654. wenn <constant>TRUE</constant>, wird die Cache ID vom
  655. Inhalt des <varname>$_GET</varname> Arrays abhängig
  656. sein
  657. </para>
  658. </listitem>
  659. <listitem>
  660. <para>
  661. <emphasis>(boolean, <constant>TRUE</constant> per
  662. Default) make_id_with_post_variables</emphasis>:
  663. wenn <constant>TRUE</constant>, wird die Cache ID vom
  664. Inhalt des <varname>$_POST</varname> Arrays abhängig
  665. sein
  666. </para>
  667. </listitem>
  668. <listitem>
  669. <para>
  670. <emphasis>(boolean, <constant>TRUE</constant> per
  671. Default)
  672. make_id_with_session_variables</emphasis>: wenn
  673. <constant>TRUE</constant>, wird die Cache ID vom
  674. Inhalt des <varname>$_SESSION</varname> Arrays
  675. abhängig sein
  676. </para>
  677. </listitem>
  678. <listitem>
  679. <para>
  680. <emphasis>(boolean, <constant>TRUE</constant> per
  681. Default) make_id_with_files_variables</emphasis>:
  682. wenn <constant>TRUE</constant>, wird die Cache ID vom
  683. Inhalt des <varname>$_FILES</varname> Arrays abhängig
  684. sein
  685. </para>
  686. </listitem>
  687. <listitem>
  688. <para>
  689. <emphasis>(boolean, <constant>TRUE</constant> per
  690. Default) make_id_with_cookie_variables</emphasis>:
  691. wenn <constant>TRUE</constant>, wird die Cache ID vom
  692. Inhalt des <varname>$_COOKIE</varname> Arrays
  693. abhängig sein
  694. </para>
  695. </listitem>
  696. <listitem>
  697. <para>
  698. <emphasis>(int, <constant>FALSE</constant> by default)
  699. specific_lifetime</emphasis>: wenn nicht
  700. <constant>FALSE</constant>, wird die angegebene
  701. Lifetime für das ausgewählte Regex verwendet
  702. </para>
  703. </listitem>
  704. <listitem>
  705. <para>
  706. <emphasis>(array, <methodname>array()</methodname> by
  707. default) tags</emphasis>: Tags für den Cache
  708. Eintrag
  709. </para>
  710. </listitem>
  711. <listitem>
  712. <para>
  713. <emphasis>(int, <constant>NULL</constant> by default)
  714. priority</emphasis>: Priorität (wenn das Backend
  715. das unterstützt)
  716. </para>
  717. </listitem>
  718. </itemizedlist>
  719. </entry>
  720. </row>
  721. <row>
  722. <entry><emphasis>regexps</emphasis></entry>
  723. <entry><type>Array</type></entry>
  724. <entry><methodname>array()</methodname></entry>
  725. <entry>
  726. Ein assoziatives Array, um Optionen nur für einige
  727. <constant>REQUEST_URI</constant> zu setzen. Die Schlüssel sind
  728. reguläre Ausdrücke (<acronym>PCRE</acronym>), die Werte sind
  729. ein assoziatives Array mit spezifischen Optionen, die gesetzt
  730. werden sollen, wenn der reguläre Ausdruck auf
  731. <varname>$_SERVER['REQUEST_URI']</varname> passt (siehe die
  732. default_options für eine Liste der verfügbaren Optionen); wenn
  733. verschiedene reguläre Ausdrücke auf
  734. <varname>$_SERVER['REQUEST_URI']</varname> passen, wird nur der
  735. letzte verwendet.
  736. </entry>
  737. </row>
  738. <row>
  739. <entry><emphasis>memorize_headers</emphasis></entry>
  740. <entry><type>Array</type></entry>
  741. <entry><methodname>array()</methodname></entry>
  742. <entry>
  743. Ein Array von Strings die zu einem <acronym>HTTP</acronym>
  744. Headernamen korrespondieren. Aufgelistete Header werden mit den
  745. Cache Daten gespeichert und wieder "abgespielt" wenn der Cache
  746. getroffen wird.
  747. </entry>
  748. </row>
  749. </tbody>
  750. </tgroup>
  751. </table>
  752. </sect3>
  753. <sect3 id="zend.cache.frontends.page.examples">
  754. <title>Beispiele</title>
  755. <para>
  756. Die Verwendung von <classname>Zend_Cache_Frontend_Page</classname> ist wirklich
  757. trivial :
  758. </para>
  759. <programlisting language="php"><![CDATA[
  760. // [...] // Benötigt, Konfiguration und Factory
  761. $cache->start();
  762. // Wenn der Cache gefunden wurde, wird das Ergebnis zum Browser geschickt,
  763. // und das Skript stoppt hier
  764. // Rest der Seite ...
  765. ]]></programlisting>
  766. <para>
  767. Ein etwas komplexeres Beispiel, welches einen Weg zeigt, um ein zentralisiertes
  768. Cache Management in einer Bootstrap Datei zu erhalten (um es z.B. mit
  769. <classname>Zend_Controller</classname> zu verwenden)
  770. </para>
  771. <programlisting language="php"><![CDATA[
  772. /*
  773. * Es sollte vermieden werden, zu viele Zeilen vor dem Cache Bereich zu setzen
  774. * zum Beispiel sollten für optimale Performanz "require_once" oder
  775. * "Zend_Loader::loadClass" nach dem Cache Bereich stehen
  776. */
  777. $frontendOptions = array(
  778. 'lifetime' => 7200,
  779. 'debug_header' => true, // für das Debuggen
  780. 'regexps' => array(
  781. // cache den gesamten IndexController
  782. '^/$' => array('cache' => true),
  783. // cache den gesamten IndexController
  784. '^/index/' => array('cache' => true),
  785. // wir cachen nicht den ArticleController...
  786. '^/article/' => array('cache' => false),
  787. // ...aber wir cachen die "View" Aktion von diesem ArticleController
  788. '^/article/view/' => array(
  789. 'cache' => true,
  790. // und wir cachen sogar wenn es einige Variablen in $_POST gibt
  791. 'cache_with_post_variables' => true,
  792. // aber die Cache Id wird vom $_POST Array abhängig sein
  793. 'make_id_with_post_variables' => true,
  794. )
  795. )
  796. );
  797. $backendOptions = array(
  798. 'cache_dir' => '/tmp/'
  799. );
  800. // erhalte ein Zend_Cache_Frontend_Page Objekt
  801. $cache = Zend_Cache::factory('Page',
  802. 'File',
  803. $frontendOptions,
  804. $backendOptions);
  805. $cache->start();
  806. // Wenn der Cache gefunden wurde, wird das Ergebnis zum Browser geschickt,
  807. // und das Skript stoppt hier
  808. // [...] das Ende der Bootstrap Datei
  809. // diese Zeilen werden nicht ausgeführt, wenn der Cache ausgegeben wurde
  810. ]]></programlisting>
  811. </sect3>
  812. <sect3 id="zend.cache.frontends.page.cancel">
  813. <title>Die spezielle cancel Methode</title>
  814. <para>
  815. Aus Designgründen, kann es in einigen Fällen (zum Beispiel bei Verwendung von nicht
  816. <acronym>HTTP</acronym> 200 Return Codes), notwendig sein den aktuellen
  817. Cacheprozess zu unterbrechen. Deshalb zeigen wir für dieses spezielle Frontend die
  818. <methodname>cancel()</methodname> Methode.
  819. </para>
  820. <programlisting language="php"><![CDATA[
  821. // [...] // Benötigt, Konfiguration und Factory
  822. $cache->start();
  823. // [...]
  824. if ($someTest) {
  825. $cache->cancel();
  826. // [...]
  827. }
  828. // [...]
  829. ]]></programlisting>
  830. </sect3>
  831. </sect2>
  832. <sect2 id="zend.cache.frontends.capture">
  833. <title>Zend_Cache_Frontend_Capture</title>
  834. <sect3 id="zend.cache.frontends.capture.introduction">
  835. <title>Einführung</title>
  836. <para>
  837. <classname>Zend_Cache_Frontend_Capture</classname> ist wie
  838. <classname>Zend_Cache_Frontend_Output</classname> aber für komplette Seiten
  839. gestaltet. Es ist nicht möglich <classname>Zend_Cache_Frontend_Capture</classname>
  840. für das Cachen eines einzelnen Blocks zu verwenden. Diese Klasse ist speziell dazu
  841. gestaltet um nur in Verbindung mit dem
  842. <classname>Zend_Cache_Backend_Static</classname> Backend zu funktionieren indem es
  843. komplette Seiten von <acronym>HTML</acronym> / <acronym>XML</acronym> oder anderen
  844. Inhalten in einer statischen physikalischen Datei auf dem lokalen Dateisystem
  845. cached.
  846. </para>
  847. <para>
  848. Sehen Sie bitte in die Dokumentation von
  849. <classname>Zend_Cache_Backend_Static</classname> für alle Use Cases bezüglich dieser
  850. Klasse.
  851. </para>
  852. <note>
  853. <para>
  854. Dieses Frontend arbeitet indem es eine Callback Funktion registriert welche
  855. aufgerufen wird wenn das Buffern der Ausgabe welches es verwendet, gelöscht
  856. wird. Damit dies korrekt arbeitet muss es der letzte Ausgabebuffer in der
  857. Anfrage sein. Um dies zu garantieren <acronym>muss</acronym> der Ausgabebuffer,
  858. den der Dispatcher verwendet, deaktiviert sein indem die
  859. <methodname>setParam()</methodname> Methode von
  860. <classname>Zend_Controller_Front</classname> verwendet wird. Zum Beispiel
  861. <command>$front->setParam('disableOutputBuffering', true)</command> oder durch
  862. Hinzufügen von "resources.frontcontroller.params.disableOutputBuffering = true"
  863. zum eigenen Konfigurationsdatei der Bootstrap (<acronym>INI</acronym>
  864. angenommen) wenn <classname>Zend_Application</classname> verwendet wird.
  865. </para>
  866. </note>
  867. </sect3>
  868. </sect2>
  869. </sect1>