是否有使用PHP5.4或更低版本的Opcache 清理/重置缓存文件的方法?
Here是opcache_reset()
函数,它似乎与PHP5.5一起使用
解决方法是重启......
编辑:我在Github上打开了issue
答案 0 :(得分:11)
zend_accelerator_module.c声明两个记录的API调用:opcache_reset()
和opcache_invalidate()
以及两个未记录的API:opcache_get_status()
和opcache_get_configuration()
。从源头上看,他们所做的事情非常明显。
当您发出opcache_reset()
时,它显然只适用于连接到执行PHP脚本的进程的OPcache缓存。是的,你可以在系统上安装许多这样的缓存。
当您opcache.enable_cli=1
处于 php-cli 请求时,OPcache将为连接到该进程的缓存发出重启请求;不幸的是,cli SAPI创建了一个私有缓存,所以这没什么用。
在* nix系统上要理解的要点是,OPcache依赖于某些底层进程管理器(如Apache或FPM)来启动OPcache,从而使其mmap()
包含缓存的SMA。然后,进程管理器分叉处理请求的子进程,并偶然从父进程继承mmapped区域。
因此,如果要重置连接到PHP-FPM的OPcache缓存,则必须通过在PHP-FPM服务下运行的脚本运行此操作。这只需要一个4线。如果要从命令行执行此操作,则可以使用wget,curl或使用curl扩展的PHP CLI脚本来启动此FPM脚本。
但请记住在两者之间使用一些强大的身份验证机制来防止第三方利用。
如果您想了解更多,我已完成此概述:The Zend Engine and opcode caching。如果您有任何反馈或问题,请在此处发表评论或在Github上提出问题。
答案 1 :(得分:0)
查看您的环境中function_exists是否可以使用该方法。
if( function_exists('opcache_reset') ) echo 'yay!';
它可以在PHP5.5中使用,因为opcache附带了它,如果你已经将OpCache安装到旧版本的php中,它也应该可用。我相信这是文档在说出(PHP 5 >= 5.5.0, PECL ZendOpcache >= 7.0.0)
时的注意事项。
我也成功地使用了这个快速而脏的control panel和PHP 5.4(使用opcache_ *方法)。
修改强> 在查看上面的链接控制面板后,我注意到它会检查PHP版本以及是否存在opcache_reset。
似乎尝试accelerator_*而不是opcache_*
函数。
我建议尝试使用该脚本来查看它是否适合您,然后我们可以向后查看您的服务器上安装的内容以及使用的方法。
答案 2 :(得分:0)
如果您的服务器上有WordPress站点,只需安装插件OPcache Dashboard即可。它为您提供交互式控制,并在自动运行Wordpress升级过程后触发缓存重置。
关于运行同一CMS的多个实例的服务器需要注意的另一件事是,如果它们运行不同版本的CMS或插件,会发生什么。这会发生,例如如果你错开主要版本的升级。在这种情况下,您的PHP.ini需要包含
opcache.use_cwd=1
因此,相同的文件名将根据它所在的目录单独编译。如果您确定所有站点的CMS版本相同,则可以将其设置为0并获得效率提升,因为OpCache将编译每个例程一次然后为您服务器上的所有CMS实例提供服务。这也是内存效率的提升,如果您的WP场上有大量实例,这将非常重要。