我需要在部署新版本的站点时清除所有APC缓存条目.APC.php有一个用于清除所有操作码缓存的按钮,但是我没有看到用于清除所有用户条目或所有系统条目或所有每个目录条目的按钮.
是否可以通过命令行或其他方式清除所有缓存条目?
您可以使用PHP函数apc_clear_cache
.
调用apc_clear_cache()
将清除系统缓存并调用apc_clear_cache('user')
将清除用户缓存.
我不相信这些答案中的任何一个实际上都可以用于从命令行清除APC缓存.正如Frank Farmer在上面评论的那样,CLI在与Apache分开的进程中运行.
我从命令行清除的解决方案是编写一个脚本,将APC清除脚本复制到web
目录并访问它然后将其删除.该脚本仅限于从localhost访问.
apc_clear.php
这是脚本复制到Web目录,访问和删除的文件.
true)); } else { die('SUPER TOP SECRET'); }
缓存清除脚本
此脚本将apc_clear.php复制到Web目录,访问它,然后删除它.这是基于Symfony任务.在Symfony版本中,调用Symfony形式的copy和unlink,它们处理错误.您可能希望添加成功的检查.
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']);
我知道并不适合所有人,但是:为什么不重新启动优雅的Apache?
例如,对于Centos/RedHat Linux:
sudo service httpd graceful
Ubuntu的:
sudo service apache2 graceful
这在文档中没有说明,但要清除操作码缓存,您必须执行以下操作:
apc_clear_cache('opcode');
编辑:这似乎只适用于一些旧版本的APC ..
无论您使用什么版本,都无法从php cli脚本中清除mod_php或fastcgi APC缓存,因为cli脚本将以不同的进程运行为mod_php或fastcgi.您必须从要清除缓存的进程(或子进程)中调用apc_clear_cache().使用curl运行一个简单的PHP脚本就是这样一种方法.
如果要在命令中清除apc cache :(如果需要,请使用sudo)
php -r "apcu_clear_cache();"
如果你在NGINX/PHP-FPM堆栈上运行,最好的办法就是重新加载php-fpm
service php-fpm reload
(或者您的系统上的重载命令可能是什么)
根据APC文档中的定义:
要清除缓存运行:
php -r 'function_exists("apc_clear_cache") ? apc_clear_cache() : null;'