Webman 的命令不是“全量热更新”,它只对特定路径、特定加载方式的代码生效;改了控制器或模型却没反应,大概率是加载机制没对上,而不是命令没跑。
哪些代码 reload 后能生效?
Webman 的
本质是向 Worker 进程发送
,触发 Worker 逐个退出并重启——但仅限于「运行时动态加载」的 PHP 文件。这类文件必须满足两个条件:在
、
或类似回调中通过
/
显式引入,且不能被 Composer 自动加载器提前注册。
这类由路由自动加载的类 ——
reload 无效
(Composer autoloader 已缓存类定义)
被
一次性
——
reload 无效
(初始化阶段就载入内存)
在
中
——
reload 有效
(每次请求都重新读取)
为什么禁用 OPcache 才能看到 reload 效果?
CLI 模式下若开启
(常见于 Docker 镜像或本地开发环境),PHP 会把
的文件也编译进 OPcache。即使 reload 触发了新 Worker 启动,只要文件路径没变,OPcache 就直接返回旧字节码。
临时验证:执行
长期方案:在
中设
(开发环境),或彻底关闭
注意:
对 OPcache 无效,别白费力气
Monitor 进程自动 reload 是真平滑吗?
Webman 的 Monitor 进程(默认监听
和
目录)检测到变更时,调用的是
,等效于你手动按
。它不走
流程,而是强制终止所有 Worker:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
当前正在处理的 HTTP 请求可能被中断(压测中约 0.01% 失败率)
数据库连接、Redis 订阅等未优雅关闭,可能留下脏状态
它不会等待 Worker 完成任务,和
的语义完全不同
仅在调试模式(启动不加
)下启用,生产环境默认关闭
真正需要 restart 的配置有哪些?
Webman 明确不支持 reload 的配置项,改了就必须
:
(端口、SSL、进程数等)
(自定义进程定义,如定时任务入口)
新增或删除
中的预加载逻辑
修改
并执行
后,类映射已变更
这些改动直接影响主进程行为或 Worker 初始化流程,reload 无法重建上下文。最容易忽略的是:哪怕只是给
里加了一行注释,也得 restart。
reloadphp start.php reloadSIGUSR1onMessageonRequestrequireincludeapp/controller/Api.phpapp/logic/OrderSync.phponWorkerStartrequireruntime/tmp/handler.phponRequestrequire __DIR__ . '/tmp/handler.php'opcache.enable_cli=1requirephp -d opcache.enable_cli=0 start.php reloadphp.iniopcache.revalidate_freq=0opcache.enable_cliclearstatcache()app/config/posix_kill($pid, SIGINT)Ctrl+CSIGUSR1reload-dphp start.php restartconfig/server.phpconfig/process.phpconfig/bootstrap.phpcomposer.jsoncomposer dump-autoloadconfig/process.php