当前位置:  开发笔记 > 编程语言 > 正文

如何清除APC缓存条目?

如何解决《如何清除APC缓存条目?》经验,为你挑选了7个好方法。

我需要在部署新版本的站点时清除所有APC缓存条目.APC.php有一个用于清除所有操作码缓存的按钮,但是我没有看到用于清除所有用户条目或所有系统条目或所有每个目录条目的按钮.

是否可以通过命令行或其他方式清除所有缓存条目?



1> Travis Beale..:

您可以使用PHP函数apc_clear_cache.

调用apc_clear_cache()将清除系统缓存并调用apc_clear_cache('user')将清除用户缓存.


lo_fye:这实际上有用吗?根据我的经验,我发现APC CLI完全独立于apache的APC缓存 - 这是正确的,因为任何CLI进程都在与Apache完全独立的进程中运行.
我发现要通过命令行执行此操作,您需要进入apc.ini并设置:apc.enable_cli = 1
如果您使用mod_php运行PHP,这不起作用.因为Frank Farmer说的原因.
我使用Nginx运行Ubuntu Server 12.04,使用PHP版本5.4运行PHP-FPM.命令行中的apc_clear_cache()和apc_clear_cache('user')不清除webserver/webpages的APC缓存!
Frank Farmer:我确认这适用于运行PHP 5.3.10的Apache或Nginx以及PHP-FPM接口.我创建了一个shell脚本来执行这个命令`php -r"apc_clear_cache();"`

2> Jeremy Kauff..:

我不相信这些答案中的任何一个实际上都可以用于从命令行清除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,如果你正在使用mod_php或PHP FPM,如果你正在使用它.您的解决方案更优雅(无需重启服务器)但更复杂:)
这比重启php-fpm/apache更好,因为它不需要你的部署用户拥有sudo访问权限.如果要部署到多个服务器,输入每个服务器的sudo密码可能会很烦人.

3> Tadas Sasnau..:

我知道并不适合所有人,但是:为什么不重新启动优雅的Apache?

例如,对于Centos/RedHat Linux:

sudo service httpd graceful

Ubuntu的:

sudo service apache2 graceful


我知道这不太理想,但我很高兴你提到了这个快速而肮脏的解决方案.

4> ColinM..:

这在文档中没有说明,但要清除操作码缓存,您必须执行以下操作:

apc_clear_cache('opcode');

编辑:这似乎只适用于一些旧版本的APC ..

无论您使用什么版本,都无法从php cli脚本中清除mod_php或fastcgi APC缓存,因为cli脚本将以不同的进程运行为mod_php或fastcgi.您必须从要清除缓存的进程(或子进程)中调用apc_clear_cache().使用curl运行一个简单的PHP脚本就是这样一种方法.



5> Léo Benoist..:

如果要在命令中清除apc cache :(如果需要,请使用sudo)

php -r "apcu_clear_cache();" 



6> 小智..:

如果你在NGINX/PHP-FPM堆栈上运行,最好的办法就是重新加载php-fpm

service php-fpm reload (或者您的系统上的重载命令可能是什么)



7> codersofthed..:

根据APC文档中的定义:

要清除缓存运行:

php -r 'function_exists("apc_clear_cache") ? apc_clear_cache() : null;'

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有