前言
服务器上开了 OPcache 也设置了 opcache.revalidate_freq
这个参数,这样不至于频繁的检测 PHP 脚本是否更新,但又出现了新的问题,比如更新了代码不会及时刷新 PHP 缓存。
自己构建的项目还好,但是 WordPress 的代码缓存不能自动刷新就会出现很多问题,比如更新插件、主题,WordPress Core 自动更新,就会导致更新完之后依然在提醒你更新,这很不优雅。于是我简单的造了一个小插件 WordPress OPcache Hook.
原理
经过对自动更新程序那部分的代码进行了分析,最后 hook 了 upgrader_process_complete
这个函数,然后每次自动更新完成后都会刷新OPcache 的缓存。
目前只有自动刷新缓存这一个功能,如果有建议可以回复或者发 issue 惹!
代码库
<?php
/*
Plugin Name: WordPress OPcache Hook
Plugin URI: https://github.com/0xJacky/WordPress-OPcache-Hook
Description: WordPress 自动刷新 Opcache
Version: 0.1
Author: Jacky
Author URI: https://jackyu.cn/
License: GPL2
*/
function opcache() {
return function_exists( 'opcache_reset' )
&& ini_get( 'opcache.enable' );
}
function opcache_hook() {
if ( ! opcache() ) {
return;
}
$files = opcache_get_status();
if ( ! empty( $files['scripts'] ) ) {
foreach ( $files['scripts'] as $file => $value ) {
opcache_invalidate( $file );
}
}
}
// recheck opcache after updated core, plugins and themes.
add_filter( 'upgrader_process_complete', 'opcache_hook' );
已开源至 Github: https://github.com/0xJacky/WordPress-OPcache-Hook
文章最后修订于 2020年9月6日
评论 (0)