2009-10-26 23 views
7

Comment utiliser le paramètre apc.filters dans la mise en cache des codes d'opération APC pour ne pas mettre en cache certains chemins? Par exemple, je veux la mise en cache d'être actif pour quoi que ce soit sous le chemin:apc.filters par chemin?

"/ var/www/vhosts"

et exclure des chemins comme

"/ usr/share/psa-horde /"

J'ai essayé d'utiliser

apc.cache_by_default = 0 
apc.filters = "+/var/www/vhosts" 

et

apc.cache_by_default = 1 
apc.filters = "-/usr/share/psa-horde/" 

Mais ni travaillé comme prévu.

http://www.php.net/manual/en/apc.configuration.php#ini.apc.filters

Si le filtre est quelque chose comme "+/var/www/vhosts/*" (notez le caractère générique)? Je crains que ce n'est pas possible à cause des filtres de fonctionnement de:

Notez que le nom de fichier utilisé pour correspondant est celui passé à include/require, pas le chemin absolu.

Des idées ou des exemples de configurations?

Répondre

6

Le filtre doit être une liste d'expressions régulières étendues POSIX séparées par des virgules. Je crois que ce que vous avez dans la seconde tentative correspond seulement au chemin exact/usr/share/psa-horde /, et non/usr/share/psa-horde/quelque chose ou /usr/share/psa-horde/anotherfile.php

ce qui suit doit correspondre à quoi que ce soit dans le sous-dossier

apc.filters = "-/usr/share/psa-horde/.*" 
+0

Hmm, bon appel, mais je pense qu'il ne fonctionne que pour le nom de fichier si le chemin complet a été utilisé dans le require: « Notez que le nom de fichier utilisé pour la correspondance est celui passé inclure/exiger, pas le chemin absolu. " – typeoneerror

+0

par exemple. essayé "-/var/www/vhosts/monhostname.com/svn/public/openx /.*" et les fichiers de ce répertoire sont toujours en cache. – typeoneerror

+0

"Notez que le nom de fichier utilisé pour la correspondance est celui passé pour inclure/require, pas le chemin absolu." - from docs – livelygreen

5

une réponse très tard, mais juste au cas où quelqu'un d'autre est d'avoir ce problème (je vais deviner que vous pourriez être/avoir couru un Plesk boîte, c'est pourquoi je suis tombé dessus). Votre meilleur pari est d'avoir APC dans la liste des modules PHP chargés, mais apc.enabled 0 dans le php.ini maître. Ensuite, pour chaque vhost pour lequel vous voulez l'activer, ajoutez php_admin_value apc.enabled 1 pour activer pour chacun. Cela pourrait être un problème si vous avez une tonne de sites, mais ne fonctionne que pour quelques-uns.

0

Depuis apc.filters travaille avec des expressions régulières, chemin générique doit être spécifié comme apc.filters = "-/usr/share/psa-horde /.*"

2

solution de pnomolos fonctionne si vous avez différents vhosts, mais cela ne fonctionnera pas si vous n'en avez qu'un et que vous voulez contrôler la mise en cache sur une base vraiment par répertoire.

Ce rapport de bug des points à la meilleure solution la: https://bugs.php.net/bug.php?id=57064

APC et Activer mis apc.cache_by_default-0 en php.ini. Dans votre configuration Apache, vous pouvez ensuite utiliser php_admin_setting apc.cache_by_default 1 dans un bloc Directory pour activer la mise en cache APC exactement là où vous en avez besoin.

0

occasion:

apc.filters="-/eliminate/path1/,-/eliminate/path2/,+/add/to/cache/"