File: Zend_Cache-Frontends.xml

package info (click to toggle)
zendframework 1.12.9%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 133,584 kB
  • sloc: xml: 1,311,829; php: 570,173; sh: 170; makefile: 125; sql: 121
file content (824 lines) | stat: -rw-r--r-- 38,582 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<sect1 id="zend.cache.frontends">
    <title>Frontendy Zend_Cache</title>

    <sect2 id="zend.cache.core">
        <title>Zend_Cache_Core</title>
        <sect3 id="zend.cache.core.introduction">
            <title>Wprowadzenie</title>
            <para>
                <classname>Zend_Cache_Core</classname> jest specjalnym frontendem ponieważ
                jest on jądrem modułu. Jest on podstawowym frontendem bufora i
                jest rozszerzany przez inne klasy.
            </para>
            <note><para>
                Wszystkie frontendy dziedziczą z klasy <classname>Zend_Cache_Core</classname>
                więc jej metody i opcje (opisane niżej) są także dostępne w innych
                frontendach, dlatego nie będą tu opisane.
            </para></note>
        </sect3>
        <sect3 id="zend.cache.core.options">
            <title>Dostępne opcje</title>
            <para>
                Te opcje są przekazywane do metody fabryki jako pokazano w
                poprzednich przykładach.
            </para>
            <table id="zend.cache.frontends.core.options.table">
                <title>Dostępne opcje</title>
                <tgroup cols="4">
                     <thead>
                          <row>
                            <entry>Opcja</entry>
                            <entry>Typ danych</entry>
                            <entry>Domyślna wartość</entry>
                            <entry>Opis</entry>
                        </row>
                     </thead>
                     <tbody>
                          <row>
                              <entry><emphasis>caching</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>TRUE</constant></entry>
                              <entry>
                                  włącza / wyłącza buforowanie (może być użyteczne do
                                  sprawdzania buforowanych skryptów)
                              </entry>
                          </row>
                          <row>
                              <entry><emphasis>cache_id_prefix</emphasis></entry>
                              <entry><type>String</type></entry>
                              <entry><constant>NULL</constant></entry>
                              <entry>
                                określa rzedrostek dla wszystkich identyfikatorów
                                bufora, jeśli ma wartość <constant>NULL</constant>, nie
                                będzie użyty żaden przedrostek. Przedrostek
                                identyfikatorów zasadniczo tworzy przestrzeń nazw
                                dla buforu, pozwalając na korzystanie z dzielonego
                                bufora przez kilka aplikacji czy serwisów
                                internetowych. Każda aplikacja czy serwis
                                internetowy powinny używać innego przedrostka,
                                więc określone identyfikatory będą mogły być
                                użyte więcej niż raz.
                              </entry>
                          </row>
                          <row>
                              <entry><emphasis>lifetime</emphasis></entry>
                              <entry><type>Integer</type></entry>
                              <entry>3600</entry>
                              <entry>
                                okres ważności bufora (w sekundach), jeśli ustawiony na
                                <constant>NULL</constant>, bufor będzie ważny na zawsze
                              </entry>
                          </row>
                          <row>
                              <entry><emphasis>logging</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>FALSE</constant></entry>
                              <entry>
                                jeśli ma wartość true, aktywowane jest logowanie za pomocą
                                <classname>Zend_Log</classname> is activated (ale system jest wolniejszy)
                              </entry>
                          </row>
                          <row>
                              <entry><emphasis>write_control</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>TRUE</constant></entry>
                              <entry>
                                Włącza / wyłącza kontrolę zapisu (bufor jest odczytywany zaraz
                                po zapisaniu aby wykryć uszkodzone wpisy), włączając kontrolę
                                zapisu lekko zwolniesz zapisywanie bufora, ale nie będzie to
                                miało wpływu na jego odczytywanie (może to wykryć niektóre
                                uszkodzone pliki bufora, ale nie jest to perfekcyjna kontrola)
                              </entry>
                          </row>
                          <row>
                              <entry><emphasis>automatic_serialization</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>FALSE</constant></entry>
                              <entry>
                                Włącza / wyłącza serializację, może być użyte do bezpośredniego
                                zapisywania danych, które nie są łańcuchami znaków (ale jest to wolniejsze)
                              </entry>
                          </row>
                          <row>
                              <entry><emphasis>automatic_cleaning_factor</emphasis></entry>
                              <entry><type>Integer</type></entry>
                              <entry>10</entry>
                              <entry>
                                Włącza / ustawia proces automatycznego czyszczenia (garbage collector):
                                0 oznacza brak automatycznego czyszczenia, 1 oznacza systematyczne czyszczenie
                                bufora, a x &gt; 1 oznacza automatyczne losowe czyszczenie 1 raz na x operacji
                                zapisu.
                              </entry>
                          </row>
                              <row>
                              <entry><emphasis>ignore_user_abort</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>FALSE</constant></entry>
                              <entry>
                                jeśli ma wartość true, komponent ustawi flagę
                                PHP ignore_user_abort wewnątrz metody save()
                                aby zapobiec uszkodzeniom buforu w niektórych
                                przypadkach
                              </entry>
                          </row>
                      </tbody>
                  </tgroup>
              </table>
        </sect3>

        <sect3 id="zend.cache.core.examples">
            <title>Przykłady</title>
            <para>
                Przykład jest podany w dokumentacji na samym początku.
            </para>
            <para>
                Jeśli w buforze przechowujesz tylko łańcuchy znakow (ponieważ z opcją "automatic_serialization" możliwe
                jest przechowywanie wartości logicznych), możesz użyć bardziej kompaktowej konstrukcji:
            </para>
            <programlisting language="php"><![CDATA[
// zakładamy, że mamy już obiekt $cache

$id = 'myBigLoop'; // id bufora czyli "tego co chcemy buforować"

if (!($data = $cache->load($id))) {
    // brak bufora

    $data = '';
    for ($i = 0; $i < 10000; $i++) {
        $data = $data . $i;
    }

    $cache->save($data);

}

// [...] przetwarzaj dane $data (wyświetl je, przekaż itp.)
]]></programlisting>
            <para>
                Jeśli chcesz buforować wiele bloków lub instancji danych, idea
                jest ta sama:
            </para>
            <programlisting language="php"><![CDATA[
// upewnij się, że używasz unikalnych identyfiikatorów:
$id1 = 'foo';
$id2 = 'bar';

// blok 1
if (!($data = $cache->load($id1))) {
    // brak bufora

    $data = '';
    for ($i=0;$i<10000;$i++) {
        $data = $data . $i;
    }

    $cache->save($data);

}
echo($data);

// to nigdy nie jest buforowane
echo('NEVER CACHED! ');

// blok 2
if (!($data = $cache->load($id2))) {
    // brak bufora

    $data = '';
    for ($i=0;$i<10000;$i++) {
        $data = $data . '!';
    }

    $cache->save($data);

}
echo($data);
]]></programlisting>
            <para>
                Jeśli chcesz buforować specjalne wartości (np. wartości logiczne
                przy włączonej opcji "automatic_serialization") lub puste
                łańcuchy znaków, nie możesz używać uproszczonej konstrukcji
                przedstawionej powyżej. Musisz jawnie sprawdzić rekord bufora.
            </para>
            <programlisting language="php"><![CDATA[
// konstrukcja uproszczona (nie działa poprawnie dla pustych
// łańcuchów znaków i wartości logicznych)
if (!($data = $cache->load($id))) {

    // brak bufora

    // [...] tworzymy dane $data

    $cache->save($data);

}

// pracujemy na danych $data

// [...]

// konstrukcja kompletna (działa zawsze)
if (!($cache->test($id))) {

    // brak bufora

    // [...] tworzymy dane $data

    $cache->save($data);

} else {

    // bufor został znaleziony

    $data = $cache->load($id);

}

// pracujemy na danych $data
]]></programlisting>
        </sect3>
    </sect2>

    <sect2 id="zend.cache.frontend.output">
        <title>Zend_Cache_Frontend_Output</title>
        <sect3 id="zend.cache.frontend.output.introduction">
            <title>Wprowadzenie</title>
            <para>
                <classname>Zend_Cache_Frontend_Output</classname> jest frontendem przechwytującym
                dane wyjściowe. Przejmuje on wyświetlanie danych wyjściowych w PHP
                przechwytując wszystko co jest pomiędzy metodami <methodname>start()</methodname>
                oraz <methodname>end()</methodname>.
            </para>
        </sect3>
        <sect3 id="zend.cache.frontend.output.options">
            <title>Dostępne opcje</title>
            <para>
                Ten frontend nie ma żadnych specyficznych opcji innych niż te
                z <classname>Zend_Cache_Core</classname>.
            </para>
        </sect3>

        <sect3 id="zend.cache.frontend.output.examples">
            <title>Przykłady</title>
            <para>
                Przykład jest podany w dokumentacji na samym początku. To są główne różnice:
            </para>
            <programlisting language="php"><![CDATA[
// jeśli bufor nie istnieje, przechwytywane są dane wyjściowe
if (!($cache->start('mypage'))) {

    // wyświetlaj jak zawsze
    echo 'Witaj! ';
    echo 'To jest buforowane ('.time().') ';

    $cache->end(); // kończy się wyświetlanie danych
}

echo 'To nie jest nigdy buforowane ('.time().').';
]]></programlisting>
            <para>
                Używając tej formy bardzo łatwe jest ustawienie buforowania
                danych wyjściowych w twoim aktualnie działającym projekcie przy
                małej ilości przeróbek w kodzie lub przy ich braku.
            </para>
        </sect3>
    </sect2>

    <sect2 id="zend.cache.frontend.function">
        <title>Zend_Cache_Frontend_Function</title>
        <sect3 id="zend.cache.frontend.function.introduction">
            <title>Wprowadzenie</title>
            <para>
                Frontend <classname>Zend_Cache_Frontend_Function</classname> buforuje
                rezultaty wywołań funkcji. Posiada on jedną metodą nazwaną
                <methodname>call()</methodname>, ktora przyjmuje nazwę funkcji oraz
                parametry do wywołania w tablicy.
            </para>
        </sect3>
        <sect3 id="zend.cache.frontend.function.options">
            <title>Dostępne opcje</title>
            <table>
                <title>Dostępne opcje</title>
                <tgroup cols="4">
                     <thead>
                          <row>
                            <entry>Opcja</entry>
                            <entry>Typ danych</entry>
                            <entry>Domyślna wartość</entry>
                            <entry>Opis</entry>
                        </row>
                     </thead>
                     <tbody>
                          <row>
                              <entry><emphasis>cache_by_default</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>TRUE</constant></entry>
                              <entry>
                                  jeśli ma wartość true, wywołania funkcji będą
                                  domyślnie buforowane
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>cached_functions</emphasis></entry>
                              <entry><type>Array</type></entry>
                              <entry></entry>
                              <entry>
                                  nazwy funkcji które mają być zawsze buforowane
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>non_cached_functions</emphasis></entry>
                              <entry><type>Array</type></entry>
                              <entry></entry>
                              <entry>
                                  nazwy funkcji które nigdy nie mają być buforowane
                              </entry>
                         </row>
                      </tbody>
                  </tgroup>
              </table>
        </sect3>

        <sect3 id="zend.cache.frontend.function.examples">
            <title>Przykłady</title>
            <para>
                Użycie funkcji <methodname>call()</methodname> jest takie samo jak użycie
                funkcji <methodname>call_user_func_array()</methodname> w PHP:
            </para>
            <programlisting language="php"><![CDATA[
$cache->call('veryExpensiveFunc', $params);

// $params jest tablicą
// przykładowo aby wywołać (z buforowaniem) funkcję veryExpensiveFunc(1, 'foo', 'bar'), użyj
// $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar'))
]]></programlisting>
            <para>
                Frontend <classname>Zend_Cache_Frontend_Function</classname> jest na tyle sprytny,
                że buforuje zarówno wartość zwracaną przez funkcję, jak i wszystkie
                dane wyjściowe, które ona wypisuje.
            </para>
            <note><para>
                Możesz przekazać dowolną wbudowaną funkcję lub zdefiniowną przez
                użytkownika z wyjątkiem <methodname>array()</methodname>, <methodname>echo()</methodname>,
                <methodname>empty()</methodname>, <methodname>eval()</methodname>, <methodname>exit()</methodname>,
                <methodname>isset()</methodname>, <methodname>list()</methodname>, <methodname>print()</methodname>
                oraz <methodname>unset()</methodname>.
            </para></note>
        </sect3>
    </sect2>

    <sect2 id="zend.cache.frontend.class">
        <title>Zend_Cache_Frontend_Class</title>
        <sect3 id="zend.cache.frontend.class.introduction">
            <title>Wprowadzenie</title>
            <para>
                Frontend <classname>Zend_Cache_Frontend_Class</classname> różnie się od
                frontendu <classname>Zend_Cache_Frontend_Function</classname> tym, że
                umożliwia buforowanie wywołań metod obiektów (także statycznych)
            </para>
        </sect3>
        <sect3 id="zend.cache.frontend.class.options">
            <title>Dostępne opcje</title>
            <table  id="zend.cache.frontends.class.options.table">
                <title>Dostępne opcje</title>
                <tgroup cols="4">
                     <thead>
                          <row>
                            <entry>Opcja</entry>
                            <entry>Typ danych</entry>
                            <entry>Domyślna wartość</entry>
                            <entry>Opis</entry>
                        </row>
                     </thead>
                     <tbody>
                          <row>
                              <entry><emphasis>cached_entity</emphasis> (wymagane)</entry>
                              <entry><type>Mixed</type></entry>
                              <entry></entry>
                              <entry>
                                  jeśli ustawiona jest nazwa klasy, będziemy buforować klasę
                                  abstrakcyjną i używać tylko statycznych wywołań; jeśli ustawiony
                                  jest obiekt będziemy buforować metody tego obiektu
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>cache_by_default</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>TRUE</constant></entry>
                              <entry>
                                  jeśli ma wartość true, wywołania będą domyślnie buforowane
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>cached_methods</emphasis></entry>
                              <entry><type>Array</type></entry>
                              <entry></entry>
                              <entry>
                                  nazwy metod które mają być zawsze buforowane
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>non_cached_methods</emphasis></entry>
                              <entry><type>Array</type></entry>
                              <entry></entry>
                              <entry>
                                  nazwy metod które nie mają być nigdy buforowane
                              </entry>
                         </row>
                      </tbody>
                  </tgroup>
              </table>
        </sect3>

        <sect3 id="zend.cache.frontend.class.examples">
            <title>Przykłady</title>
            <para>
                Na przykład, aby buforować statyczne wywołania:
            </para>
            <programlisting language="php"><![CDATA[
class Test {

    // metoda statyczna
    public static function foobar($param1, $param2) {
        echo "foobar_output($param1, $param2)";
        return "foobar_return($param1, $param2)";
    }

}

// [...]
$frontendOptions = array(
    'cached_entity' => 'Test' // Nazwa klasy
);
// [...]

# buforowane wywołanie
$result = $cache->foobar('1', '2');
]]></programlisting>
            <para>
                Aby buforować klasyczne wywołania metod:
            </para>
            <programlisting language="php"><![CDATA[
class Test {

    private $_string = 'hello !';

    public function foobar2($param1, $param2) {
        echo($this->_string);
        echo "foobar2_output($param1, $param2)";
        return "foobar2_return($param1, $param2)";
    }

}

// [...]
$frontendOptions = array(
    'cached_entity' => new Test() // instancja klasy
);
// [...]

# buforowane wywołanie
$result = $cache->foobar2('1', '2');
]]></programlisting>
        </sect3>
    </sect2>

    <sect2 id="zend.cache.frontends.file">
        <title>Zend_Cache_Frontend_File</title>
        <sect3 id="zend.cache.frontends.file.introduction">
            <title>Wprowadzenie</title>
            <para>
                <classname>Zend_Cache_Frontend_File</classname> jeest frontendem działającym
                w oparciu o datę modyfikacji "głównego pliku". Jest to bardzo
                interesujące, na przykład przy zagadnieniach związanych z konfiguracją
                czy szablonami.
            </para>
            <para>
                Na przykład, jeśli masz plik konfiguracyjny XML, który jest analizowany
                przez funkcję zwracającą obiekt konfiguracji (na przykład <classname>Zend_Config</classname>).
                Za pomocą frontendu <classname>Zend_Cache_Frontend_File</classname>, możesz przechować
                obiekt konfiguracji w buforze (aby zapobiec analizowaniu pliku konfiguracyjnego
                XML za każdym razem), ale przy zależności od "głównego pliku".
                Więc jeśli plik konfiguracyjny XML zostanie zmodyfikowany, bufor natychmiast
                straci ważność.
            </para>
        </sect3>
        <sect3 id="zend.cache.frontends.file.options">
            <title>Dostępne opcje</title>
            <table id="zend.cache.frontends.file.options.table">
                <title>Dostępne opcje</title>
                <tgroup cols="4">
                     <thead>
                          <row>
                            <entry>Opcja</entry>
                            <entry>Typ danych</entry>
                            <entry>Domyślna wartość</entry>
                            <entry>Opis</entry>
                        </row>
                     </thead>
                     <tbody>
                          <row>
                              <entry><emphasis>master_file (mandatory)</emphasis></entry>
                              <entry><type>String</type></entry>
                              <entry></entry>
                              <entry>
                                  kompletna ścieżka i nazwa głównego pliku
                              </entry>
                         </row>
                      </tbody>
                  </tgroup>
              </table>
        </sect3>
        <sect3 id="zend.cache.frontends.file.examples">
            <title>Przykłady</title>
            <para>
                Użycie tego frontendu jest takie same jak <classname>Zend_Cache_Core</classname>.
                Nie ma potrzeby zamieszczania specyficznego przykładu - jedyną rzeczą
                do zrobienia jest zdefiniowanie pliku <emphasis>master_file</emphasis> gdy
                używamy metody fabryki.
            </para>
        </sect3>
    </sect2>

    <sect2 id="zend.cache.frontends.page">
        <title>Zend_Cache_Frontend_Page</title>
        <sect3 id="zend.cache.frontends.page.introduction">
            <title>Wprowadzenie</title>
            <para>
                Frontend <classname>Zend_Cache_Frontend_Page</classname> działa jak <classname>Zend_Cache_Frontend_Output</classname>
                ale jest zaprojektowany dla kompletnej strony. Nie jest możliwe użycie <classname>Zend_Cache_Frontend_Page</classname>
                do buforowania pojedynczego bloku.
            </para>
            <para>
                Z drugiej strony, identyfikator bufora jest obliczany na podstawie
                <varname>$_SERVER['REQUEST_URI']</varname> oraz (zależnie od opcji)
                <varname>$_GET</varname>, <varname>$_POST</varname>, <varname>$_SESSION</varname>, <varname>$_COOKIE</varname>, <varname>$_FILES</varname>.
                Jeszcze lepiej, masz tylko jedną metodę do wywołania (<methodname>start()</methodname>)
                ponieważ metoda <methodname>end()</methodname> jest wywoływana w pełni automatycznie
                na końcu strony.
            </para>
            <para>
                Obecnie nie jest to zaimplementowane, ale planujemy dodać warunkowy system HTTP
                w celu oszczędzania transferu (system wyśle nagłówek HTTP 304 Not Modified jeśli
                bufor istnieje i gdy przeglądarka ma aktualną wersję bufora).
            </para>
        </sect3>
        <sect3 id="zend.cache.frontends.page.options">
            <title>Dostępne opcje (for this frontend in Zend_Cache factory)</title>
            <table id="zend.cache.frontends.page.options.table">
                <title>Dostępne opcje</title>
                <tgroup cols="4">
                     <thead>
                          <row>
                            <entry>Opcja</entry>
                            <entry>Typ danych</entry>
                            <entry>Domyślna wartość</entry>
                            <entry>Opis</entry>
                        </row>
                     </thead>
                     <tbody>
                          <row>
                              <entry><emphasis>http_conditional</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>FALSE</constant></entry>
                              <entry>
                                  użyj systemu http_conditional (obecnie jeszcze nie zaimplementowane)
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>debug_header</emphasis></entry>
                              <entry><type>Boolean</type></entry>
                              <entry><constant>FALSE</constant></entry>
                              <entry>
                                  jeśli ma wartość true, testowy tekst jest dodawany przed każdą buforowaną stroną
                              </entry>
                         </row>
                         <row>
                               <entry><emphasis>default_options</emphasis></entry>
                              <entry><type>Array</type></entry>
                              <entry><methodname>array(...zobacz niżej...)</methodname></entry>
                              <entry>
                                  asocjacyjna tablica domyślnych opcji:
                                  <itemizedlist>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość true) cache</emphasis> :
                                              bufor jest włączony jeśli ma wartość true
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość false) cache_with_get_variables</emphasis> :
                                              jeśli ma wartość true, buforowanie jest włączone nawet wtedy gdy są jakieś
                                              zmienne w tablicy <varname>$_GET</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość false) cache_with_post_variables</emphasis> :
                                              jeśli ma wartość true, buforowanie jest włączone nawet wtedy gdy są jakieś
                                              zmienne w tablicy <varname>$_POST</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość false) cache_with_session_variables</emphasis> :
                                              jeśli ma wartość true, buforowanie jest włączone nawet wtedy gdy są jakieś
                                              zmienne w tablicy <varname>$_SESSION</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość false) cache_with_files_variables</emphasis> :
                                              jeśli ma wartość true, buforowanie jest włączone nawet wtedy gdy są jakieś
                                              zmienne w tablicy <varname>$_FILES</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość false) cache_with_cookie_variables</emphasis> :
                                              jeśli ma wartość true, buforowanie jest włączone nawet wtedy gdy są jakieś
                                              zmienne w tablicy <varname>$_COOKIE</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość true) makeI_id_with_get_variables</emphasis> :
                                              jeśli ma wartość true, identyfikator bufora będzie zależał od
                                              zawartości tablicy <varname>$_GET</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość true) make_id_with_post_variables</emphasis> :
                                              jeśli ma wartość true, identyfikator bufora będzie zależał od
                                              zawartości tablicy <varname>$_POST</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość true) make_id_with_session_variables</emphasis> :
                                              jeśli ma wartość true, identyfikator bufora będzie zależał od
                                              zawartości tablicy <varname>$_SESSION</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość true) make_id_with_files_variables</emphasis> :
                                              jeśli ma wartość true, identyfikator bufora będzie zależał od
                                              zawartości tablicy <varname>$_FILES</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(boolean, domyślnie wartość true) make_id_with_cookie_variables</emphasis> :
                                              jeśli ma wartość true, identyfikator bufora będzie zależał od
                                              zawartości tablicy <varname>$_COOKIE</varname>
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(int, domyślnie wartość false)
                                                  specific_lifetime</emphasis> : jeśli ma wartość
                                                  inną niż false, podana wartość zostanie użyta dla
                                                  danego wyrażenia regularnego
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(array, domyślnie wartość array()) tags</emphasis>
                                              : etykiety dla buforowanego rekordu
                                          </para>
                                      </listitem>
                                      <listitem>
                                          <para>
                                              <emphasis>(int, domyślnie wartość null) priority</emphasis> :
                                              priorytet (jeśli backend to obsługuje)
                                          </para>
                                      </listitem>
                                  </itemizedlist>
                              </entry>
                         </row>
                         <row>
                              <entry><emphasis>regexps</emphasis></entry>
                              <entry><type>Array</type></entry>
                              <entry><methodname>array()</methodname></entry>
                              <entry>
                                    tablica asocjacyjna do ustawienia opcji tylko dla pewnych adresów REQUEST_URI,
                                    klucze są wyrażeniami regularnymi (PCRE), wartości są asocjacyjnymi tablicami
                                    ze specyficznymi opcjami do ustawienia gdy wyrażenie regularne zostanie
                                    dopasowane do $_SERVER['REQUEST_URI'] (zobacz default_options aby zobaczyć listę
                                    wszystkich dostępnych opcji) ; jeśli kilka wyrażen regularnych będzie pasowało
                                    do $_SERVER['REQUEST_URI'], zostanie użyte tylko te ostatnie
                              </entry>
                         </row>
                         <row>
                             <entry><emphasis>memorize_headers</emphasis></entry>
                             <entry><type>array</type></entry>
                             <entry><methodname>array()</methodname></entry>
                             <entry>
                                 tablica łańcuchów znaków odpowiadająca nazwom nagłówków
                                 HTTP. Wymienione nagłówki będą przechowane wraz
                                 z danymi buforu i odtworzone gdy bufor zostanie użyty
                             </entry>
                         </row>
                      </tbody>
                  </tgroup>
              </table>
        </sect3>
        <sect3 id="zend.cache.frontends.page.examples">
            <title>Przykłady</title>
            <para>
                Użycie <classname>Zend_Cache_Frontend_Page</classname> jest naprawdę łatwe:
            </para>
            <programlisting language="php"><![CDATA[
// [...] // wymagane, konfiguracja i fabryka

$cache->start();
// jeśli bufor jest trafiony, wynik jest wysyłany do przeglądaki a skrypt tutaj kończy działanie

// reszta strony
]]></programlisting>
            <para>
                bardziej kompleksowy przykład, który pokazuje sposób centralnego
                zarządzania buforowaniem w pliku ładującym (przykładowo do użycia
                z klasą <classname>Zend_Controller</classname>)
            </para>
            <programlisting language="php"><![CDATA[
/**
 * Powinieneś unikać tworzenia dużej ilości kodu przed sekcją buforowania na
 * przykład, w celu optymalizacji, instrukcje "require_once" lub
 * "Zend_Loader::loadClass" powinny znajdować się za sekcją buforowania
 */

$frontendOptions = array(
   'lifetime' => 7200,
   'debug_header' => true, // dla testów
   'regexps' => array(
       // buforuj cały kontroler IndexController
       '^/$' => array('cache' => true),

       // buforuj cały kontroler IndexController
       '^/index/' => array('cache' => true),

       // nie buforuj kontrolera ArticleController...
       '^/article/' => array('cache' => false),

       // ...ale buforuj akcję "view"
       '^/article/view/' => array(
           // kontrolera ArticleController
           'cache' => true,

           // i buforuj gdy są dostępne zmienne $_POST
           'cache_with_post_variables' => true,

           // (ale bufor będzie zależał od tablicy $_POST)
           'make_id_with_post_variables' => true,
       )
   )
);

$backendOptions = array(
    'cache_dir' => '/tmp/'
);

// pobieranie obiektu Zend_Cache_Frontend_Page
$cache = Zend_Cache::factory('Page',
                             'File',
                             $frontendOptions,
                             $backendOptions);

$cache->start();
// jeśli bufor jest trafiony, wynik jest wysyłany do przeglądaki
// a skrypt tutaj kończy działanie

// [...] koniec pliku uruchamiającego
// te linie nie będą wykonane jeśli bufor jest trafiony
]]></programlisting>
        </sect3>
        <sect3 id="zend.cache.frontends.page.cancel">
            <title>Metoda zaniechania buforowania</title>
            <para>
                Z powodu wymagań projektowych, w niektórych przypadkach (na przykład
                gdy używamy kodów innych niż HTTP/200), możesz potrzebować zaniechać
                proces buforowania. Dlatego dla tego frontendu udostępniamy metodę cancel().
            </para>
            <programlisting language="php"><![CDATA[
// [...] // konfiguracja itp.

$cache->start();

// [...]

if ($someTest) {
    $cache->cancel();
    // [...]
}

// [...]
]]></programlisting>
        </sect3>
    </sect2>
</sect1>