apc.filters按路径过滤?

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的文件名,而不是绝对路径。 有什么想法或示例配置吗?
5个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
6

该过滤器应为POSIX扩展正则表达式的逗号分隔列表。我认为第二个尝试中仅匹配精确路径/usr/share/psa-horde/,而不是/usr/share/psa-horde/something或/usr/share/psa-horde/anotherfile.php

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

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

嗯,不错的想法,但我认为它仅适用于在 require 语句中使用了完整路径的文件名:“请注意,用于匹配的文件名是传递给 include/require 的文件名,而不是绝对路径。” - typeoneerror
尝试过“-/var/www/vhosts/myhostname.com/svn/public/openx/.*”,但该目录中的文件仍在缓存中。 - typeoneerror
请注意,用于匹配的文件名是传递给 include/require 的名称,而不是绝对路径。 - livelygreen
我不理解这个确切的短语... 他应该使用什么路径来代替“-/var/www/vhosts/myhostname.com/svn/public/openx/.*”? - MultiformeIngegno

5

非常晚的回复,但以防其他人遇到此问题(我猜你可能正在运行Plesk box,这就是为什么我遇到这个问题的原因)。

您最好将APC列入已加载的php模块列表中,但在主php.ini中设置apc.enabled 0。然后,对于每个要启用它的虚拟主机,添加php_admin_value apc.enabled 1以启用它。如果您有大量站点,则可能会出现问题,但对于只有几个站点的情况有效。


2

pnomolos的解决方案适用于您有不同虚拟主机的情况,但如果您只有一个虚拟主机并希望真正地按目录控制缓存,则无法使用该方案。

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

启用APC并在php.ini中将apc.cache_by_default设置为0。在您的Apache配置中,您可以在Directory块内使用php_admin_setting apc.cache_by_default 1来启用APC缓存,以精确控制缓存的位置。


0

已使用:

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,