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 825 826 827 828 829 830 831 832 833 834
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 22140 -->
<!-- Reviewed: no -->
<sect1 id="zend.cache.backends">
<title>Zend_Cache Backends</title>
<para>
Es gibt zwei Arten von Backends: Standard und erweiterte. Natürlich bieten erweiterte
Backends mehr Features.
</para>
<sect2 id="zend.cache.backends.file">
<title>Zend_Cache_Backend_File</title>
<para>
Dieses (erweiterte) Backend speichert Cache Datensätze in Dateien (in einem gewählten
Verzeichnis).
</para>
<para>
Mögliche Optionen sind :
</para>
<table id="zend.cache.backends.file.table">
<title>File Backend Optionen</title>
<tgroup cols="4">
<thead>
<row>
<entry>Option</entry>
<entry>Daten Typ</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry><emphasis>cache_dir</emphasis></entry>
<entry><type>String</type></entry>
<entry>'<filename>/tmp/</filename>'</entry>
<entry>
Verzeichnis, in dem die Cache Dateien gespeichert werden
</entry>
</row>
<row>
<entry><emphasis>file_locking</emphasis></entry>
<entry><type>Boolean</type></entry>
<entry><constant>TRUE</constant></entry>
<entry>
Ein- oder Ausschalten von file_locking: kann die Beschädigung des
Caches unter schlechten Bedingungen verhindern, aber es hilft nicht bei
Multithreaded Webservern oder bei <acronym>NFS</acronym>
Filesystemen...
</entry>
</row>
<row>
<entry><emphasis>read_control</emphasis></entry>
<entry><type>Boolean</type></entry>
<entry><constant>TRUE</constant></entry>
<entry>
Ein- oder Ausschalten von read_control: eingeschaltet wird ein
Kontrollschlüssel im Cache File inkludiert und dieser Schlüssel wird mit
dem Schlüssel verglichen, der nach dem Lesen berechnet wird.
</entry>
</row>
<row>
<entry><emphasis>read_control_type</emphasis></entry>
<entry><type>String</type></entry>
<entry>'crc32'</entry>
<entry>
Typ der Schreibkontrolle (nur wenn read_control eingeschaltet ist).
Mögliche Werte sind : 'md5' (bestes, aber am Langsamsten), 'crc32'
(etwas weniger sicher, aber schneller, beste Wahl), 'adler32' (neue
Wahl, schneller als crc32), 'strlen' um nur die Länge zu testen
(schnellstes).
</entry>
</row>
<row>
<entry><emphasis>hashed_directory_level</emphasis></entry>
<entry><type>Integer</type></entry>
<entry>0</entry>
<entry>
Level der gehashten Verzeichnis Struktur: 0 heißt "keine gehashte
Verzeichnis Strutur, 1 heißt "ein Level von Verzeichnissen", 2 heißt
"zwei Levels"... Diese Option kann den Cache nur dann schneller machen,
wenn viele Tausende Cache Dateien verwendet werden. Nur spezielle
Messungen können helfen, den perfekten Wert zu finden. Möglicherweise
ist 1 oder 2 ein guter Anfang.
</entry>
</row>
<row>
<entry><emphasis>hashed_directory_umask</emphasis></entry>
<entry><type>Integer</type></entry>
<entry>0700</entry>
<entry>Umask für die gehashte Verzeichnis Struktur</entry>
</row>
<row>
<entry><emphasis>file_name_prefix</emphasis></entry>
<entry><type>String</type></entry>
<entry>'zend_cache'</entry>
<entry>
Präfix für Cache Dateien; man muss mit dieser Option sehr vorsichtig
umgehen, weil ein zu generischer Wert in einem System Cache
Verzeichnis (wie <filename>/tmp</filename>) kann beim Löschen des
Caches zu großen Problemen führen.
</entry>
</row>
<row>
<entry><emphasis>cache_file_umask</emphasis></entry>
<entry><type>Integer</type></entry>
<entry>0700</entry>
<entry>umask nach Cache Dateien</entry>
</row>
<row>
<entry><emphasis>metatadatas_array_max_size</emphasis></entry>
<entry><type>Integer</type></entry>
<entry>100</entry>
<entry>
Interne maximale Größe für das Metadaten Array (dieser Wert sollte
nicht geändert werden außer man weiß was man macht)
</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2 id="zend.cache.backends.sqlite">
<title>Zend_Cache_Backend_Sqlite</title>
<para>
Dieses (erweiterte) Backend speichert die Cache Datensätze in einer SQLite Datenbank.
</para>
<para>
Mögliche Optionen sind :
</para>
<table id="zend.cache.backends.sqlite.table">
<title>Sqlite Backend Optionen</title>
<tgroup cols="4">
<thead>
<row>
<entry>Option</entry>
<entry>Daten Typ</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry><emphasis>cache_db_complete_path (mandatory)</emphasis></entry>
<entry><type>String</type></entry>
<entry><constant>NULL</constant></entry>
<entry>Der komplette Pfad (inklusive Dateiname) der SQLite Datenbank</entry>
</row>
<row>
<entry><emphasis>automatic_vacuum_factor</emphasis></entry>
<entry><type>Integer</type></entry>
<entry>10</entry>
<entry>
Deaktiviert oder stellt den automatischen Vakuumprozess ein.
Der automatische Vakuumprozess defragmentiert die Datenbankdatei (und
verkleinert sie) wenn <methodname>clean()</methodname> oder
<methodname>delete()</methodname> aufgerufen wird: 0 bedeutet kein
automatisches Vakuum; 1 bedeutet systematisches Vakuum (wenn die
<methodname>delete()</methodname> or <methodname>clean()</methodname>
Methoden aufgerufen werden; x (integer) > 1 => automatisches Vakuum
zufällig einmal pro x <methodname>clean()</methodname> oder
<methodname>delete()</methodname> Aufrufe.
</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2 id="zend.cache.backends.memcached">
<title>Zend_Cache_Backend_Memcached</title>
<para>
Dieses (erweiterte) Backend speichert Cache Datensätze in einem Memcached Server. <ulink
url="http://www.danga.com/memcached/">memcached</ulink> ist ein hoch-performantes,
verteiltes Speicher Objekt Caching System. Um dieses Backend zu benutzen, wird ein
Memcached Dämon benötigt und <ulink url="http://pecl.php.net/package/memcache">die
Memcached <acronym>PECL</acronym> Erweiterung</ulink>.
</para>
<para>
Vorsicht: mit diesem Backend werden zur Zeit "Marker" nicht unterstützt genauso wie das
"doNotTestCacheValidity=true" Argument.
</para>
<para>
Mögliche Optionen sind :
</para>
<table id="zend.cache.backends.memcached.table">
<title>Memcached Backend Optionen</title>
<tgroup cols="4">
<thead>
<row>
<entry>Option</entry>
<entry>Daten Typ</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry><emphasis>servers</emphasis></entry>
<entry><type>Array</type></entry>
<entry>
<command>array(array('host' => 'localhost','port' => 11211,
'persistent' => true, 'weight' => 1, 'timeout' => 5,
'retry_interval' => 15, 'status' => true,
'failure_callback' => '' ))</command>
</entry>
<entry>
Ein Array von Memcached Servern; jeder Memcached Server wird durch ein
assoziatives Array beschrieben : 'host' => (string) : Der Name des
Memcached Servers, 'port' => (int) : Der Port des Memcached Servers,
'persistent' => (bool) : Persistente Verbindungen für diesen Memcached
Server verwenden oder nicht 'weight' => (int) : Das Gewicht des
Memcached Servers, 'timeout' => (int) : Das Timeout des Memcached
Servers, 'retry_interval' => (int) : Das Wiederholungsintervall des
Memcached Servers, 'status' => (bool) : Der Status des Memcached
Servers, 'failure_callback' => (callback) : Der failure_callback des
Memcached Servers
</entry>
</row>
<row>
<entry><emphasis>compression</emphasis></entry>
<entry><type>Boolean</type></entry>
<entry><constant>FALSE</constant></entry>
<entry>
<constant>TRUE</constant> wenn on-the-fly Kompression verwendet werden
soll
</entry>
</row>
<row>
<entry><emphasis>compatibility</emphasis></entry>
<entry><type>Boolean</type></entry>
<entry><constant>FALSE</constant></entry>
<entry>
<constant>TRUE</constant> wenn man den Compatibility Modus mit alten
Memcache Servern oder Erweiterungen verwenden will
</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2 id="zend.cache.backends.apc">
<title>Zend_Cache_Backend_Apc</title>
<para>
Dieses (erweiterte) Backend speichert Cache Datensätze im Shared Memory durch die
<ulink url="http://pecl.php.net/package/APC">APC</ulink> (Alternativer
<acronym>PHP</acronym> Cache) Erweiterung (welche natürlich für die Verwendung dieses
Backends benötigt wird).
</para>
<para>
Vorsicht: mit diesem Backend werden "Marker" zur Zeit nicht unterstützt genauso wie das
"doNotTestCacheValidity=true" Argument.
</para>
<para>
Es gibt keine Optionen für dieses Backend.
</para>
</sect2>
<sect2 id="zend.cache.backends.xcache">
<title>Zend_Cache_Backend_Xcache</title>
<para>
Dieses Backend speichert Cache Einträge im Shared Memory durch die
<ulink url="http://xcache.lighttpd.net/">XCache</ulink> Erweiterung (welche natürlich
benötigt wird, damit dieses Backend verwendet werden kann).
</para>
<para>
Achtung: Bei diesem Backend werden "tags" aktuell nicht unterstützt sowie das
"doNotTestCacheValidity=true" Argument.
</para>
<para>
Mögliche Optionen sind:
</para>
<table id="zend.cache.backends.xcache.table">
<title>Xcache backend options</title>
<tgroup cols="4">
<thead>
<row>
<entry>Option</entry>
<entry>Daten Typ</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry><emphasis>user</emphasis></entry>
<entry><type>String</type></entry>
<entry><constant>NULL</constant></entry>
<entry>
<filename>xcache.admin.user</filename>, notwendig für die
<methodname>clean()</methodname> Methode
</entry>
</row>
<row>
<entry><emphasis>password</emphasis></entry>
<entry><type>String</type></entry>
<entry><constant>NULL</constant></entry>
<entry>
<filename>xcache.admin.pass</filename> (in offener Form, nicht
<acronym>MD5</acronym>), notwendig für die
<methodname>clean()</methodname> Methode
</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2 id="zend.cache.backends.platform">
<title>Zend_Cache_Backend_ZendPlatform</title>
<para>
Dieses Backend verwendet die Content Caching <acronym>API</acronym> des
<ulink url="http://www.zend.com/en/products/platform">Zend Platform</ulink> Produktes.
Natürlich muss man die Zend Platform installiert haben, um dieses Backend verwenden zu
können.
</para>
<para>
Dieses Backend unterstützt Tags, aber nicht den
<constant>CLEANING_MODE_NOT_MATCHING_TAG</constant> Löschmodus.
</para>
<para>
Bei Definition dieses Backends muß ein Trennzeichen -- '-', '.', ' ', oder '_'
-- zwischen den Wörtern 'Zend' und 'Platform' definiert sein wenn die
<methodname>Zend_Cache::factory()</methodname> Methode verwendet wird:
</para>
<programlisting language="php"><![CDATA[
$cache = Zend_Cache::factory('Core', 'Zend Platform');
]]></programlisting>
<para>
Es gibt keine Optionen für dieses Backend.
</para>
</sect2>
<sect2 id="zend.cache.backends.twolevels">
<title>Zend_Cache_Backend_TwoLevels</title>
<para>
Dieses (erweiterte) Backend ist ein Hybrides. Es speichert Cache Einträge in zwei
anderen Backends: Ein schnelles (aber limitiertes) wie Apc, Memcache... und ein
"langsames" wie File, Sqlite...
</para>
<para>
Dieses Backend verwendet den Priority Parameter (der auf Frontend Level angegeben wird
wenn ein Eintrag gespeichert wird) und den verbleibenden Platz im schnellen Backend um
die Verwendung dieser zwei Backends zu optimieren.
</para>
<para>
Dieses Backend sollte mit Verwendung eines Word Separators -- '-', '.', ' ', oder '_' --
zwischen den Wörtern 'Two' und 'Levels' spezifiziert werden wenn die
<methodname>Zend_Cache::factory()</methodname> Methode verwendet wird:
</para>
<programlisting language="php"><![CDATA[
$cache = Zend_Cache::factory('Core', 'Two Levels');
]]></programlisting>
<para>
Vorhandene Optionen sind:
</para>
<table id="zend.cache.backends.twolevels.table">
<title>TwoLevels Backend Optionen</title>
<tgroup cols="4">
<thead>
<row>
<entry>Option</entry>
<entry>Datentyp</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry><emphasis>slow_backend</emphasis></entry>
<entry><type>String</type></entry>
<entry>File</entry>
<entry>Der "langsame" Backendname</entry>
</row>
<row>
<entry><emphasis>fast_backend</emphasis></entry>
<entry><type>String</type></entry>
<entry>Apc</entry>
<entry>Der "schnelle" Backendname</entry>
</row>
<row>
<entry><emphasis>slow_backend_options</emphasis></entry>
<entry><type>Array</type></entry>
<entry><methodname>array()</methodname></entry>
<entry>Die "langsamen" Backendoptionen</entry>
</row>
<row>
<entry><emphasis>fast_backend_options</emphasis></entry>
<entry><type>Array</type></entry>
<entry><methodname>array()</methodname></entry>
<entry>Die "schnellen" Backendoptionen</entry>
</row>
<row>
<entry><emphasis>slow_backend_custom_naming</emphasis></entry>
<entry><type>Boolean</type></entry>
<entry><constant>FALSE</constant></entry>
<entry>
Wenn <constant>TRUE</constant>, wird das slow_backend Argument als
kompletter Klassenname verwendet; wenn <constant>FALSE</constant>,
wird das frontend Argument als Ende des
"<classname>Zend_Cache_Backend_</classname>[...]" Klassennamens
verwendet
</entry>
</row>
<row>
<entry><emphasis>fast_backend_custom_naming</emphasis></entry>
<entry><type>Boolean</type></entry>
<entry><constant>FALSE</constant></entry>
<entry>
Wenn <constant>TRUE</constant>, wird das fast_backend Argument als
kompletter Klassenname verwendet; wenn <constant>FALSE</constant>,
wird das frontend Argument als Ende des
"<classname>Zend_Cache_Backend_</classname>[...]" Klassennamens
verwendet
</entry>
</row>
<row>
<entry><emphasis>slow_backend_autoload</emphasis></entry>
<entry><type>Boolean</type></entry>
<entry><constant>FALSE</constant></entry>
<entry>
Wenn <constant>TRUE</constant>, wird kein require_once für das
langsame Backend verwendet (nur für eigene Backends nützlich)
</entry>
</row>
<row>
<entry><emphasis>fast_backend_autoload</emphasis></entry>
<entry><type>Boolean</type></entry>
<entry><constant>FALSE</constant></entry>
<entry>
Wenn <constant>TRUE</constant>, wird kein require_once für das
schnelle Backend verwendet (nur für eigene Backends nützlich)
</entry>
</row>
<row>
<entry><emphasis>auto_refresh_fast_cache</emphasis></entry>
<entry><type>Boolean</type></entry>
<entry><constant>TRUE</constant></entry>
<entry>
Wenn <constant>TRUE</constant>, wird der schnelle Cache automatisch
refresht wenn ein Cache Eintrag getroffen wird
</entry>
</row>
<row>
<entry><emphasis>stats_update_factor</emphasis></entry>
<entry><type>Integer</type></entry>
<entry>10</entry>
<entry>
Ausschalten / Feintunen der Berechnung des Füll-Prozentsatzes des
schnellen Backends (wenn ein Eintrag in den Cache gespeichert wird,
die Berechnung des Füll-Prozentsatzes des schnellen Backends zufällig
1 mal bei x Cache Schreibvorgängen)
</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2 id="zend.cache.backends.zendserver">
<title>Zend_Cache_Backend_ZendServer_Disk und Zend_Cache_Backend_ZendServer_ShMem</title>
<para>
Diese Backends speichern Cacheeinträge indem Sie die Caching Funktionalitäten von <ulink
url="http://www.zend.com/en/products/server/downloads-all?zfs=zf_download">Zend
Server</ulink> verwenden.
</para>
<para>
Achtung: mit diesen Backends werden für den Moment "Tags" nicht unterstützt, wegen dem
"doNotTestCacheValidity=true" Argument.
</para>
<para>
Diese Backends arbeiten nur in einer Zend Server Umgebung für Seiten die über
<acronym>HTTP</acronym> oder <acronym>HTTPS</acronym> angefragt wurden und nicht für
Kommandozeilen Ausführung.
</para>
<para>
Dieses Backend muß durch Verwendung des <emphasis>customBackendNaming</emphasis>
Parameter mit <constant>TRUE</constant> spezifiziert werden wenn die Methode
<methodname>Zend_Cache::factory()</methodname> verwendet wird:
</para>
<programlisting language="php"><![CDATA[
$cache = Zend_Cache::factory('Core', 'Zend_Cache_Backend_ZendServer_Disk',
$frontendOptions, $backendOptions, false, true);
]]></programlisting>
<para>
Es gibt keine Optionen für diese Backends.
</para>
</sect2>
<sect2 id="zend.cache.backends.static">
<title>Zend_Cache_Backend_Static</title>
<para>
Dieses Backend arbeitet in Verbindung mit
<classname>Zend_Cache_Frontend_Capture</classname> (diese zwei müssen zusammen verwendet
werden) um die Ausgabe von Anfragen als statische Dateien zu speichern. Dies bedeutet
das die statischen Dateien bei weiteren Anfragen direkt serviert werden ohne dass
<acronym>PHP</acronym> oder sogar Zend Framework involviert sind.
</para>
<note>
<para>
<classname>Zend_Cache_Frontend_Capture</classname> arbeitet indem es eine Callback
Funktion registriert welche aufgerufen wird wenn der Ausgabebuffer den es verwendet
gelöscht wird. Damit das richtig funktioniert muss er der letzte Ausgabebuffer in
der Anfrage sein. Um dies zu garantieren <emphasis>muss</emphasis> der Ausgabebuffer
welcher vom Dispacher verwendet wird ausgeschaltet sein indem
<classname>Zend_Controller_Front</classname>'s Methode
<methodname>setParam()</methodname> verwendet wird, zum Beispiel
<command>$front->setParam('disableOutputBuffering', true);</command> oder indem
"resources.frontcontroller.params.disableOutputBuffering = true" in der Bootstrap
Konfigurationsdatei (wir nehmen <acronym>INI</acronym> an) wenn
<classname>Zend_Application</classname> verwendet wird.
</para>
</note>
<para>
Der Vorteil dieses Caches besteht darin das eine starke Verbesserung des Durchsatzes
stattfindet weil statische Dateien zurückgegeben werden und keine weitere dynamische
Bearbeitung stattfindet. Natürlich gibt es auch einige Nachteile. Der einzige Weg um
dynamische Anfragen wieder zu haben besteht darin die gecachten Dateien von anderswo
in der Anwendung zu löschen (oder über einen Cronjob wenn das zeitlich abgestimmt werden
soll). Es ist auch auf Single-Server Anwendungen begrenzt begrenzt bei denen nur ein
Dateisystem verwendet wird. Trotzdem kann es eine große Bedeutung haben wenn man mehr
Geschwindigkeit haben will ohne auf Kosten eines Proxies auf einzelnen Maschinen zu
setzen.
</para>
<para>
Bevor die Optionen beschrieben werden sollte man beachten das dies einige Änderungen der
Standardwerte in der <filename>.htaccess</filename> Datei benötigt damit Anfrage auf die
staischen Dateien zeigen wenn diese existieren. Hier ist ein Beispiel einer einfachen
Anwendung die etwas Inhalt cacht, inklusive zwei spezifischer Feeds welche zusätzliche
Behandlung benötigen um einen korrekten Content-Type Header zu schicken:
</para>
<programlisting language="text"><![CDATA[
AddType application/rss+xml .xml
AddType application/atom+xml .xml
RewriteEngine On
RewriteCond %{REQUEST_URI} feed/rss$
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}.xml -f
RewriteRule .* cached/%{REQUEST_URI}.xml [L,T=application/rss+xml]
RewriteCond %{REQUEST_URI} feed/atom$
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}.xml -f
RewriteRule .* cached/%{REQUEST_URI}.xml [L,T=application/atom+xml]
RewriteCond %{DOCUMENT_ROOT}/cached/index.html -f
RewriteRule ^/*$ cached/index.html [L]
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}.(html|xml|json|opml|svg) -f
RewriteRule .* cached/%{REQUEST_URI}.%1 [L]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
]]></programlisting>
<para>
Das obenstehende nimmt an das statische Dateien im Verzeichnis
<filename>./public/cached</filename> gecacht werden. Wir betrachten die Einstellung
dieses Ortes unter "public_dir" weiter unten.
</para>
<para>
Durch die Natur des Cachens von statischen Dateien bietet die Backend Klasse zwei
zusätzliche Methoden an: <methodname>remove()</methodname> und
<methodname>removeRecursively()</methodname>. Beide akzeptieren eine Anfrage
<acronym>URI</acronym> welche, wenn Sie mit dem "public_dir" in dem statische Dateien
gecacht werden verknüpft wird, und eine vor-gespeicherte Erweiterung angehängt wird,
entweder den Namen einer statischen Datei anbietet welche zu löschen ist, oder einen
Verzeichnispfad welcher rekursiv zu löschen ist. Durch die Einschränkung von
<classname>Zend_Cache_Backend_Interface</classname> akzeptieren alle anderen Methoden
wie <methodname>save()</methodname> eine ID welche durch Anwendung von
<methodname>bin2hex()</methodname> auf eine Anfrage <acronym>URI</acronym> berechnet
wird.
</para>
<para>
Durch das Level an dem das statische Cachen arbeitet ist das statische Dateicaching
auf eine einfachere Verwendung mit
<classname>Zend_Controller_Action_Helper_Cache</classname> ausgelegt. Dieser Helfer
assistiert beim Einstellen welche Aktionen eines Controllers zu cachen sind, mit welchen
Tags, und mit welcher Erweiterung. Er bietet auch Methoden für das Entleeren des Caches
durch die Anfrage <acronym>URI</acronym> oder Tag. Statischen Dateicaching wird auch
durch <classname>Zend_Cache_Manager</classname> unterstützt welcher vorkonfigurierte
Konfigurationstemplates für den statischen Cache enthält (als
<constant>Zend_Cache_Manager::PAGECACHE</constant> oder "page"). Die Standardwerte
können hierbei wie benötigt konfiguriert werden um einen "public_dir" Ort für das Cachen
zu setzen, usw.
</para>
<note>
<para>
Es sollte beachtet werden dass der statische Cache aktuell einen zweiten Cache
verwendet um Tags zu speichern (offensichtlich können wir Sie nicht anderswo
speichern da bei einem statischen Cache <acronym>PHP</acronym> nicht aufgerufen wird
wenn er richtig arbeitet). Das ist nur ein standardmäßiger Core Cache, und er sollte
ein persistentes Backend wie File oder TwoLevels verwenden (um die Vorteile des
Memory Speichers zu verwenden ohne die permanente Persistenz zu opfern). Das
Backend enthält die Option "tag_cache" um es zu konfigurieren (das ist
obligatorisch), oder die Methode <methodname>setInnerCache()</methodname>.
</para>
</note>
<table id="zend.cache.backends.static.table">
<title>Statische Backend Optionen</title>
<tgroup cols="4">
<thead>
<row>
<entry>Option</entry>
<entry>Datentyp</entry>
<entry>Standardwert</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry><emphasis>public_dir</emphasis></entry>
<entry><type>String</type></entry>
<entry><constant>NULL</constant></entry>
<entry>
Verzeichnis in dem statische Dateien zu speichern sind. Es muß im
öffentlichen Verzeichnis existieren.
</entry>
</row>
<row>
<entry><emphasis>file_locking</emphasis></entry>
<entry><type>Boolean</type></entry>
<entry><constant>TRUE</constant></entry>
<entry>
file_locking aktivieren oder deaktivieren: Kann die Korruption des
Caches unter schlechten Umständen verhindern hilft aber nicht bei
Multithreaded Webservern oder bei <acronym>NFS</acronym> Dateisystemen.
</entry>
</row>
<row>
<entry><emphasis>read_control</emphasis></entry>
<entry><type>Boolean</type></entry>
<entry><constant>TRUE</constant></entry>
<entry>
Lesekontrolle aktivieren oder deaktivieren: Aktiviert wird ein
Kontrollschlüssel in die Cachedatei eingebettet und dieser Schlüssel
wird mit dem verglichen der nach dem Lesen berechnet wird.
</entry>
</row>
<row>
<entry><emphasis>read_control_type</emphasis></entry>
<entry><type>String</type></entry>
<entry>'crc32'</entry>
<entry>
Typ der Lesekontrolle (nur wenn die Lesekontrolle aktiviert ist).
Mögliche Werte sind: 'md5' (am besten aber langsam), 'crc32' (etwas
weniger sicher aber schneller, bessere Wahl), 'adler32' (neue Wahl,
schneller als cec32), 'strlen' für einen reinen Längentest (am
schnellsten).
</entry>
</row>
<row>
<entry><emphasis>cache_file_umask</emphasis></entry>
<entry><type>Integer</type></entry>
<entry>0700</entry>
<entry>Umask für gecachte Dateien.</entry>
</row>
<row>
<entry><emphasis>cache_directory_umask</emphasis></entry>
<entry><type>Integer</type></entry>
<entry>0700</entry>
<entry>Umask für Verzeichnisse welche im public_dir erstellt wurden.</entry>
</row>
<row>
<entry><emphasis>file_extension</emphasis></entry>
<entry><type>String</type></entry>
<entry>'<filename>.html</filename>'</entry>
<entry>
Standardmäßige Dateierweiterung für erstellt statische Dateien. Diese
kann im Fluge konfiguriert werden, siehe
<methodname>Zend_Cache_Backend_Static::save()</methodname> obwohl
generell empfohlen wird sich auf
<classname>Zend_Controller_Action_Helper_Cache</classname> zu verlassen
wenn man das macht, weil es ein einfacherer Weg ist als mit Arrays oder
der manuellen Serialisierung herumzuspielen.
</entry>
</row>
<row>
<entry><emphasis>index_filename</emphasis></entry>
<entry><type>String</type></entry>
<entry>'index'</entry>
<entry>
Wenn eine Anfrage <acronym>URI</acronym> nicht genügend Informationen
enthält um eine statische Datei zu erstellen (normalerweise bedeutet
dies einen Indexaufruf, z.B. die <acronym>URI</acronym> von '/'), dann
wir stattdessen index_filename verwendet. Deshalb würden '' oder '/' auf
'<filename>index.html</filename>' verweisen (in der Annahme das die
standardmäßige file_extension '<filename>.html</filename>' ist).
</entry>
</row>
<row>
<entry><emphasis>tag_cache</emphasis></entry>
<entry><type>Object</type></entry>
<entry><constant>NULL</constant></entry>
<entry>
Wird verwendet um einen 'inner' Cache zu Setzen der verwendet wird um
Tags zu speichern und Dateierweiterungen mit statischen Dateien zu
verknüpfen. Das <emphasis>muss</emphasis> gesetzt sein, oder der
statische Cache kann nicht verfolgt und gemanagt werden.
</entry>
</row>
<row>
<entry><emphasis>disable_caching</emphasis></entry>
<entry><type>Boolean</type></entry>
<entry><constant>FALSE</constant></entry>
<entry>
Wenn es auf <constant>TRUE</constant> gesetzt wird, werden statische
Dateien nicht gecacht. Das zwingt alle Anfragen dynamisch zu sein,
selbst wenn diese markiert und in den Controller gecacht sind. Dies ist
für das Debuggen nützlich.
</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
</sect1>
|