copy($apcPaths['data'], $apcPaths['web']); //'data' is a non web accessable directory
$url = 'http://localhost/apc_clear.php'; //use domain name as necessary
$result = json_decode(file_get_contents($url));
if (isset($result['success']) && $result['success'])
{
//handle success
}
else
{
//handle failure
}
unlink($apcPaths['web']);
18 回答
如APC文件中所定义:
要清除缓存运行:
APC的稳定可以选择清除其界面本身的缓存 . 要清除这些条目,您必须登录到apc界面 .
APC可以选择在apc.php文件中设置用户名和密码 .
如果你在ubuntu下运行fpm,需要运行下面的代码(在12和14上检查)
apc.ini
apc.stat =“1”将强制APC对每个请求上的脚本进行统计(检查)以确定它是否已被修改 . 如果它已被修改,它将重新编译并缓存新版本 .
如果此设置关闭,APC将不会检查,这通常意味着强制APC重新检查文件,必须重新启动Web服务器或必须手动清除缓存 . 请注意,FastCGI Web服务器配置可能无法在重新启动时清除缓存 . 在脚本文件很少更改的 生产环境 服务器上,禁用统计信息可以显着提高性能 .
新的APC Admin界面有添加/清除用户缓存和操作码缓存的选项,一个有趣的功能是从opCode Cache添加/刷新/删除目录
APC Admin Documentation
您可以使用PHP函数
apc_clear_cache
.调用
apc_clear_cache()
将清除系统缓存并调用apc_clear_cache('user')
将清除用户缓存 .我不相信这些答案实际上可以用于从命令行清除APC缓存 . 如上面所述Frank Farmer,CLI在与Apache分开的进程中运行 .
我从命令行清除的解决方案是编写一个脚本,将APC清除脚本复制到
web
目录并访问它然后将其删除 . 该脚本仅限于从localhost访问 .这是脚本复制到Web目录,访问和删除的文件 .
此脚本将apc_clear.php复制到Web目录,访问它,然后删除它 . 这是基于Symfony任务 . 在Symfony版本中,调用Symfony形式的copy和unlink,它们处理错误 . 您可能希望添加成功的检查 .
我知道并不适合所有人,但是:为什么不做一个优雅的Apache重启?
对于例如在Centos / RedHat Linux的情况下:
Ubuntu的:
这在文档中没有说明,但要清除操作码缓存,您必须执行以下操作:
编辑:这似乎只适用于一些旧版本的APC ..
无论您使用什么版本,都无法从php cli脚本中清除mod_php或fastcgi APC缓存,因为cli脚本将以不同的进程运行为mod_php或fastcgi . 您必须从要清除缓存的进程(或子进程)中调用apc_clear_cache() . 使用curl运行一个简单的PHP脚本就是这样一种方法 .
如果要在命令中清除apc cache :(如果需要,请使用sudo)
如果你在NGINX / PHP-FPM堆栈上运行,最好的办法就是重新加载php-fpm
service php-fpm reload
(或者您系统上的重载命令可能是什么)命令行使用的另一种可能性,尚未提及,是使用curl .
如果您使用的是stock apc.php脚本,这并不能解决所有缓存条目的问题,但它可以调用已调整的脚本或您已安装的另一个脚本 .
这会清除操作码缓存:
将OB参数更改为3以清除用户缓存:
将两行放在脚本中并在env中使用$ PASSWORD调用它 .
如果要通过json监视结果,可以使用这种脚本:
正如其他答案所述,必须通过http或curl调用此脚本,如果它在应用程序的Web根目录中公开,则必须加以保护 . (通过ip,令牌......)
apc_clear_cache()仅适用于您希望缓存清除的同一个php SAPI . 如果你有PHP-FPM并想要清除apc缓存,你可以通过一个php脚本而不是命令行来完成,因为这两个缓存是分开的 .
我编写了CacheTool,一个命令行工具,可以解决这个问题,只需一个命令就可以从命令行清除PHP-FPM APC缓存(它连接到php-fpm,并执行apc函数)
它也适用于opcache .
看看它是如何工作的:http://gordalina.github.io/cachetool/
对我来说一个很好的解决方案是在部署后不再使用过时的用户缓存 .
如果为每个键添加前缀,则可以在更改缓存条目的数据结构时更改前缀 . 这对你有所帮助在部署时获得以下行为:
仅部署更新的结构后,不要使用过时的缓存条目
不要在部署时清理整个缓存以减慢页面速度
恢复部署后可以重用一些旧的缓存条目(如果条目未自动删除)
APC将在丢失的缓存空间到期 OR 后删除旧的缓存条目
这仅适用于用户缓存 .
创建APC.php文件
从浏览器运行它 .
我在Symfony构建的解决方案是在同一台服务器上有一堆实例:
Step 1. 创建触发器或其他东西来设置文件标志(例如Symfony命令)然后创建
marker file
..Step 2. 在开始时索引文件中添加清除代码并删除
marker file
.Step 2. 运行应用 .
我们遇到了APC和符号链接到符号链接到文件的问题 - 它似乎忽略了文件本身的变化 . 以某种方式对文件本身执行触摸有帮助 . 我不知道修改文件和触摸它有什么区别,但不知何故有必要......