【发布时间】:2010-10-31 01:08:10
【问题描述】:
有没有办法防止特定文件被APC 缓存操作码?用例如下:
位于云端的应用程序,可动态调整自身大小(根据需要启动和关闭服务器)。 config.php 脚本必须在新 IP 可用或不可用时知道它们。
由于这些更改发生得足够频繁,而且 config.php 文件相当基本,因此不必担心仅为一个文件清除 APC。
从 APC 中清除一个文件绝对是一种可能,但由于您无法通过命令行访问 APC,因此该解决方案最终相当不雅。
【问题讨论】:
有没有办法防止特定文件被APC 缓存操作码?用例如下:
位于云端的应用程序,可动态调整自身大小(根据需要启动和关闭服务器)。 config.php 脚本必须在新 IP 可用或不可用时知道它们。
由于这些更改发生得足够频繁,而且 config.php 文件相当基本,因此不必担心仅为一个文件清除 APC。
从 APC 中清除一个文件绝对是一种可能,但由于您无法通过命令行访问 APC,因此该解决方案最终相当不雅。
【问题讨论】:
我有一个类似的用例。我已经多次问过自己同样的问题,但我一直无法找到解决方案。但是,我的解决方案是创建一个快速脚本,负责清除每个服务器的 APC 缓存。每次重建应用程序时,我都需要在每个服务器上使用apc_clear_cache 来清除操作码缓存如果您只需要清除一个文件,那么使用apc_compile_file 可能会更好
希望这会有所帮助。
【讨论】:
是的。您应该查看 apc.filter 配置指令。 Another Question | PHP Docs
【讨论】:
我不知道有什么方法可以按照您的建议进行操作,但您应该能够自行设计解决方法。
显而易见的解决方案是不要将数据存储在 php 文件中。既然你已经有了 APC,为什么不把配置数据保存在 APC 中(作为缓存数据,而不是操作码)。
所以无论修改 config.php,现在都会做这样的事情:
当 config.php 需要数据时,它通常会从缓存中读取。如果缓存已经失效,它会从 ini 文件中读取/解析数据,更新缓存,然后照常进行。
归根结底,您使用的是操作码缓存来缓存数据。您应该改用数据缓存。幸运的是,APC 两者都提供。
【讨论】:
apc_compile_file 的注释似乎可以满足您的需求。