2009-10-26 4 views
7

Wie verwende ich den apc.filters-Parameter im APC-Opcode-Caching, um bestimmte Pfade nicht zu cachen? Zum Beispiel möchte ich das Caching für etwas unter dem Pfad aktiv sein:apc.filters nach Pfad?

"/ var/www/vhosts"

und verstehen sich inklusive Pfade wie

"/ usr/share/psa-Horde /"

ich versuchte

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

und

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

Aber keiner funktionierte wie erwartet.

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

Sollte der Filter etwas mehr wie "+/var/www/vhosts/*" (man beachte die Wildcard) sein? Ich fürchte, dies wegen der Art und Weise Filter funktioniert nicht möglich ist:

Beachten Sie, dass der Dateiname für Anpassung verwendet derjenige include/erfordern, nicht den absoluten Pfad geführt ist.

Irgendwelche Ideen oder Beispielkonfigurationen?

Antwort

6

Der Filter sollte eine kommagetrennte Liste von POSIX erweiterten regulären Ausdrücken sein. Ich glaube, was Sie im zweiten Versuch haben, entspricht nur dem genauen Pfad/usr/share/psa-horde/und nicht/usr/share/psa-horde/etwas oder /usr/share/psa-horde/anotherfile.php

die folgende Beschreibung ist

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

Hmm, guten Ruf, aber ich denke, es ist nur für die Dateinamen funktioniert, wenn der vollständige Pfad in der require-Anweisung verwendet wurde: „Beachten Sie, dass die für den Abgleich verwendeten Dateinamen die übergebene sind einbeziehen/erfordern, nicht den absoluten Pfad. " – typeoneerror

+0

z.B. versucht "-/var/www/vhosts/myhostname.com/svn/public/openx /.*" und Dateien in diesem Verzeichnis werden noch zwischengespeichert. – typeoneerror

+0

"Beachten Sie, dass der für die Übereinstimmung verwendete Dateiname derjenige ist, der übergeben wird, und nicht den absoluten Pfad." - aus docs – livelygreen

5

eine sehr späte Antwort, aber nur für den Fall, dass jemand etwas in den Ordner Unter übereinstimmen sonst dieses Problem wird mit (ich werde Sie erraten kann/eine Plesk laufen worden sein haben Box, weshalb ich auf dieses stieß).

Ihre beste Wette ist APC in der Liste der geladenen PHP-Module zu haben, aber apc.enabled 0 in der Master php.ini haben. Dann fügen Sie für jeden vhost, für den Sie es aktiviert haben möchten, php_admin_value apc.enabled 1 hinzu, um es für jeden zu aktivieren. Könnte ein Problem sein, wenn Sie eine Menge Websites haben, aber funktioniert nur für ein paar.

0

Seit apc.filters arbeitet mit regulären Ausdrücken, sollte Wildcard Pfad als apc.filters angegeben werden = "-/usr/share/psa-Horde /.*"

2

pnomolos' Lösung funktioniert, wenn Sie unterschiedliche haben vhosts, aber es funktioniert nicht, wenn Sie nur einen haben und das Caching wirklich pro Verzeichnis steuern wollen.

Dieser Bug-Report zeigt auf die beste Lösung: https://bugs.php.net/bug.php?id=57064

APC aktivieren und apc.cache_by_default-0 in php.ini. In Ihrer Apache-Konfiguration können Sie dann php_admin_setting apc.cache_by_default 1 in einem Directory Block verwenden, um das APC-Caching genau dort zu aktivieren, wo Sie es benötigen.

0

Gebraucht:

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