Hyperf启动失败主因是环境配置未就绪,需确认PHP≥8.0、Swoole扩展启用且coroutine支持、必要扩展齐全、vendor完整、端口未被占用、防火墙放行、监听地址匹配,并建议用server:watch替代手动启停。

能直接启动,但大概率会卡在端口、权限或环境配置上——不是命令写错了,而是 php bin/hyperf.php start 这条命令对运行时状态很敏感。
检查 PHP 和 Swoole 环境是否真就绪
Hyperf 启动失败,80% 是环境没过第一关。别只看 php -v 显示版本够,还要确认:
-
swoole扩展必须启用,且swoole.use_shortname = Off已写入php.ini(否则启动直接报错Call to undefined function swoole_async_readfile()) - PHP 版本 ≥ 8.0(Hyperf v3.x 强制要求),
php -m | grep swoole要有输出,且coroutine => enabled -
pcntl、mbstring、sockets这几个扩展缺一不可,漏一个都可能在启动中途静默失败
执行启动命令前先确认项目结构完整
很多人从 composer create-project 创建完就急着 start,结果报 Class 'Hyperf\Contract\StdoutLoggerInterface' not found —— 实际是 vendor/ 没装全或自动加载失效:
- 进项目根目录,运行
ls -la vendor/,确认目录存在且非空;若缺失,补跑composer install --no-dev - 检查
bin/hyperf.php是否可执行(Linux/macOS 下必要时加chmod +x bin/hyperf.php) - Windows 下路径含中文或空格?建议项目放在纯英文路径下,如
D:\hyperf-app,否则composer或swoole加载会出问题
启动后访问不通的常见原因和快速验证法
终端显示 HTTP server listening at http://0.0.0.0:9501 不代表你能访问到,重点排查:
- 端口被占:Windows 上用
netstat -ano | findstr :9501查 PID,再taskkill /PID xxx /F;Linux/macOS 用lsof -i :9501或kill -9 $(lsof -t -i :9501) - 防火墙拦截:Linux 上确认
ufw status或firewalld未阻断 9501;Windows 防火墙要放行该端口或程序 - 监听地址不对:默认是
0.0.0.0:9501,但有些开发机绑定了127.0.0.1,浏览器必须用http://127.0.0.1:9501,不能用localhost(DNS 解析可能走 IPv6)
开发阶段别反复 stop/start,用 watcher 替代
每次改个路由都要 Ctrl+C 再敲一遍 php bin/hyperf.php start 是反效率的。热重载不是“锦上添花”,而是开发期刚需:
- 装组件:
composer require hyperf/watcher --dev - 生成配置:
php bin/hyperf.php vendor:publish hyperf/watcher(会生成.watcher.php) - 启动监听:
php bin/hyperf.php server:watch,改完代码保存即重启,比手动快 5 秒以上 - 注意:
server:watch启动后,start命令就不再生效,二者互斥
真正容易被忽略的是 runtime/ 目录权限和 .env 中的 APP_ENV 设置——前者导致日志写不进、进程起不来,后者若仍为 dev 且没关 APP_DEBUG,上线部署时可能暴露敏感路径或堆栈信息。


















