我使用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).
我想这就是你的意图。