ThinkPHP 如何开启 OpCache 加速脚本执行?

文章导读
ThinkPHP 开启 OpCache 加速的核心是在 Web 环境对应的 php.ini 中启用 zend_extension 扩展并设置 opcache.enable=1,随后重启 PHP-FPM 或 Apache 服务。此操作适用于 PHP 5.5 及以上版本,生产环境需特别注意关闭时间戳校验以避免性能抖动。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

ThinkPHP 开启 OpCache 加速的核心是在 Web 环境对应的 php.ini 中启用 zend_extension 扩展并设置 opcache.enable=1,随后重启 PHP-FPM 或 Apache 服务。此操作适用于 PHP 5.5 及以上版本,生产环境需特别注意关闭时间戳校验以避免性能抖动。

先说结论:ThinkPHP 性能优化必须确保 OpCache 在 Web SAPI 下真实加载,仅 CLI 生效无效。

  • 适合:PHP 5.5+ 环境,尤其是 ThinkPHP 5/6/8 等框架项目。
  • 先准备:确认 Web 环境加载的 php.ini 绝对路径,备份原配置文件。
  • 验收:通过 phpinfo() 查看 Opcode Caching 状态为 Enabled,且命中率持续增长。

命令速用版

以下命令用于快速定位配置文件路径及重启服务,需在服务器终端执行:

# 查看 Web 环境加载的 php.ini 路径(需配合浏览器 phpinfo 确认)
php `--ini`

# 重启 PHP-FPM 服务(根据实际版本调整服务名)
sudo systemctl restart php-fpm
sudo systemctl restart php84-fpm

# 重启 Apache 服务
sudo systemctl restart httpd

为什么会这样

OpCache 通过将 PHP 脚本编译后的字节码缓存到共享内存中,避免每次请求重复解析和编译。

ThinkPHP 框架包含大量 vendor 依赖文件及自动加载逻辑,若未开启 OpCache,每次请求均需重新读取和编译这些文件,导致 CPU 占用高且响应缓慢。开启后,首次请求编译后的字节码被保留,后续请求直接执行缓存代码,从而提升执行效率。

分步处理

按以下步骤在服务器环境中配置 OpCache,确保配置写入 Web SAPI 使用的 php.ini 文件:

1. 确认 Web 环境配置文件路径

在 ThinkPHP 项目 public 目录下新建 info.php 文件,内容为<?php phpinfo(); ?>。通过浏览器访问该文件,搜索 Loaded Configuration File,记录其指向的 php.ini 绝对路径。若 CLI 模式 php -m 显示 opcache 但网页中无 Opcode Caching 区块,说明 CLI 与 Web 使用了不同配置文件,必须修改 Web 所用的文件。

2. 启用 OpCache 扩展

使用文本编辑器打开上一步确认的 php.ini 文件。查找;zend_extension=opcache.so(Linux) 或;zend_extension=php_opcache.dll(Windows),删除行首分号取消注释。确保该行路径正确,Linux 常见路径为/usr/lib/php/*/opcache.so,宝塔用户通常为/www/server/php/*/lib/php/extensions/*/opcache.so。在该行下方添加 opcache.enable=1。

3. 调整关键参数

在 [opcache] 段落中根据项目规模调整参数。建议设置 opcache.memory_consumption=128 或 256(单位 MB),中大型项目建议 256。设置 opcache.max_accelerated_files=20000,若使用多模块或大量注解路由可设为 65536。生产环境建议设置 opcache.validate_timestamps=0 和 opcache.revalidate_freq=0 以关闭时间戳校验。

4. 重启服务

保存文件后执行 sudo systemctl restart php-fpm 或重启 Web 服务器。仅重启 Nginx 不生效,必须重启 PHP 进程管理器。

怎么验证是否生效

配置完成后需通过以下方法验证 OpCache 是否真实工作:

1. 检查 phpinfo 状态

刷新浏览器中的 info.php 页面,搜索 Opcode Caching,状态必须显示 Enabled,且 opcache.enable 值为 On。若显示 Disabled 或无此区块,说明扩展未加载成功。

2. 验证函数可用性

ThinkPHP 如何开启 OpCache 加速脚本执行?

在代码中调用 opcache_get_status() 函数,若报错 Call to undefined function,说明 zend_extension 未成功加载。若返回数组且 opcache_enabled 为 true,说明已启用。

3. 观察命中率

查看 opcache_get_status() 返回数据中的 opcache_statistics.hits 字段,随着请求增加,该数值应持续增长。若命中率长期低于 40%,可能缓存容量不足导致频繁驱逐。

常见坑

配置过程中容易遇到以下问题,需仔细排查:

1. CLI 与 Web 配置不一致

php -m 显示 opcache 存在不代表 Web 环境已启用。必须通过 Web 请求验证,放弃 CLI 下看到的路径,只操作 phpinfo() 记下的路径。

2. 扩展指令错误

必须使用 zend_extension=opcache.so,使用 extension=opcache.so 会导致加载失败。Windows 下须用绝对路径指定 dll 文件,路径错误将导致 OpCache 静默失效。

3. 代码更新不生效

生产环境关闭 validate_timestamps 后,代码更新需手动清除缓存。可调用 opcache_reset() 或在部署流程中集成清除缓存命令,否则页面可能白屏或报 Class not found。

常见问题

ThinkPHP 命令行命令需要开启 OpCache 吗?

需要,ThinkPHP 的 php think 命令依赖 CLI 模式缓存。

建议在 php.ini 中设置 opcache.enable_cli=1,否则命令行操作仍会重复编译脚本。

开启 OpCache 后页面响应能提升多少?

公开资料中没有看到可靠的量化数据,具体提升取决于项目规模和并发量。

通常页面加载和脚本执行速度会有明显改善,但不能解决所有性能问题,仍需结合其他工具优化。

内存设置多大合适?

默认配置 64MB 极易触发缓存驱逐,建议至少设为 128MB。

中大型项目建议设为 256MB,可通过观察 used_memory 是否持续增长来调整。

参考来源

  • ThinkPHP 如何开启 OPcache 加速_OPcache 加速配置指南【性能】
  • ThinkPHP 如何设置 OPcache 加速_OPcache 加速配置【教程】
  • 终极性能调优:thinkphp 使用 OPcache 加速【服务器优化】
  • ThinkPHP 跨平台使用:Linux 生产环境下开启 OPcache 提升运行效率【说明】
  • ThinkPHP5 如何配置 OPcache 提升性能_ThinkPHP5 配置 OPcache 性能优化【教程】
  • Opcache 加速怎么开启_PHP 高并发性能优化技巧【方法】
  • PHP 本地环境怎么启用 OpCache 加速_PHP 本地环境启 OpCache 加速途径【启用】
  • 如何开启 PHP 环境的 OPcache 加速 PHP 代码执行性能优化技巧
  • ThinkPHP Linux 如何进行代码优化
  • [PHP] - 性能加速 - 开启 opcache