PHP8 开启OPcache后代码处理配置

      发布在:前端技术      评论:0 条评论
<p><span style="text-wrap-mode: nowrap;">根据环境选择策略:</span></p><p><span style="text-wrap-mode: nowrap;"><br></span></p><p><span style="text-wrap-mode: nowrap;">### 方案 A:开发环境(零延迟)</span></p><p><span style="text-wrap-mode: nowrap;"><br></span></p><p><span style="text-wrap-mode: nowrap;">```ini</span></p><p><span style="text-wrap-mode: nowrap;">; php.ini 或 .user.ini</span></p><p><span style="text-wrap-mode: nowrap;">opcache.enable=1</span></p><p><span style="text-wrap-mode: nowrap;">opcache.validate_timestamps=1</span></p><p><span style="text-wrap-mode: nowrap;">opcache.revalidate_freq=0&nbsp; ; 每次请求都检查,牺牲性能换实时性</span></p><p><span style="text-wrap-mode: nowrap;">```</span></p><p><span style="text-wrap-mode: nowrap;"><br></span></p><p><span style="text-wrap-mode: nowrap;">### 方案 B:生产环境(平衡策略)</span></p><p><span style="text-wrap-mode: nowrap;"><br></span></p><p><span style="text-wrap-mode: nowrap;">保持 `revalidate_freq=60` 以获取性能,但在**部署脚本**中主动刷新:</span></p><p><span style="text-wrap-mode: nowrap;"><br></span></p><p><span style="text-wrap-mode: nowrap;">```bash</span></p><p><span style="text-wrap-mode: nowrap;"># 部署后执行</span></p><p><span style="text-wrap-mode: nowrap;">php -r "opcache_reset();"</span></p><p><span style="text-wrap-mode: nowrap;"># 或优雅地仅失效特定文件</span></p><p><span style="text-wrap-mode: nowrap;">php -r "opcache_invalidate('/path/to/config.php', true);"</span></p><p><span style="text-wrap-mode: nowrap;">```</span></p><p><span style="text-wrap-mode: nowrap;"><br></span></p><p><span style="text-wrap-mode: nowrap;">### 方案 C:安装程序(代码层强制刷新)</span></p><p><span style="text-wrap-mode: nowrap;"><br></span></p><p><span style="text-wrap-mode: nowrap;">最优雅的做法:不修改服务器配置,在安装代码中处理:</span></p><p><span style="text-wrap-mode: nowrap;"><br></span></p><p><span style="text-wrap-mode: nowrap;">```php</span></p><p><span style="text-wrap-mode: nowrap;">/**</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp;* 安全写入配置并强制 OPcache 失效</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp;*/</span></p><p><span style="text-wrap-mode: nowrap;">function install_write_config(string $file, array $config): bool</span></p><p><span style="text-wrap-mode: nowrap;">{</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; $content = "&lt;?php\nreturn " . var_export($config, true) . ";\n";</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp;&nbsp;</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; // 原子写入</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; $result = file_put_contents($file, $content, LOCK_EX);</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp;&nbsp;</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; if (!$result) return false;</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp;&nbsp;</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; // 关键:立即让 OPcache 失效该文件</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; if (function_exists('opcache_invalidate')) {</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; &nbsp; &nbsp; @opcache_invalidate($file, true); // true 表示强制刷新</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; }</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp;&nbsp;</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; // ThinkPHP 8 附加:清除运行时配置缓存</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; $runtimeConfig = root_path() . 'runtime/config.php';</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; if (file_exists($runtimeConfig)) {</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; &nbsp; &nbsp; unlink($runtimeConfig);</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; }</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp;&nbsp;</span></p><p><span style="text-wrap-mode: nowrap;">&nbsp; &nbsp; return true;</span></p><p><span style="text-wrap-mode: nowrap;">}</span></p><p><span style="text-wrap-mode: nowrap;">```</span></p><p><br></p>
相关文章
热门推荐