Zend_Cache_Core est un frontend sp�cial parce qu'il est le coeur du module.
C'est un frontend de cache g�n�rique et est �tendu par les autres classes.
![]() |
Note |
|---|---|
Tous les frontends h�ritent de |
Ces options sont pass�es � la m�thode de fabrique comme montr�es dans les exemples pr�c�dents.
Tableau 4.1. Otions disponibles
| Option | Type de donn�es | Valeur par d�faut | Description |
|---|---|---|---|
caching |
bool�en |
true |
active / d�sactive le caching (peut-�tre tr�s utile pour les d�bogage de scripts en cache) |
lifeTime |
int |
3600 |
temps de vie (en secondes) du cache, si d�fini � null, le
cache est valide infiniment
|
logging |
bool�en |
false |
si d�finit � true, le logging par Zend_Log est activ�
(mais le syst�me sera plus lent)
|
writeControl |
bool�en |
true |
Active / d�sactive le contr�le d'�criture (le cache est lu juste apr�s l'�criture pour d�tecter des entr�es corrompues), activer writeControl va un tout petit peu ralentire l'�criture du cache, mais pas la lecture (il peut d�tecter des fichiers de cache corrompus, mais �a n'est pas un contr�le parfait). |
automaticSerialization |
bool�en |
false |
Active / d�sactive la s�rialization automatique, il peut �tre utilis� pour enregistrer directement des donn�es qui ne sont pas des cha�nes de caract�res (mais c'est plus lent). |
automaticCleaningFactor |
int |
0 |
Active / d�sactive le nettoyage automatique( garbage collector): 0 signifie aucun nettoyage automatique de cache, 1 signifie un nettoyage syst�matique du cache et x > 1 signifie le nettoyage al�atoire 1 fois toute les x �critures. |
Un exemple est donn� dans le manuel, tout au d�but.
Si vous stocker uniquement des cha�nes de caract�res dans le cache (parce qu'avec l'option "automaticSerialization", il est possible de stocker des bool�ns), vous pouvez utiliser une construction plus compact comme:
<?php
// nous avons d�j� $cache
$id = 'myBigLoop'; // id de cache de "ce que l'on veut cacher"
if (!($data = $cache->get($id))) {
// cache miss
$data = '';
for ($i = 0; $i < 10000; $i++) {
$data = $data . $i;
}
$cache->save($data);
}
// fait quelque chose avec $data (affichage, passage ailleurs, etc, etc)
?>
Si vous voulez cacher des blocs multiples ou des instances de donn�es, l'id�e reste la m�me:
<?php
// on s'assure que l'on utilise des identifiant uniques
$id1 = 'foo';
$id2 = 'bar';
// block 1
if (!($data = $cache->get($id1))) {
// cache missed
$data = '';
for ($i=0;$i<10000;$i++) {
$data = $data . $i;
}
$cache->save($data);
}
echo($data);
// �a n'est pas affect� par la mise en cache
echo('NEVER CACHED! ');
// block 2
if (!($data = $cache->get($id2))) {
// cache missed
$data = '';
for ($i=0;$i<10000;$i++) {
$data = $data . '!';
}
$cache->save($data);
}
echo($data);
?>
Zend_Cache_Frontend_Output est un frontend capturant la sortie.
Il utilise la bufferisation de sortie de PHP pour capturer tout ce qui passe entre les m�thodes
start() et end() .
Ce frontend n'a pas d'options sp�cifiques autres que celles de Zend_Cache_Core.
Un exemple est donn�e dans le manuel, tout au d�but. Le voici avec des changements mineurs:
<?php
// s'il y a un cache miss, la bufferisation de sortie est lanc�e
if(!$cache->start('mypage')):
// affiche tout comme d'habitude
echo 'Hello world! ';
echo 'This is cached ('.time().') ';
$cache->end(); // output buffering ends
endif;
echo 'This is never cached ('.time().').';
?>
Utiliser cette forme est assez simple pour d�finir une mise de cache de sortie dans vos projets en production, avec peu de refactorisation de code.
Zend_Cache_Frontend_Function met en cache les r�sultats des appels de fonction.
Elle a une seule m�thode principale appel�e call() qui prend un nom de fonction
et des param�tres pour l'appel dans un tableau.
Tableau 4.2. Options disponibles
| Option | Type de donn�es | Valeur par d�faut | Description |
|---|---|---|---|
cacheByDefault |
bool�en |
true |
si true, les appels de fonction seront mis en cache par d�faut |
cachedFunctions |
array |
les noms de fonctions seront toujours mis en cache | |
nonCachedFunctions |
array |
les noms de fonctions ne doivent jamais �tre mis en cache |
Utiliser la fonction call() est le m�me qu'utiliser le
code call_user_func_array() en PHP:
<?php
$cache->call('veryExpensiveFunc', $params);
# $params est dans un tableau
# par exemple, pour appeler (avec mise en cache) veryExpensiveFunc(1, 'foo', 'bar'), vous devriez utiliser
# $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar'))
?>
Zend_Cache_Frontend_Function est assez intelligente pour mettre en cache
la valeur de retour de la fonction, aisi que sa sortie interne.
![]() |
Note |
|---|---|
Vous pouvez passer n'importe quelle fonction utilisateur � l'exception de
|
Zend_Cache_Frontend_Class est diff�rent de Zend_Cache_Frontend_Function
parce qu'elle permet de mettre en cache les objets et les m�thodes statiques.
Tableau 4.3. Options disponibles
| Option | Type de donn�es | Valeur par d�faut | Description |
|---|---|---|---|
cachedEntity (required) |
mixed |
si d�finit � un nom de classe, nous allons mettre en cache une claisse abstraite et utiliser uniquement les appels statiques; si d�finis � un objet, nous allons mettre en cache les m�thodes de ces objets. | |
cacheByDefault |
bool�en |
true |
si true, les appels vont �tre cach� par d�fault |
cachedMethods |
array |
les noms des m�thodes qui seront toujours mis en cache | |
nonCachedMethods |
array |
les nomes des m�thodes qui ne doivent jamais �tre misent en cache |
Par exemple, pour mettre en cache des appels statiques:
<?php
class test {
# M�thode statique
public static function foobar($param1, $param2) {
echo "foobar_output($param1, $param2)";
return "foobar_return($param1, $param2)";
}
}
// [...]
$frontendOptions = array(
'cachedEntity' => 'test' // Le nom de la classe
);
// [...]
# l'appel cach�
$res = $cache->foobar('1', '2');
?>
Pour mettre en cache des appels classiques aux m�thodes:
<?php
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(
'cachedEntity' => new test() // Une instance de la classe
);
// [...]
# L'appel mis en cache
$res = $cache->foobar2('1', '2');
?>
Zend_Cache_Frontend_File est un frontend conduit par la modification
d'un "fichier ma�tre". C'est vraiment int�ressant, par exemple, dans les probl�matiques
de configuration ou de templates.
Pour l'instant, vous avez un fichier de configuration XML qui est pars� par une
fonction qui retourne un "objet config" (comme avec Zend_Config).
Avec Zend_Cache_Frontend_File, vous pouvez stocker l'objet config dans le cache
(pour �viter de parser le XML du fichier de config chaque fois) mais avec une sorte de
forte d�pendance au fichier ma�tre. Ainsi si le fichier XML de config est modifi�, le cache
est imm�diatement invalid�.
Zend_Cache_Frontend_Page est comme Zend_Cache_Frontend_Output
mais cr�� pour une page complete. Il est impossible d'utiliser Zend_Cache_Frontend_Page
pour mettre en cacher un bloc unique.
D'un autre c�t�, la "cache id", est calcul� automatiquement avec $_SERVER['REQUEST_URI'] et
(en fonction des options) $_GET, $_POST, $_SESSION,
$_COOKIE, $_FILES.
De plus, vous avez seulement une m�thode pour appeler (start())
parce que l'appel � end() est totalement automatique lorsque la page est termin�.
Pour le moment, �a n'est pas impl�ment� mais nous pr�voyons d'ajouter un syst�me de condition HTTP pour �conomiser de la bande passant. (le syst�me enverra une ent�te HTTP 304 Not Modified si le cache est trouv�, et si le navigateur a d�j� la bonne version).
![]() |
Note |
|---|---|
Zend_Cache_Frontend_Page est vraiment en version alpha, et est pr�vue d'�tre am�lior� plus tard. |
Tableau 4.5. Options disponibles
| Option | Type de donn�es | Valeur par d�faut | Description |
|---|---|---|---|
httpConditional |
bool�en |
false |
utilisez le syst�me httpConditionnal ou pas (pas encore impl�ment�) |
debugHeader |
bool�en |
false |
si true, un text de d�bogage est ajout� avant chaque page de cache |
defaultOptions |
array |
array(...see below...) |
un tableau associatif d'options par d�faut:
|
regexps |
array |
array() |
un tableau associatif pour d�finir les options, uniquement pour des REQUEST_URI, les cl�s sont des regex PCRE, les valeurs sont des tableaus associatifs avec des options sp�cifiques pour d�finir si les correspondances des regexs dans $_SERVER['REQUEST_URI'] (voir les options par d�faut pour la liste des options disponibles) ; si plusieurs regexs correspondent � un $_SERVER['REQUEST_URI'], seul la derni�re sera utilis�e. |
Utilisation de Zend_Cache_Frontend_Page est vraiment trivial :
<?php // [...] // require, configuration et factory $cache->start(); // si le cache est trouv�, le r�sultat est envoy� au navigateur et le script s'arr�te l� // reste de la page ... ?>
un exemple plus complexe qui montre un moyen pour obtenir une gestion centralis�e du cache dans un fichier d'amor�age (pour utiliser avec Zend_Controller par exemple)
<?php
// vous devriez �viter de mettre trop de lignes avant la section de cache
// [...] par exemple, pour des performances optimales, "require_once" ou "Zend::loadClass" devrait �tre
// [...] apr�s la section de cache
require_once 'Zend/Cache.php';
$frontendOptions = array(
'lifeTime' => 7200,
'debugHeader' => true, // for debuging
'regexps' => array(
'^/$' => array('cache' => true), // met en cache la totalit� d'IndexController
'^/index/' => array('cache' => true), // met en cache la totalit� d'IndexController
'^/article/' => array('cache' => false), // nous ne mettons pas en cache l'ArticleController...
'^/article/view/' => array( // ...mais nous mettons en cache l'action "view"
'cache' => true, // de cet ArticleController
'cacheWithPostVariables' => true, // et nous mettons en cache m�me lorsqu'il y a des variables dans $_POST
'makeIdWithPostVariables' => true, // (mais le cache sera d�pendent du tableau $_POST)
)
)
);
$backendOptions = array(
'cacheDir' => '/tmp/'
);
// obtenir un objet Zend_Cache_Frontend_Page
$cache = Zend_Cache::factory('Page', 'File', $frontendOptions, $backendOptions);
$cache->start();
// si nous trouvons un cache, le r�sultat est envoy� au navigateur, et le script s'arr�te l�
// [...] la fin du fichier de d�marrage ( ces lignes ne seront pas ex�cut�e si on trouve un cache)
?>