php --ri swoole 的输出可以看到
参考资料
- Octane 的 Worker 进程未能正确初始化,导致处理请求的核心对象是空的,而这个异常又被外层的登录或安全拦截机制捕获,显示成了登录页
- Fresns 的 Swoole 配置
- 报错很明确:8000 端口已被占用。先排查是谁占用了,再决定是杀掉还是换端口。
- Laravel Octane 与 Swoole 扩展的版本不兼容
- Swoole 6.2.2 扩展正在为 PHP 8.3 编译的过程
- Fresns 社区中用于解决 502 Bad Gateway 错误
- Trying to access array offset on null 是 PHP 8.0+ 的警告
- 占用 8000 的正是你之前启动的 octane 进程
php --ri swoole 的输出可以看到
编译成功了!🎉
从 php --ri swoole 的输出可以看到:
关键成功标志
| 项目 | 值 | 说明 |
|---|---|---|
| Swoole => enabled | ✅ | 扩展已加载 |
| Version => 6.2.2 | ✅ | 版本正确 |
| Built => Oct 2 2026 09:12:20 | ✅ | 编译时间,就是刚才那次编译 |
| coroutine => enabled with boost asm context | ✅ | 协程已启用 |
| openssl => OpenSSL 3.0.13 | ✅ | SSL 支持正常 |
| http2 => enabled | ✅ | HTTP/2 支持 |
| json => enabled | ✅ | JSON 支持 |
| zlib => 1.3 | ✅ | 压缩支持 |
几点说明
编译完全成功,之前日志里看到的
g++ ... worker.cc、reactor_thread.cc等一系列编译命令最终都链接成功了,生成了swoole.so并被 PHP 8.3 正确加载。boost asm context 是 Swoole 6.x 默认使用的协程上下文切换实现(汇编级别,性能好),说明编译时检测到了可用的 asm 上下文支持,这是正常的。
brotli => E16781312/D16781312 显示的是一个编译期常量(brotli 版本号),不是错误,说明 brotli 压缩也编进去了。
所有 directive 都是默认值,没有异常配置。
swoole.use_shortname => On表示可以使用Swoole\Coroutine的短别名(如Co\run()),如果你想禁用短别名可以改 php.ini。
下一步建议
现在 Swoole 已经装好了,你可以:
验证协程是否可用:
php -r 'Co\run(function(){ echo "coroutine works\n"; });'如果你在用 Fresns(从你的路径
/www/wwwroot/www.madama.cn/fresns看像是),确保 Fresns 的 Swoole 相关配置正确,比如队列、WebSocket 等。检查 php.ini 是否持久化了 extension,避免重启 PHP 后丢失:
php --ini | grep swoole
确认
swoole.so已经写入某个 php.ini 里。重启 PHP-FPM(如果还没重启)让配置生效:
/etc/init.d/php-fpm-83 restart # 或宝塔面板里重启 PHP 8.3
需要我帮你看 Fresns 的 Swoole 配置,或者测试协程功能吗?
时间:2026-10-02 09:47:45
来源:https://fresns.ciilii.com/
