0

我正在使用 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 看到?

4

1 回答 1

1

由于 apc.filters 指定匹配表示不过滤的(列表)正则表达式,因此您正确地使用了否定断言。但是,您的布尔逻辑存在一个简单的缺陷,即旧的 nots 和 ors。

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

  • 如果目录不包含/home/user6/public_html/beta/或不缓存,请不要缓存
  • 如果目录不包含/home/user6/public_html/beta/controller/或不缓存,请不要缓存
  • 如果目录不包含/home/user6/public_html/beta/model或不缓存,请不要缓存
  • 如果目录不包含/home/user6/public_html/beta/templates或不缓存,请不要缓存

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

如果你想做一个唯一的缓存,那么创建匹配过滤器并翻转它。您也不想缓存 beta 树之外的任何内容,所以为什么不:

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

我想这是你的意图。

于 2012-07-16T07:22:48.173 回答