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