Le cache PHP alternatif (APC) est un cache opcode libre et ouvert pour PHP.
Il a été conçu pour fournir un gestionnaire libre, ouvert et robuste pour mettre
en cache et optimiser le code intermédiaire de PHP.
Des informations sur l'installation de ces extensions PECL
peuvent être trouvées dans le chapitre du manuel intitulé Installation
des extensions PECL. D'autres informations comme les notes sur les nouvelles
versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs
ainsi qu'un CHANGELOG, peuvent être trouvées ici :
http://pecl.php.net/package/apc.
Note :
Sous Windows, APC a besoin d'un chemin temporaire pour exister
et qui soit accessible en écriture par le serveur web. Il vérifie
les variables d'environnements TMP, TEMP et USERPROFILE dans cet ordre
et finalement tente le dossier Windows si aucune de celles-là ne sont définies.
Le comportement de ces fonctions est
affecté par la configuration dans le fichier php.ini.
Bien que la configuration par défaut d'APC est suffisante pour la plupart des installations,
les utilisateurs avancés devraient affiner les paramètres suivants.
Il y a deux décisions importantes que vous devez faire. D'abord, le nombre
de mémoire partagée que vous voulez allouer à APC et ensuite, si vous voulez
qu'APC vérifie si un fichier a été vérifié Ã chaque demande. Les deux options
de configuration concernées sont apc.shm_size et
apc.stat. Lisez avec attention la section suivante sur
ces deux options de configuration.
Une fois que vous avez un serveur qui fonctionne, vous devez copier le script
apc.php fourni avec l'extension dans un endroit accessible
par le serveur web, puis, appelez-le depuis votre navigateur. Il vous fournit tous les
détails de votre cache. Si GD est actif sur votre configuration PHP, il y aura aussi
de jolis graphiques. La première chose à vérifier est s'il y a actuellement des
fichiers en cache. En supposant que cela fonctionne, vous devez donc faire attention
au nombre Cache full count sur la gauche. Il indique le temps
depuis lequel le cache a été créé et qui doit effacer les entrées non utilisées depuis
apc.ttl secondes. Vous devriez configurer votre cache pour
minimiser ce nombre. Si vous remplissez constamment votre cache, la génération
du cache résultant va prendre beaucoup de ressources. Vous devriez soit allouer
plus de mémoire pour APC, soit utiliser apc.filters pour mettre
en cache moins de scripts.
Tableau 1. Options de configuration APC
Nom
Défaut
Modifiable
Changelog
apc.enabled
"1"
PHP_INI_ALL
apc.shm_segments
"1"
PHP_INI_SYSTEM
apc.shm_size
"30"
PHP_INI_SYSTEM
apc.optimization
"0"
PHP_INI_ALL
apc.num_files_hint
"1000"
PHP_INI_SYSTEM
apc.ttl
"0"
PHP_INI_SYSTEM
apc.gc_ttl
"3600"
PHP_INI_SYSTEM
apc.cache_by_default
"1"
PHP_INI_SYSTEM
apc.filters
NULL
PHP_INI_SYSTEM
apc.mmap_file_mask
NULL
PHP_INI_SYSTEM
apc.slam_defense
"0"
PHP_INI_SYSTEM
apc.file_update_protection
"2"
PHP_INI_SYSTEM
apc.enable_cli
"0"
PHP_INI_SYSTEM
> APC 3.0.6
apc.max_file_size
"1M"
PHP_INI_SYSTEM
> APC 3.0.6
apc.stat
"1"
PHP_INI_SYSTEM
> APC 3.0.9
Pour plus de détails sur les constantes PHP_INI_*,
reportez-vous à Annexe G.
Voici un éclaircissement sur
l'utilisation des directives de configuration.
apc.enabled peut être défini à 0 pour
désactiver APC. Ceci est utile lorsque APC est compilé statiquement
dans PHP, et qu'il n'y a donc aucun autre moyen de le
désactiver (lorsque compilé en tant que DSO, la ligne
extension dans le php.ini
peut juste être commentée).
Le nombre de segments mémoires à allouer pour le cache compilé.
Si APC fonctionne en dehors de la mémoire partagée mais
que vous avez déjà défini apc.shm_size
aussi élevé que votre système le permet, vous pouvez tenter
de relever cette valeur.
La taille de chaque segment de mémoire partagé en MB.
Par défaut, quelques systèmes (incluant la plupart des BSD)
ont une limite basse de la taille d'un segment mémoire partagé.
Le degré d'optimisation. Zéro désactive l'optimisateur,
et de hautes valeurs utilisent des optimisations
agressives. Attendez-vous à des améliorations très modestes
de vitesse. Ceci est expérimental.
Un "conseil" au sujet du nombre de fichiers sources distincts
qui seront inclus ou demandés sur votre serveur web.
Placez à zéro ou omettez-le si vous n'êtes pas sûr ;
cet arrangement est principalement utile pour les sites
qui ont des milliers de fichiers sources.
Le nombre de secondes qu'une entrée de cache est autorisée
à stagner dans un slot dans le cas où ce slot d'entrée de cache
est nécessaire pour une autre entrée. Laisser à zéro signifie
que votre cache pourrait potentiellement remplir d'autres entrées
tant que d'autres entrées ne seront pas mises en cache.
Le nombre de secondes qu'une entrée de cache peut
rester dans la liste de la collection. Cette valeur fournit
une sécurité dans le cas où le processus du serveur
meurt lors de l'exécution d'un fichier source mis en cache ;
si cette source est modifié, la mémoire allouée pour l'ancienne
version ne sera pas demandée tant que ce TTL ne sera atteint.
Définissez-le à zéro pour désactiver cette fonctionnalité.
Actif par défaut, mais peut être désactivé et utilisé
en conjonction avec un apc.filters
positif donc ces fichiers seront uniquement mis en cache s'ils correspondent
à un filtre positif.
Une liste séparée par des virgules d'expressions rationnelles POSIX.
Si un seul masque correspond à un nom de fichier source,
le fichier ne sera pas mis en cache. Notez que le nom du fichier utilisé
pour le masque est celui passé aux instructions include/require, et non
un chemin absolu. Si le premier caractère de l'expression est un
+ alors l'expression sera additive dans le sens
que chaque fichier correspondant à l'expression sera mis en cache, et
si le premier caractère est un - alors tout ce qui
correspond ne sera pas mis en cache. Le cas du -
est celui par défaut, donc, il peut être omis.
Si compilé avec le support MMAP en utilisant --enable-mmap,
ce sera le style mktemp de masque de fichier à passer au module
MMAP pour déterminer si votre région de mémoire MMAP va être
mise dans un fichier ou en mémoire partagée. Dans le cas de la mise
en cache dans un fichier MMAP, définissez ce paramètre comme
/tmp/apc.XXXXXX (exactement 6 X).
Pour utiliser le style POSIX shm_open/mmap, placez un .shm
quelque part dans votre masque, e.g. /apc.shm.XXXXXX.
Vous pouvez également définir ce paramètre à /dev/zero
pour utiliser votre interface kernel /dev/zero pour
la mémoire anonyme MMAP. Laissez-le indéfini forcera un MMAP anonyme.
Sur les serveurs très surchargés lorsque vous démarrez le serveur
ou modifiez des fichiers, vous pouvez créer une race contenant
plusieurs processus pour mettre en cache le même fichier en même
temps. Cette option définit le pourcentage de processus
qui évitera de tenter de mettre en cache un fichier non mise en cache.
Ou pensez à lui comme probabilité d'un processus simple pour éviter
la mise en cache. Par exemple, définir apc.slam_defense
à 75 signifie qu'il y a 75% de chance que le processus
ne mettra pas en cache un fichier non déjà mis en cache.
Définir à 0 pour désactiver cette fonctionnalité.
Lorsque vous modifiez un fichier sur un serveur web, vous
devriez le faire d'une façon atomique. Écrivez-le dans un
fichier temporaire et renommez-le (mv)
vers sa position permanente lorsqu'il est prêt. La plupart des éditeurs
de texte, cp, tar et les autres programmes de ce genre ne font
pas cela. Cela signifie qu'il y a une chance pour que le fichier
soit accédé (et donc, mis en cache) alors qu'il est encore en cours
d'écriture. Ce paramètre apc.file_update_protection
fait intervenir un délai pour la mise en cache des nouveaux fichiers.
Par défaut, il vaut 2 secondes, ce qui signifie que si le timestamp
de modification (mtime) d'un fichier montre
qu'il vaut moins de 2 secondes, ce fichier ne sera pas mis en cache.
La personne malheureuse qui a accédé Ã ce dossier moitié-écrit immobile
verra une ébauche, mais au moins lui ne persistera pas.
Si vous êtes certain de mettre toujours et automatiquement à jour
vos fichiers en utilisant quelque chose comme rsync qui fait cela correctement,
vous pouvez désactiver cette protection en le définissant à 0.
Si vous avez un système qui flood avec io causant des procédures de mise
à jour mettant plus de temps que 2 secondes, vous pourriez vouloir
augmenter cette valeur.
Pour tester et déboguer. Définir ceci active APC pour la
version CLI de PHP. Normalement, vous ne devriez pas vouloir
créer, peupler et démonter le cache APC Ã chaque requête CLI,
mais pour divers scénarios de test, elle est maniable pour pouvoir
activer APC pour la version CLI d'APC facilement.
Faites très attention si vous modifiez cette valeur. Par défaut, APC vérifie
le script à chaque demande pour voir s'il a été modifié ou non. S'il a été
modifié, il sera recompilé et la nouvelle version sera mise en cache.
En désactivant cette option, aucune vérification n'aura lieu. Cela signifie
que si vous voulez activer les modifications, vous devez redémarrer le
serveur web. Sur un serveur de production où vous modifiez rarement le
code, le fait de désactiver cette option permet de gagner en performance
de manière significative.
Pour les fichiers inclus / requis, cette option est également appliquée,
mais notez que si vous utilisez des chemins relatifs (n'importe quel chemin
qui ne commence pas par un / sous Unix), APC doit identifier de manière
unique le fichier à vérifier. Si vous utilisez des chemins absolus pour vos
inclusions, APC peut éviter ces vérifications et utiliser ce chemin absolu
en tant qu'identifiant unique du fichier.