php apc.filters只允许4个目录

时间:2012-07-16 02:52:57

标签: php regex apc

我正在使用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从未看到过其他文件,因为它们被包含在内并且未被直接访问?

1 个答案:

答案 0 :(得分:1)

由于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)因此不会被缓存。等

如果您只想创建一个缓存,请创建匹配过滤器并将其翻转。你也不想在beta树之外缓存任何东西,为什么不呢:

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

我认为你的意图是什么。