Le comportement de ces fonctions est
affecté par la configuration dans le fichier php.ini.
Bien que la configuration par défaut d'APC soit suffisante pour la
plupart des installations, les utilisateurs avancés devraient
affiner certains paramètres.
Il y a deux décisions importantes que vous devez prendre. D'abord,
la quantité de mémoire partagée que vous voulez allouer à APC et
ensuite, si vous voulez qu'APC vérifie si un fichier a été modifié
à chaque utilisation. Les deux directives de configuration concernées
sont apc.shm_size et apc.stat.
Lisez avec attention la section suivante sur ces deux directives 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.
Voici un éclaircissement sur
l'utilisation des directives de configuration.
-
apc.enabled
booléen
-
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).
-
apc.shm_segments
entier
-
Le nombre de segments mémoire à 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.
-
apc.shm_size
entier
-
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é.
-
apc.optimization
entier
-
Le degré d'optimisation. Zéro désactive l'optimiseur,
et de hautes valeurs utilisent des optimisations
agressives. Attendez-vous à des améliorations très modestes
de vitesse. Ceci est expérimental.
-
apc.num_files_hint
entier
-
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.
-
apc.user_entries_hint
entier
-
Tout comme apc.num_files_hint,
un "conseil" à propos du nombre de variables de cache utilisateur distinctes à
stocker. Définissez le à 0 ou ne le définissez pas si vous n'êtes pas sûr.
-
apc.ttl
entier
-
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.
-
apc.user_ttl
entier
-
Le nombre de secondes qu'une entrée utilisateur du cache est autorisée à
résider dans un slot dans le cas où ce slot d'entrée de cache est demandé
par une autre entrée. Laisser cette option à zéro signifie que votre cache
peut potentiellement être rempli avec des entrées obsolètes lorsqu'il n'y
a eu jamais d'entrées mises en cache. Dans le cas où le cache est à court
d'espace, ce dernier sera totalement vidé si ttl vaut 0. Sinon, et si
le ttl est supérieur à 0, APC va tenter de supprimer les entrées
qui ont dépassé leur date d'expiration.
-
apc.gc_ttl
entier
-
Le nombre de secondes qu'une entrée de cache est autorisée
à rester sans utilisation, au cas où cet espace pourrait
être nécessaires à une autre entrée. La valeur de zéro
fait que votre cache pourrait se remplir avec des entrées
oisives, et que les nouvelles entrées ne soient pas mises
en cache. Dans le cas où le cache est à court de mémoire,
le cache sera totalement vidé si ttl vaut 0. Sinon, et
si ttl est supérieur à 0, APC va tenter de supprimer les
entrées qui ont dépassé leur date d'expiration.
-
apc.cache_by_default
booléen
-
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.
-
apc.filters
chaîne de caractères
-
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.
-
apc.mmap_file_mask
chaîne de caractères
-
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. Le laisser indéfini forcera un MMAP anonyme.
-
apc.slam_defense
entier
-
Sur les serveurs très surchargés lorsque vous démarrez le serveur
ou modifiez des fichiers, vous pouvez créer une course de
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 mis 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 chances que le processus
ne mettra pas en cache un fichier qui ne s'y trouvera pas déjà.
Définir à 0 pour désactiver cette fonctionnalité.
Obsolète avec apc.write_lock.
-
apc.file_update_protection
entier
-
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 fichier à moitié écrit
verra une ébauche, mais au moins celui-ci ne persistera pas en cache.
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 une application très intensive sur le disque, qui force les
procédures de mise à jour à prendre plus de 2 secondes, vous pourriez vouloir
augmenter la valeur de cette directive.
-
apc.enable_cli
entier
-
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 afin de pouvoir
activer facilement APC pour la version CLI d'APC.
-
apc.max_file_size
entier
-
Permet d'éviter la mise en cache des fichiers dont la taille est supérieure à
cette valeur. Par défaut, 1Mo.
-
apc.stat
entier
-
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 compilé à nouveau 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 performances
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.
-
apc.write_lock
booléen
-
Sur les serveurs très chargés, lorsque vous démarrez le serveur, ou
lorsque beaucoup de fichiers sont modifiés, vous pouvez en finir avec
les processus qui tentent de compiler et mettre en cache le même fichier.
Lorsque apc.write_lock
est activé, uniquement un
seul processus à la fois
tentera de compiler un script de mise en cache tandis que les autres
processus exécuteront les fichiers non mis en cache au lieu d'attendre
que le verrou se libère.
-
apc.report_autofilter
booléen
-
Logs tous les scripts qui sont automatiquement exclus de la mise en cache
à cause de problèmes de liaison.
-
apc.include_once_override
booléen
-
Optimise les appels aux fonctions include_once() et
require_once() et évite ainsi de surcharger le système
appelant.
-
apc.rfc1867
booléen
-
Le gestionnaire de progression de téléchargement de fichier RFC1867
n'est disponible que si vous avez compilé APC avec PHP 5.2.0 ou supérieur.
Lors le support est actif, les fichiers téléchargés qui incluent
un champ appelé APC_UPLOAD_PROGRESS avant le champ "file"
d'un formulaire de téléchargement fera qu'APC créera automatiquement
une entrée de cache utilisateur nommée upload_key où
key est la valeur de l'entrée de formulaire
APC_UPLOAD_PROGRESS.
Notez que la surveillance du téléchargement de fichier n'est pas compatible
avec les threads pour le moment, ainsi, les nouveaux téléchargements survenant
tandis qu'un précédent est toujours en cours désactivera la surveillance précédente.
Exemple #1 Exemple avec apc.rfc1867
<?php
print_r(apc_fetch("upload_$_POST[APC_UPLOAD_PROGRESS]"));
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
Array
(
[total] => 1142543
[current] => 1142543
[rate] => 1828068.8
[filename] => test
[name] => file
[temp_filename] => /tmp/php8F
[cancel_upload] => 0
[done] => 1
)
-
apc.rfc1867_prefix
chaîne de caractères
-
Préfixe de la clé à utiliser pour l'entrée de cache utilisateur généré
par la fonctionnalité de progression de téléchargement RFC1867.
-
apc.rfc1867_name
chaîne de caractères
-
Spécifie le nom du champ masqué du formulaire qui active la progression
du téléchargement et spécifie le suffixe de la clé du cache utilisation.
-
apc.rfc1867_freq
chaîne de caractères
-
La fréquence à laquelle la mise à jour doit être effectuée pour l'entrée
du cache utilisateur pour la progression du téléchargement. Peut prendre
la forme d'un pourcentage de la taille totale du fichier ou une taille,
en octets, optionnellement suffixée par "k", "m",
ou "g" pour kilo-octets, méga-octets ou giga-octets (insensible à la casse).
Si vous définissez cette option à 0, la mise à jour intervient aussi
souvent que possible, ce qui peut rendre le téléchargement plus lent.
-
apc.localcache
booléen
-
Ceci active un processus d'interface locale libre de cache, ce qui réduit
les controverses de verrous lorsque le cache est sur le point d'être écrit.
-
apc.localcache.size
entier
-
La taille du processus d'interface locale libre de cache, doit être
définit à une valeur suffisamment élevée, soit approximativement
la moitié de la valeur de
apc.num_files_hint.
-
apc.coredump_unmap
booléen
-
Active la gestion APC des signaux, comme SIGSEGV, qui écrit
les fichiers internes lorsqu'il est émis. Lorsque ces signaux
sont reçus, APC tentera de détacher les segments de la mémoire
partagées afin de les exclure du fichier interne. Cette configuration
devrait rendre plus stable le système lorsque des signaux fatales
sont reçus et qu'un gros segment APC de mémoire partagée est
configuré.
Avertissement
Cette fonctionnalité est potentiellement dangereuse.
Le détachement d'un segment de mémoire partagée dans un
gestionnaire de signaux fatals peut produire à un comportement
indéterminé si une erreur fatale survient.
Note:
Bien que quelques noyaux puissent ignorer divers types de mémoire
partagée lors de la génération du fichier interne, ces implémentations
peuvent également ignorer d'importants segments de mémoire partagée
tel que le scoreboard d'Apache.
-
apc.stat_ctime
entier
-
Une vérification avec ctime prévient les problèmes causés par des
programmes comme svn ou rsync en s'assurant que les inodes n'ont pas
été modifiés depuis le dernier appel à stat. APC, normalement,
n'utilise que mtime pour cela.