贝利信息

thinkphp热更新支持吗_看thinkphp开发时重载效果【重载】

日期:2026-01-14 00:00 / 作者:絕刀狂花
ThinkPHP 本身不内置热更新,但通过 think-swoole 可实现文件监听+平滑 reload:修改 app/ 等目录下 PHP 文件后,inotify 检测变更并发送 SIGUSR1 信号触发 Swoole $server->reload() 仅重启 Worker 进程,不中断服务。

ThinkPHP 本身不内置热更新(Hot Reload)能力,但通过生态扩展(如 think-swoole)或搭配 Swoole 运行时,可实现开发阶段的「代码修改后自动重载 Worker 进程」效果——这常被开发者称为“热更新”,实际是文件监听 + 平滑 reload,不是 PHP 层面的字节码热替换。


think-swoole 的 hot_update 是怎么工作的?

它依赖 Swoole 的 $server->reload() 接口,只重启 Worker 进程,不重启 Master,因此 HTTP 服务几乎不中断。

inotifywait -m -r -e modify,create,delete ./app --format '%w%f' | while read file; do
  [[ $file == *.php ]] && kill -USR1 $(cat runtime/swoole.pid) 2>/dev/null
done

为什么改了代码却没 reload?常见卡点

不是所有修改都会触发重载,尤其容易忽略以下几点:


PHP-FPM 环境下能用 think-swoole 热更新吗?

不能。这是根本性不兼容:


上线环境要不要开 hot_update?

不要。生产环境应严格禁用:

真正需要的不是“自动 reload”,而是「可控、可回滚、可观测」的发布机制——比如用 Docker 镜像 + 标签版本 + Kubernetes rolling update。

Swoole 的 reload 很快,但快不等于安全;开发图省事可以开,上线前务必关掉 hot_update.enable