7

如何在 APC 操作码缓存中使用 apc.filters 参数来不缓存某些路径?例如,我希望缓存对路径下的任何内容都处于活动状态:

“/var/www/vhosts”

并排除路径

“/usr/share/psa-horde/”

我尝试使用

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

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

但两者都没有像我预期的那样工作。

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

过滤器是否应该更像“+/var/www/vhosts/*”(注意通配符)?由于过滤器的工作方式,我担心这是不可能的:

请注意,用于匹配的文件名是传递给 include/require 的文件名,而不是绝对路径。

任何想法或示例配置?

4

5 回答 5

6

过滤器应该是一个逗号分隔的 POSIX 扩展正则表达式列表。我相信您在第二次尝试中所拥有的仅匹配确切路径 /usr/share/psa-horde/,而不是 /usr/share/psa-horde/something 或 /usr/share/psa-horde/anotherfile.php

以下内容应与子文件夹中的任何内容匹配

apc.filters = "-/usr/share/psa-horde/.*"
于 2009-10-26T23:11:58.157 回答
5

一个很晚的回复,但以防万一其他人遇到这个问题(我猜你可能/一直在运行 Plesk 盒子,这就是我遇到这个问题的原因)。

最好的办法是在加载的 php 模块列表中包含 APC,但 apc.enabled 0在主 php.ini 中。然后,对于您想要启用它的每个虚拟主机,添加为每个虚拟主机启用php_admin_value apc.enabled 1。如果您有大量站点,但仅适用于少数站点,则可能是一个问题。

于 2010-09-22T23:28:27.020 回答
2

如果您有不同的虚拟主机,pnomolos 的解决方案就可以工作,但如果您只有一个虚拟主机并且想要在真正的每个目录的基础上控制缓存,它就行不通。

此错误报告指出了最佳解决方案:https ://bugs.php.net/bug.php?id=57064

启用 APC 并设置apc.cache_by_default0in php.ini。然后,在您的 Apache 配置中,您可以php_admin_setting apc.cache_by_default 1Directory块内使用以在您需要的地方启用 APC 缓存。

于 2013-08-28T16:34:15.753 回答
0

用过的:

apc.filters="-/eliminate/path1/,-/eliminate/path2/,+/add/to/cache/"
于 2013-09-09T09:24:27.917 回答
0

由于 apc.filters 适用于正则表达式,通配符路径应指定为 apc.filters = "-/usr/share/psa-horde/.*"

于 2011-12-13T11:22:40.020 回答