php-apc.filters只允许4个目录



我使用apc来管理缓存,我的目标是只缓存4个目录中的文件:

/home/user6/public_html/beta/
/home/user6/public_html/beta/controller/
/home/user6/public_html/beta/mode/
/home/user6/public_html/beta/templates/

这两个正则表达式我都试过了,但似乎都不起作用?

apc.filters="^(?!/home/user6/public_html/beta/(|controller/|model/|templates/)).*"
apc.filters="^(?!/home/user6/public_html/beta/).*,
            "^(?!/home/user6/public_html/beta/controller/).*,
             ^(?!/home/user6/public_html/beta/model/).*,
             ^(?!/home/user6/public_html/beta/templates/).*"

我的正则表达式是错的还是其他什么不正确?

目前,该网站通过:index.php工作,然后包括控制器/模型/模板文件

只有/home/user6/public_html/beta/index.php显示为缓存文件,所以问题可能是apc永远看不到其他文件,因为它们被包括在内,而不是直接访问?

由于apc.filters指定了regexp的(列表),其中匹配表示不进行筛选,因此您正确地使用了否定断言。然而,您的布尔逻辑中有一个简单的缺陷,即旧的nots-ands和ors。

让我们采用第二条过滤规则:

  • 如果目录不包括/home/user6/public_html/beta/
  • 如果目录不包括/home/user6/public_html/beta/controller/
  • 如果目录不包括/home/user6/public_html/beta/model
  • 如果目录不包括/home/user6/public_html/beta/templates

哎呀。.../beta/controller/x.php匹配(3)和(4),因此不被缓存。等等

如果你想做一个唯一的缓存,那么创建匹配过滤器并翻转它。你也不想缓存测试树之外的任何东西,为什么不呢:

^(?!public_html/beta/(controller/|model/|templates/)?w*.php).

我想这就是你的意图。

最新更新