Cache opcode APC
Par Christophe de saint leger le mercredi, octobre 29 2008, 09:21 - Linux - Lien permanent
APC ( Alternative PHP Cache )
APC est un systéme de cache opcode , permet entre autre , de ne pas refaire la boucle complète langage php => langage machine ect ... Ce systéme de de cache ,n'est pas encore disponible en natif dans php5 , mais devrait l'être pour php6 ...
Cependant , il est disponible , via pear ... alors pourquoi s'en priver ... Nous allons voir comment l'installer , puis l'utiliser simplement ...
Installation :
Nous partons du principe ou utilisez les paquets de votre distribution pour apache2 et php5.
Prérequis:
Il vous faut absoluement cette liste de paquets (Note , je suis ici sous débian lenny )
apt-get install apache2 libapache2-mod-php5 php-pear php5-dev make apache2-prefork-dev
Enfin , installer le module pecl :
pecl install apc
A la question :
1. Use apxs to set compile flags (if using APC with Apache)? : yes 1-1, 'all', 'abort', or Enter to continue:
Taper Enter ..
A la fin de l'installation , vous devez avoir ces quelques lignes :
Build process completed successfully Installing '/usr/lib/php5/20060613+lfs/apc.so' install ok: channel://pecl.php.net/APC-3.0.19 configuration option "php_ini" is not set to php.ini location You should add "extension=apc.so" to php.ini
Qui vous informent que l'installation s'est bien passé , et qu'il ne vous reste plus qu'à ajouter la ligne :
extension=apc.so
Dans votre php.ini ...
modification du php.ini
Editez votre fichier de configuration /etc/php5/apache2/php.ini
vim /etc/php5/apache2/php.ini
Et ajouter la ligne extension=apc.so à la fin du fichier
Vérification
Relancer apache
/etc/init.d/apache2 restart
Pour vérifier que le module APC soit bien pris en compte , éditez un fichier info.php à la racine de votre serveur , et mettez y ces lignes que vous devez déjà certainement connaître :
<?php echo phpinfo(); ?>
Aller sur ce petit script avec votre navigateur , exemple : http://<ip de mon server>/info.php
Et vous devez voir apparaitre sur la page , la section suivante :
Voilà apc est installé sur votre machine ...
Edite du 26-01-2009:
Une autre méthode d'installation est possible , afin d'avoir la derniere version d'apc ,
1:On récupère la dernière version sur le site de pecl
Au moment ou je vous parle , la version est : 3.1.2 On place l'archive dans le répertoire /usr/local/src Puis nous le décompactons .
cd /usr/local/src/ tar xzf APC-3.1.2.tgz rm APC-3.1.2.tgz cd APC-3.1.2/
2:Compilation et installation :
Nous allons creer un fichier de configuration my_configure
vim my_configure
Voici le contenu :
#!/bin/sh
phpize
./configure \
--enable-apc-mmap \
--with-apxs2=/usr/local/bin/apxs \
On le rend executable :
chmod 777 my_configure
Puis on lance la compilation suivie de l'installation .
./my_configure make make install
Toujours vérifier que l'extension est active dans le php.ini comme expliqué plus haut
Puis nous redémarrons apache ... et voilà ...
Note: il est possible d'accéder à une sorte de page d'information avec graph , et d'administration en copiant le fichier apc.php à un endroit accessible par le serveur web .
Fin de l'edite
Utilisation
Chacun trouvera l'utilisation qu'il souhaite en faire en fonction de l'application développer , voici la liste des fonctions disponibles :
Mettre une variable en cache
if( empty(apc_fetch('foo')))
{
$value = calculComplexe();
$ttl = 600;
apc_add('foo',$value,$ttl);
}
var_dump(apc_fetch('foo'));
function calculComplexe()
{
//calcul compliqué qui génére de gros tableaux temporaires ..
return $result;
}
Ici , la fonction calculComplexe() n'est appelé que si le resultat n'est pas présent dans le cache , sachant que la variable mise en cache avec la clef 'foo' est réinitialiser toutes les 6 minutes ...
ttl à 600 secondes ..
Conclusion
Voilà pour cette première présentation rapide , n'hésitez pas à parcourir la documentation pour adapter l'utilisation d'APC à votre cas ..


Commentaires
Très bon tutoriel mais je pense pas que ça soit var_dump(apt_fetch( 'foo')) mais var_dump(apc_fetch('foo'))
Merci ,
Effectivement , certainement l'habitude de taper apt-get ... sous linux
Merci pour l'info , je corrige ça ..