[MANUAL] English:
[zend.git] / documentation / manual / ru / module_specs / Zend_Cache-Frontends.xml
blob32a53184c9ce16a6718189d18ed198dea5e8d87e
1 <?xml version="1.0" encoding="UTF-8"?>\r
2 <!-- Reviewed: no -->\r
3 <sect1 id="zend.cache.frontends">\r
4     <title>Фронтэнды Zend_Cache</title>\r
5 \r
6     <sect2 id="zend.cache.frontends.core">\r
7         <title>Zend_Cache_Core</title>\r
8         <sect3 id="zend.cache.frontends.core.introduction">\r
9             <title>Введение</title>\r
10             <para>\r
11                 Фронтэнд <classname>Zend_Cache_Core</classname> является особым,\r
12                 так как это ядро всего модуля. Это фронтэнд общего назначения и\r
13                 он расширяется другими классами.\r
14             </para>\r
15             <note>\r
16                 <para>\r
17                     Все фронтэнды наследуют от класса\r
18                     <classname>Zend_Cache_Core</classname>, поэтому его методы и опции,\r
19                     описанные ниже, должны быть доступны в других фронтэндах и\r
20                     не будут описываться далее.\r
21                 </para>\r
22             </note>\r
23         </sect3>\r
24         <sect3 id="zend.cache.frontends.core.options">\r
25             <title>Доступные опции</title>\r
26             <para>\r
27                 Эти опции передаются фабричному методу, как было показано в\r
28                 предыдущих примерах.\r
29             </para>\r
30             <table id="zend.cache.frontends.core.options.table">\r
31                 <title>Опции Zend_Cache_Core</title>\r
32                 <tgroup cols="4">\r
33                      <thead>\r
34                           <row>\r
35                             <entry>Опция</entry>\r
36                             <entry>Тип данных</entry>\r
37                             <entry>Значение по умолчанию</entry>\r
38                             <entry>Описание</entry>\r
39                         </row>\r
40                      </thead>\r
41                      <tbody>\r
42                           <row>\r
43                               <entry><emphasis>caching</emphasis></entry>\r
44                               <entry><type>Boolean</type></entry>\r
45                               <entry><constant>TRUE</constant></entry>\r
46                               <entry>\r
47                                   Включает/отключает кэширование (может быть\r
48                                   очень полезным при отладке кэшируемых\r
49                                   скриптов).\r
50                               </entry>\r
51                           </row>\r
52                           <row>\r
53                               <entry><emphasis>cache_id_prefix</emphasis></entry>\r
54                               <entry><type>String</type></entry>\r
55                               <entry><constant>NULL</constant></entry>\r
56                               <entry>\r
57                                   Префикс для всех идентификаторов кэша. Если\r
58                                   установлен в <constant>NULL</constant>, то префикс не\r
59                                   будет использоваться. Префикс идентификатора\r
60                                   кэша в первую очередь создает пространство\r
61                                   имен в кэше, что позволяет нескольким\r
62                                   приложениям или веб-сайтам использовать общий\r
63                                   кэш. Любое приложение или веб-сайт может\r
64                                   использовать свой префикс идентификаторов\r
65                                   кэша, благодаря чему отдельные идентификаторы\r
66                                   кеша могут использоваться многократно.\r
67                               </entry>\r
68                           </row>\r
69                           <row>\r
70                               <entry><emphasis>lifetime</emphasis></entry>\r
71                               <entry><type>Integer</type></entry>\r
72                               <entry>3600</entry>\r
73                               <entry>\r
74                                 Время жизни кэша (в секундах), если установлен в\r
75                                 <constant>NULL</constant>, то кэш имеет бесконечное\r
76                                 время жизни.\r
77                               </entry>\r
78                           </row>\r
79                           <row>\r
80                               <entry><emphasis>logging</emphasis></entry>\r
81                               <entry><type>Boolean</type></entry>\r
82                               <entry><constant>FALSE</constant></entry>\r
83                               <entry>\r
84                                  Если установлен в <constant>TRUE</constant>, то\r
85                                  включается логирование через\r
86                                  <classname>Zend_Log</classname> (но система будет\r
87                                  работать медленнее).\r
88                               </entry>\r
89                           </row>\r
90                           <row>\r
91                               <entry><emphasis>write_сontrol</emphasis></entry>\r
92                               <entry><type>Boolean</type></entry>\r
93                               <entry><constant>TRUE</constant></entry>\r
94                               <entry>\r
95                                 Включает/отключает контроль записи (кэш\r
96                                 читается сразу после записи для выявления\r
97                                 поврежденных записей), включение write_control\r
98                                 немного замедлит запись кэша, но не чтение. Этот\r
99                                 контроль поможет выявить некоторые поврежденные\r
100                                 файлы кэша, но не является совершенным.\r
101                               </entry>\r
102                           </row>\r
103                           <row>\r
104                               <entry><emphasis>automatic_serialization</emphasis></entry>\r
105                               <entry><type>Boolean</type></entry>\r
106                               <entry><constant>FALSE</constant></entry>\r
107                               <entry>\r
108                                 Включает/отключает автоматическую\r
109                                 сериализацию, она может использоваться для\r
110                                 сохранения напрямую данных, которые не являются\r
111                                 строками (но это будет медленнее).\r
112                               </entry>\r
113                           </row>\r
114                           <row>\r
115                               <entry><emphasis>automatic_cleaning_factor</emphasis></entry>\r
116                               <entry><type>Integer</type></entry>\r
117                               <entry>10</entry>\r
118                               <entry>\r
119                                 Отключает/настраивает процесс автоматической\r
120                                 очистки (сборки мусора):\r
121                                 0 означает, что автоматическая\r
122                                 чистка кэша не производится,\r
123                                 1 означает систематическую очистку\r
124                                 кэша,\r
125                                 x (integer) &gt; 1 означает, что\r
126                                 автоматическая чистка производится случайным\r
127                                 образом 1 раз на x записей кэша.\r
128                               </entry>\r
129                           </row>\r
130                           <row>\r
131                               <entry><emphasis>ignore_user_abort</emphasis></entry>\r
132                               <entry><type>Boolean</type></entry>\r
133                               <entry><constant>FALSE</constant></entry>\r
134                               <entry>\r
135                                   Если установлен в true, то ядро будет\r
136                                   устанавливать <acronym>PHP</acronym>-флаг\r
137                                   ignore_user_abort в методе\r
138                                   save() во избежание порчи кэша в некоторых\r
139                                   случаях.\r
140                               </entry>\r
141                           </row>\r
142                       </tbody>\r
143                   </tgroup>\r
144               </table>\r
145         </sect3>\r
147         <sect3 id="zend.cache.core.examples">\r
148             <title>Примеры</title>\r
149             <para>\r
150                 Пример был дан в самом начале данного раздела руководства.\r
151             </para>\r
152             <para>\r
153                 Если вы храните в кэше только строки (с опцией\r
154                 <emphasis>automatic_serialization</emphasis> возможно хранить некоторые\r
155                 булевы значения), вы можете использовать более компактную\r
156                 конструкцию, как показано ниже:\r
157             </para>\r
158             <programlisting language="php"><![CDATA[\r
159 // предполагается, что переменная $cache уже установлена\r
161 $id = 'myBigLoop'; // идентификатор того, что мы хотим закэшировать\r
163 if (!($data = $cache->load($id))) {\r
164     // промах кэша\r
166     $data = '';\r
167     for ($i = 0; $i < 10000; $i++) {\r
168         $data = $data . $i;\r
169     }\r
171     $cache->save($data);\r
175 // [...] делаем что-либо с данными (отображение, передача и т.д.)\r
176 ]]></programlisting>\r
177             <para>\r
178                 Если вы хотите закэшировать несколько блоков или экземпляров\r
179                 данных, то принцип будет тот же:\r
180             </para>\r
181             <programlisting language="php"><![CDATA[\r
182 // убедитесь, что используете уникальные идентификаторы:\r
183 $id1 = 'foo';\r
184 $id2 = 'bar';\r
186 // блок 1\r
187 if (!($data = $cache->load($id1))) {\r
188     // промах кэша\r
190     $data = '';\r
191     for ($i=0;$i<10000;$i++) {\r
192         $data = $data . $i;\r
193     }\r
195     $cache->save($data);\r
198 echo($data);\r
200 // эта часть не кэшируется\r
201 echo('НЕ КЭШИРУЕТСЯ! ');\r
203 // блок 2\r
204 if (!($data = $cache->load($id2))) {\r
205     // промах кэша\r
207     $data = '';\r
208     for ($i=0;$i<10000;$i++) {\r
209         $data = $data . '!';\r
210     }\r
212     $cache->save($data);\r
215 echo($data);]]></programlisting>\r
216             <para>\r
217                 Если вы хотите кэшировать специальные значения (булево\r
218                 значение через опцию "automatic_serialization") или пустую\r
219                 строку, то компактная форма, приведенная выше, уже не\r
220                 подходит. Проверка на наличие записи кэша должна производиться\r
221                 созданным для этого методом.\r
222             </para>\r
223             <programlisting language="php"><![CDATA[\r
224 // Копмпактная форма. Не подходит, если могут кэшироваться\r
225 // пустые строки и значения булевого типа\r
226 if (!($data = $cache->load($id))) {\r
228     // промах кэша\r
230     // [...] получаем данные и присваиваем их переменной $data\r
232     $cache->save($data);\r
236 // делаем что-либо с данными\r
238 // [...]\r
240 // Полная форма, будет работать в любом случае\r
241 if (!($cache->test($id))) {\r
243     // промах кэша\r
245     // [...] получаем данные и присваиваем их переменной $data\r
247     $cache->save($data);\r
249 } else {\r
251     // попадание в кэш\r
253     $data = $cache->load($id);\r
257 // делаем что-либо с данными\r
258 ]]></programlisting>\r
259         </sect3>\r
260     </sect2>\r
262     <sect2 id="zend.cache.frontends.output">\r
263         <title>Zend_Cache_Frontend_Output</title>\r
264         <sect3 id="zend.cache.frontends.output.introduction">\r
265             <title>Введение</title>\r
266             <para>\r
267                 <classname>Zend_Cache_Frontend_Output</classname> является фронтэндом,\r
268                 собирающим выходные данные. Он использует буферизацию вывода\r
269                 (output buffering) в <acronym>PHP</acronym> для сохранения\r
270                 всего, что выводится между его методами\r
271                 <methodname>start()</methodname> и <methodname>end()</methodname>.\r
272             </para>\r
273         </sect3>\r
274         <sect3 id="zend.cache.frontends.output.options">\r
275             <title>Доступные опции</title>\r
276             <para>\r
277                 Этот фронтэнд не имеет каких-либо специальных опций, отличных\r
278                 от опций <classname>Zend_Cache_Core</classname>.\r
279             </para>\r
280         </sect3>\r
282         <sect3 id="zend.cache.frontends.output.examples">\r
283             <title>Примеры</title>\r
284             <para>\r
285                 Пример был дан в самом начале данного руководства. Здесь\r
286                 он с небольшими изменениями:\r
287             </para>\r
288             <programlisting language="php"><![CDATA[\r
289 // если имеет место промах кэша,\r
290 // то начинается буферизация вывода\r
291 if (!($cache->start('mypage'))) {\r
293     // все выводится, как обычно\r
294     echo 'Hello world! ';\r
295     echo 'This is cached ('.time().') ';\r
297     $cache->end(); // завершение буферизации вывода\r
301 echo 'This is never cached ('.time().').';\r
302 ]]></programlisting>\r
303             <para>\r
304                 Используя эту форму, довольно легко установить кэширование\r
305                 вывода в уже работающем проекте с незначительным рефакторингом\r
306                 кода или совсем без него.\r
307             </para>\r
308         </sect3>\r
309     </sect2>\r
311     <sect2 id="zend.cache.frontends.function">\r
312         <title>Zend_Cache_Frontend_Function</title>\r
313         <sect3 id="zend.cache.frontends.function.introduction">\r
314             <title>Введение</title>\r
315             <para>\r
316                 <classname>Zend_Cache_Frontend_Function</classname> сохраняет в кэш\r
317                 результаты вызова функции. Он имеет единственный основной метод\r
318                 <methodname>call()</methodname>, который принимает имя функции и параметры\r
319                 вызова в виде массива.\r
320             </para>\r
321         </sect3>\r
322         <sect3 id="zend.cache.frontends.function.options">\r
323             <title>Доступные опции</title>\r
324             <table id="zend.cache.frontends.function.options.table">\r
325                 <title>Опции Zend_Cache_Frontend_Function</title>\r
326                 <tgroup cols="4">\r
327                      <thead>\r
328                           <row>\r
329                             <entry>Опция</entry>\r
330                             <entry>Тип данных</entry>\r
331                             <entry>Значение по умолчанию</entry>\r
332                             <entry>Описание</entry>\r
333                         </row>\r
334                      </thead>\r
335                      <tbody>\r
336                           <row>\r
337                               <entry><emphasis>cache_by_default</emphasis></entry>\r
338                               <entry><type>Boolean</type></entry>\r
339                               <entry><constant>TRUE</constant></entry>\r
340                               <entry>\r
341                                   Если равен true, то вызовы функции по\r
342                                   умолчанию кэшируются.\r
343                               </entry>\r
344                          </row>\r
345                          <row>\r
346                               <entry><emphasis>cached_functions</emphasis></entry>\r
347                               <entry><type>Array</type></entry>\r
348                               <entry></entry>\r
349                               <entry>\r
350                                   Имена функций, которые всегда кэшируются.\r
351                               </entry>\r
352                          </row>\r
353                          <row>\r
354                               <entry><emphasis>non_cached_functions</emphasis></entry>\r
355                               <entry><type>Array</type></entry>\r
356                               <entry></entry>\r
357                               <entry>\r
358                                   Имена функций, которые никогда не должны\r
359                                   кэшироваться.\r
360                               </entry>\r
361                          </row>\r
362                       </tbody>\r
363                   </tgroup>\r
364               </table>\r
365         </sect3>\r
367         <sect3 id="zend.cache.frontends.function.examples">\r
368             <title>Примеры</title>\r
369             <para>\r
370                 Функция <methodname>call()</methodname> используется так же, как и\r
371                 <methodname>call_user_func_array()</methodname> в\r
372                 <acronym>PHP</acronym>:\r
373             </para>\r
374             <programlisting language="php"><![CDATA[\r
375 $cache->call('veryExpensiveFunc', $params);\r
377 // $params является массивом\r
378 // Например, если нужно вызвать с кэшированием\r
379 // veryExpensiveFunc(1, 'foo', 'bar'),\r
380 // то вы должны использовать\r
381 // $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar'))\r
382 ]]></programlisting>\r
383             <para>\r
384                 <classname>Zend_Cache_Frontend_Function</classname> достаточно\r
385                 интеллектуален, чтобы кэшировать как возвращаемое функцией\r
386                 значение, так и данные, выводимые внутри нее.\r
387             </para>\r
388             <note>\r
389                 <para>\r
390                     Вы можете передавать любые как встроенные, так и\r
391                     определенные пользователем функции, за исключением\r
392                     <methodname>array()</methodname>,\r
393                     <methodname>echo()</methodname>, <methodname>empty()</methodname>,\r
394                     <methodname>eval()</methodname>, <methodname>exit()</methodname>,\r
395                     <methodname>isset()</methodname>, <methodname>list()</methodname>,\r
396                     <methodname>print()</methodname> и <methodname>unset()</methodname>.\r
397                 </para>\r
398             </note>\r
399         </sect3>\r
400     </sect2>\r
402     <sect2 id="zend.cache.frontends.class">\r
403         <title>Zend_Cache_Frontend_Class</title>\r
404         <sect3 id="zend.cache.frontends.class.introduction">\r
405             <title>Введение</title>\r
406             <para>\r
407                 <classname>Zend_Cache_Frontend_Class</classname> отличается от\r
408                 <classname>Zend_Cache_Frontend_Function</classname> тем, что позволяет\r
409                 кэшировать объекты и статические вызовы методов.\r
410             </para>\r
411         </sect3>\r
412         <sect3 id="zend.cache.frontends.class.options">\r
413             <title>Доступные опции</title>\r
414             <table id="zend.cache.frontends.class.options.table">\r
415                 <title>Опции Zend_Cache_Frontend_Class</title>\r
416                 <tgroup cols="4">\r
417                      <thead>\r
418                           <row>\r
419                             <entry>Опция</entry>\r
420                             <entry>Тип данных</entry>\r
421                             <entry>Значение по умолчанию</entry>\r
422                             <entry>Описание</entry>\r
423                         </row>\r
424                      </thead>\r
425                      <tbody>\r
426                           <row>\r
427                               <entry><emphasis>cached_entity</emphasis> (required)</entry>\r
428                               <entry><type>Mixed</type></entry>\r
429                               <entry></entry>\r
430                               <entry>\r
431                                   Если установлен как имя класса, то будет\r
432                                   кэшироваться абстрактный класс и будут\r
433                                   использоваться только статические вызовы; если\r
434                                   установлен как объект,\r
435                                   то будут кэшироваться методы объекта.\r
436                               </entry>\r
437                          </row>\r
438                          <row>\r
439                               <entry><emphasis>cache_by_default</emphasis></entry>\r
440                               <entry><type>Boolean</type></entry>\r
441                               <entry><constant>TRUE</constant></entry>\r
442                               <entry>\r
443                                   Если установлен в <constant>TRUE</constant>, то вызовы\r
444                                   будут кэшироваться по умолчанию.\r
445                               </entry>\r
446                          </row>\r
447                          <row>\r
448                               <entry><emphasis>cached_methods</emphasis></entry>\r
449                               <entry><type>Array</type></entry>\r
450                               <entry></entry>\r
451                               <entry>\r
452                                   Имена методов, которые должны всегда\r
453                                   кэшироваться.\r
454                               </entry>\r
455                          </row>\r
456                          <row>\r
457                               <entry><emphasis>non_cached_methods</emphasis></entry>\r
458                               <entry><type>Array</type></entry>\r
459                               <entry></entry>\r
460                               <entry>\r
461                                   Имена методов, которые никогда не должны\r
462                                   кэшироваться.\r
463                               </entry>\r
464                          </row>\r
465                       </tbody>\r
466                   </tgroup>\r
467               </table>\r
468         </sect3>\r
470         <sect3 id="zend.cache.frontends.class.examples">\r
471             <title>Примеры</title>\r
472             <para>\r
473                 Кэширование статических вызовов:\r
474             </para>\r
475             <programlisting language="php"><![CDATA[<?php\r
476 class Test {\r
478     // Статический метод\r
479     public static function foobar($param1, $param2) {\r
480         echo "foobar_output($param1, $param2)";\r
481         return "foobar_return($param1, $param2)";\r
482     }\r
486 // [...]\r
487 $frontendOptions = array(\r
488     'cached_entity' => 'Test' // имя класса\r
489 );\r
490 // [...]\r
492 // Кэшируемый вызов\r
493 $result = $cache->foobar('1', '2');\r
494 ]]></programlisting>\r
495             <para>\r
496                 Кэширование обычных вызовов методов:\r
497             </para>\r
498             <programlisting language="php"><![CDATA[\r
499 class Test {\r
501     private $_string = 'hello !';\r
503     public function foobar2($param1, $param2) {\r
504         echo($this->_string);\r
505         echo "foobar2_output($param1, $param2)";\r
506         return "foobar2_return($param1, $param2)";\r
507     }\r
511 // [...]\r
512 $frontendOptions = array(\r
513     'cached_entity' => new Test() // экземпляр класса\r
514 );\r
515 // [...]\r
517 // Кэшируемый вызов\r
518 $result = $cache->foobar2('1', '2');\r
519 ]]></programlisting>\r
520         </sect3>\r
521     </sect2>\r
523     <sect2 id="zend.cache.frontends.file">\r
524         <title>Zend_Cache_Frontend_File</title>\r
525         <sect3 id="zend.cache.frontends.file.introduction">\r
526             <title>Введение</title>\r
527             <para>\r
528                 <classname>Zend_Cache_Frontend_File</classname> является фронтэндом,\r
529                 который управляется временем изменения "ведущего файла".\r
530                 Он очень полезен для кэширования конфигураций или шаблонов.\r
531                 Можно использовать несколько ведущих файлов.\r
532             </para>\r
533             <para>\r
534                 Например, у вас есть конфигурационный файл\r
535                 <acronym>XML</acronym>. Он парсится\r
536                 функцией, которая возвращает объект конфигурации\r
537                 (наподобие <classname>Zend_Config</classname>). С помощью\r
538                 <classname>Zend_Cache_Frontend_File</classname> вы можете сохранять объект\r
539                 конфигурации в кэш, чтобы избежать повторного парсинга\r
540                 конфигурационного файла <acronym>XML</acronym>. Время жизни\r
541                 кэша будет зависеть от ведущего файла - если конфигурационный\r
542                 файл <acronym>XML</acronym> изменится, то кэш сразу становится\r
543                 недействительным.\r
544             </para>\r
545         </sect3>\r
546         <sect3 id="zend.cache.frontends.file.options">\r
547             <title>Доступные опции</title>\r
548             <table id="zend.cache.frontends.file.options.table">\r
549                 <title>Опции Zend_Cache_Frontend_File</title>\r
550                 <tgroup cols="4">\r
551                      <thead>\r
552                           <row>\r
553                             <entry>Опция</entry>\r
554                             <entry>Тип данных</entry>\r
555                             <entry>Значение по умолчанию</entry>\r
556                             <entry>Описание</entry>\r
557                         </row>\r
558                      </thead>\r
559                      <tbody>\r
560                           <row>\r
561                               <entry><emphasis>master_file</emphasis>\r
562                                   (не рекомендуется к использованию)</entry>\r
563                               <entry><type>String</type></entry>\r
564                               <entry>''</entry>\r
565                               <entry>\r
566                                   Полные путь и имя ведущего файла\r
567                               </entry>\r
568                          </row>\r
569                          <row>\r
570                               <entry><emphasis>master_files</emphasis></entry>\r
571                               <entry><type>Array</type></entry>\r
572                               <entry><methodname>array()</methodname></entry>\r
573                               <entry>\r
574                                   Массив полных путей к ведущим файлам\r
575                               </entry>\r
576                          </row>\r
577                          <row>\r
578                               <entry><emphasis>master_files_mode</emphasis></entry>\r
579                               <entry><type>String</type></entry>\r
580                               <entry><constant>Zend_Cache_Frontend_File::MODE_OR</constant></entry>\r
581                               <entry>\r
582                                   <constant>Zend_Cache_Frontend_File::MODE_AND</constant> или <constant>Zend_Cache_Frontend_File::MODE_OR</constant>;\r
583                                   если <constant>MODE_AND</constant>, то все ведущие файлы должны быть изменены для того, чтобы кэш стал недействительным\r
584                                   если <constant>MODE_OR</constant>, то достаточно изменения одного ведущего файла, чтобы кэш стал недействительным\r
585                               </entry>\r
586                          </row>\r
587                          <row>\r
588                               <entry><emphasis>ignore_missing_master_files</emphasis></entry>\r
589                               <entry><type>Boolean</type></entry>\r
590                               <entry><constant>FALSE</constant></entry>\r
591                               <entry>\r
592                                   если равен <constant>TRUE</constant>, то отсутствующие\r
593                                   ведущие файлы игнорируются, иначе бросается\r
594                                   исключение\r
595                               </entry>\r
596                          </row>\r
597                       </tbody>\r
598                   </tgroup>\r
599               </table>\r
600         </sect3>\r
601         <sect3 id="zend.cache.frontends.file.examples">\r
602             <title>Примеры</title>\r
603             <para>\r
604                 Этот фронтэнд используется так же, как и\r
605                 <classname>Zend_Cache_Core</classname>. Специальные примеры не нужны,\r
606                 единственное, что надо сделать — это указать\r
607                 <emphasis>masterFile</emphasis> при использовании фабрики.\r
608             </para>\r
609         </sect3>\r
610     </sect2>\r
612     <sect2 id="zend.cache.frontends.page">\r
613         <title>Zend_Cache_Frontend_Page</title>\r
614         <sect3 id="zend.cache.frontends.page.introduction">\r
615             <title>Введение</title>\r
616             <para>\r
617                 <classname>Zend_Cache_Frontend_Page</classname> похож на\r
618                 <classname>Zend_Cache_Frontend_Output</classname>,\r
619                 но предназначена для кэширования целых страниц.\r
620                 <classname>Zend_Cache_Frontend_Page</classname>\r
621                 нельзя использовать для кэширования отдельных блоков.\r
622             </para>\r
623             <para>\r
624                 Идентификатор кэша вычисляется автоматически\r
625                 с использованием <varname>$_SERVER['REQUEST_URI']</varname> и\r
626                 (в зависимости от опций) <varname>$_GET</varname>,\r
627                 <varname>$_POST</varname>, <varname>$_SESSION</varname>,\r
628                 <varname>$_COOKIE</varname>, <varname>$_FILES</varname>.\r
629                 Кроме этого, вы используете только один метод для вызова\r
630                 (<methodname>start()</methodname>), потому что\r
631                 <methodname>end()</methodname> вызывается\r
632                 автоматически, когда страница заканчивается.\r
633             </para>\r
634             <para>\r
635                 На данный момент мы планируем добавить условную систему\r
636                 <acronym>HTTP</acronym> для\r
637                 сохранения пропускной способности (система будет отправлять\r
638                 <acronym>HTTP</acronym> 304 Not Modified, если есть попадание\r
639                 в кэш и броузер уже имеет правильную версию страницы).\r
640             </para>\r
641         </sect3>\r
642         <sect3 id="zend.cache.frontends.page.options">\r
643             <title>Доступные опции</title>\r
644             <table id="zend.cache.frontends.page.options.table">\r
645                 <title>Опции Zend_Cache_Frontend_Page</title>\r
646                 <tgroup cols="4">\r
647                      <thead>\r
648                           <row>\r
649                             <entry>Опция</entry>\r
650                             <entry>Тип данных</entry>\r
651                             <entry>Значение по умолчанию</entry>\r
652                             <entry>Описание</entry>\r
653                         </row>\r
654                      </thead>\r
655                      <tbody>\r
656                           <row>\r
657                               <entry><emphasis>http_conditional</emphasis></entry>\r
658                               <entry><type>Boolean</type></entry>\r
659                               <entry><constant>FALSE</constant></entry>\r
660                               <entry>\r
661                                   Использовать условную систему HTTP (не\r
662                                   реализовано на данный момент)\r
663                               </entry>\r
664                          </row>\r
665                          <row>\r
666                               <entry><emphasis>debug_header</emphasis></entry>\r
667                               <entry><type>Boolean</type></entry>\r
668                               <entry><constant>FALSE</constant></entry>\r
669                               <entry>\r
670                                   Если установлен в <constant>TRUE</constant>, то\r
671                                   отладочный текст вставляется перед каждой\r
672                                   кэшируемой страницей.\r
673                               </entry>\r
674                          </row>\r
675                          <row>\r
676                               <entry><emphasis>default_options</emphasis></entry>\r
677                               <entry><type>Array</type></entry>\r
678                               <entry><methodname>array(...смотрите далее...)</methodname></entry>\r
679                               <entry>\r
680                                   Ассоциативный массив опций, включаемых по\r
681                                   умолчанию:\r
682                                   <itemizedlist>\r
683                                       <listitem>\r
684                                           <para>\r
685                                               (<emphasis>boolean, true</emphasis> по\r
686                                               умолчанию) <emphasis>cache</emphasis>:\r
687                                               если <constant>TRUE</constant>, то\r
688                                               кэширование включено\r
689                                           </para>\r
690                                       </listitem>\r
691                                       <listitem>\r
692                                           <para>\r
693                                               (<emphasis>boolean, false</emphasis> по\r
694                                               умолчанию)\r
695                                               <emphasis>cache_with_get_variables</emphasis>:\r
696                                               если <constant>TRUE</constant>, кэширование\r
697                                               включено, даже если в массиве\r
698                                               <varname>$_GET</varname> есть переменные\r
699                                           </para>\r
700                                       </listitem>\r
701                                       <listitem>\r
702                                           <para>\r
703                                               (<emphasis>boolean, false</emphasis> по\r
704                                               умолчанию)\r
705                                               <emphasis>cache_with_post_variables</emphasis>:\r
706                                               если <constant>TRUE</constant>, кэширование\r
707                                               включено, даже если в массиве\r
708                                               <varname>$_POST</varname> есть переменные\r
709                                           </para>\r
710                                       </listitem>\r
711                                       <listitem>\r
712                                           <para>\r
713                                               (<emphasis>boolean, false</emphasis> по\r
714                                               умолчанию)\r
715                                               <emphasis>cache_with_session_variables</emphasis>:\r
716                                               если <constant>TRUE</constant>, кэширование\r
717                                               включено, даже если в массиве\r
718                                               <varname>$_SESSION</varname> есть\r
719                                               переменные\r
720                                           </para>\r
721                                       </listitem>\r
722                                       <listitem>\r
723                                           <para>\r
724                                               (<emphasis>boolean, false</emphasis> по\r
725                                               умолчанию)\r
726                                               <emphasis>cache_with_files_variables</emphasis>:\r
727                                               если <constant>TRUE</constant>, кэширование\r
728                                               включено, даже если в массиве\r
729                                               <varname>$_FILES</varname> есть переменные\r
730                                           </para>\r
731                                       </listitem>\r
732                                       <listitem>\r
733                                           <para>\r
734                                               (<emphasis>boolean, false</emphasis> по\r
735                                               умолчанию)\r
736                                               <emphasis>cache_with_cookie_variables</emphasis>:\r
737                                               если <constant>TRUE</constant>, кэширование\r
738                                               включено, даже если в массиве\r
739                                               <varname>$_COOKIE</varname> есть\r
740                                               переменные\r
741                                           </para>\r
742                                       </listitem>\r
743                                       <listitem>\r
744                                           <para>\r
745                                               (<emphasis>boolean, true</emphasis> по\r
746                                               умолчанию)\r
747                                               <emphasis>make_id_with_get_variables</emphasis>:\r
748                                               если <constant>TRUE</constant>, то\r
749                                               идентификатор кэша будет зависеть\r
750                                               от содержимого массива\r
751                                               <varname>$_GET</varname>\r
752                                           </para>\r
753                                       </listitem>\r
754                                       <listitem>\r
755                                           <para>\r
756                                               (<emphasis>boolean, true</emphasis> по\r
757                                               умолчанию)\r
758                                               <emphasis>make_id_with_post_variables</emphasis>:\r
759                                               если <constant>TRUE</constant>, то\r
760                                               идентификатор кэша будет зависеть\r
761                                               от содержимого массива\r
762                                               <varname>$_POST</varname>\r
763                                           </para>\r
764                                       </listitem>\r
765                                       <listitem>\r
766                                           <para>\r
767                                               (<emphasis>boolean, true</emphasis> по\r
768                                               умолчанию)\r
769                                               <emphasis>make_id_with_session_variables</emphasis>:\r
770                                               если <constant>TRUE</constant>, то\r
771                                               идентификатор кэша будет зависеть\r
772                                               от содержимого массива\r
773                                               <varname>$_SESSION</varname>\r
774                                           </para>\r
775                                       </listitem>\r
776                                       <listitem>\r
777                                           <para>\r
778                                               (<emphasis>boolean, true</emphasis> по\r
779                                               умолчанию)\r
780                                               <emphasis>make_id_with_files_variables</emphasis>:\r
781                                               если <constant>TRUE</constant>, то\r
782                                               идентификатор кэша будет зависеть от\r
783                                               содержимого массива\r
784                                               <varname>$_FILES</varname>\r
785                                           </para>\r
786                                       </listitem>\r
787                                       <listitem>\r
788                                           <para>\r
789                                               (<emphasis>boolean, true</emphasis> по\r
790                                               умолчанию)\r
791                                               <emphasis>make_id_with_cookie_variables</emphasis>:\r
792                                               если <constant>TRUE</constant>, то\r
793                                               идентификатор кэша будет зависеть от\r
794                                               содержимого массива\r
795                                               <varname>$_COOKIE</varname>\r
796                                           </para>\r
797                                       </listitem>\r
798                                       <listitem>\r
799                                           <para>\r
800                                               (<emphasis>int, false</emphasis> по\r
801                                               умолчанию)\r
802                                               <emphasis>specific_lifetime</emphasis>:\r
803                                               если не <constant>FALSE</constant>,\r
804                                               то значение этой опции,\r
805                                               обозначающей время жизни кэша,\r
806                                               будет использоваться для выбранного\r
807                                               регулярного выражения\r
808                                           </para>\r
809                                       </listitem>\r
810                                       <listitem>\r
811                                           <para>\r
812                                               (<emphasis>array, array()</emphasis> по\r
813                                               умолчанию)\r
814                                               <emphasis>tags</emphasis>:\r
815                                               теги для записи в кэше\r
816                                           </para>\r
817                                       </listitem>\r
818                                       <listitem>\r
819                                           <para>\r
820                                               (<emphasis>int, null</emphasis> по\r
821                                               умолчанию)\r
822                                               <emphasis>priority</emphasis>:\r
823                                               приоритет. Действует только\r
824                                               если выбранный бэкэнд поддерживает\r
825                                               приоритеты.\r
826                                           </para>\r
827                                       </listitem>\r
828                                   </itemizedlist>\r
829                               </entry>\r
830                          </row>\r
831                          <row>\r
832                               <entry><emphasis>regexps</emphasis></entry>\r
833                               <entry><type>Array</type></entry>\r
834                               <entry><methodname>array()</methodname></entry>\r
835                               <entry>\r
836                                   Ассоциативный массив для установки опций\r
837                                   только для некоторых\r
838                                   <acronym>REQUEST_URI</acronym>. Ключами\r
839                                   этого массива являются регулярные выражения\r
840                                   (<acronym>PCRE</acronym>), значениями —\r
841                                   ассоциативные массивы со\r
842                                   специальными опциями, которые устанавливаются,\r
843                                   если <varname>$_SERVER['REQUEST_URI']</varname>\r
844                                   соответствует регулярному выражению\r
845                                   (см. default_options в этом списке доступных\r
846                                   опций). Если <varname>$_SERVER['REQUEST_URI']</varname>\r
847                                   соответствует нескольким регулярным\r
848                                   выражениям, то используется только последнее\r
849                                   из них.\r
850                               </entry>\r
851                          </row>\r
852                          <row>\r
853                               <entry><emphasis>memorize_headers</emphasis></entry>\r
854                               <entry><type>Array</type></entry>\r
855                               <entry><methodname>array()</methodname></entry>\r
856                               <entry>\r
857                                    Массив строк с именами\r
858                                    <acronym>HTTP</acronym>-заголовков.\r
859                                    Перечисленные заголовки будут сохранены в\r
860                                    кэше и будут замещены при попадании в кэш.\r
861                               </entry>\r
862                          </row>\r
863                       </tbody>\r
864                   </tgroup>\r
865               </table>\r
866         </sect3>\r
867         <sect3 id="zend.cache.frontends.page.examples">\r
868             <title>Примеры</title>\r
869             <para>\r
870                 Использование <classname>Zend_Cache_Frontend_Page</classname> довольно\r
871                 простое:\r
872             </para>\r
873             <programlisting language="php"><![CDATA[\r
874 // [...]\r
876 $cache->start();\r
877 // если есть попадание в кэш, то результат отправляется броузеру\r
878 // и выполнение скрипта на этом прекращается\r
880 // остальная часть страницы ...\r
881 ]]></programlisting>\r
882             <para>\r
883                 Более сложный пример, показывающий способ создания\r
884                 централизованного управления кэшированием в загрузочном файле\r
885                 (например, для использования с <classname>Zend_Controller</classname>).\r
886             </para>\r
887             <programlisting language="php"><![CDATA[\r
888 /*\r
889  * Вы должны избегать слишком большого количества строк кода перед этим участком\r
890  * кэша. Например, для наибольшей производительности "require_once" или\r
891  * "Zend_Loader::loadClass" должны находиться после кэшируемого участка\r
892  */\r
894 $frontendOptions = array(\r
895    'lifetime' => 7200,\r
896    'debug_header' => true, // для отладки\r
897    'regexps' => array(\r
898        // кэширование всего IndexController\r
899        '^/$' => array('cache' => true),\r
901        // кэширование всего IndexController\r
902        '^/index/' => array('cache' => true),\r
904        // не кэшируем ArticleController...\r
905        '^/article/' => array('cache' => false),\r
907        // ...но кэшируем действие "view" контроллера ArticleController\r
908        '^/article/view/' => array(\r
909            'cache' => true,\r
911            // кэшируем, даже если есть переменные $_POST\r
912            'cache_with_post_variables' => true,\r
914            // но кэш будет зависеть от массива $_POST\r
915            'make_id_with_post_variables' => true,\r
916        )\r
917    )\r
918 );\r
920 $backendOptions = array(\r
921     'cache_dir' => '/tmp/'\r
922 );\r
924 // получение объекта Zend_Cache_Frontend_Page\r
925 $cache = Zend_Cache::factory('Page',\r
926                              'File',\r
927                              $frontendOptions,\r
928                              $backendOptions);\r
930 $cache->start();\r
931 // если есть попадание в кэш, результат отправляется броузеру,\r
932 // и выполнение скрипта на этом завершается\r
934 // [...] конец загрузочного файла\r
935 // (этот код не исполняется, если есть попадание в кэш)\r
936 ]]></programlisting>\r
937         </sect3>\r
938         <sect3 id="zend.cache.frontends.page.cancel">\r
939             <title>Отмена кэширования</title>\r
940             <para>\r
941                 В некоторых случаях может потребоваться отменить текущий\r
942                 процесс кэширования - например, если используется код\r
943                 возврата, отличный от <acronym>HTTP</acronym> 200. Поэтому\r
944                 мы добавили метод <methodname>cancel()</methodname>:\r
945             </para>\r
946             <programlisting language="php"><![CDATA[\r
947 // [...]\r
949 $cache->start();\r
951 // [...]\r
953 if ($someTest) {\r
954     $cache->cancel();\r
955     // [...]\r
958 // [...]\r
959 ]]></programlisting>\r
960         </sect3>\r
961     </sect2>\r
962 </sect1>\r
963 <!--\r
964 vim:se ts=4 sw=4 et:\r
965 -->\r