php 8.0兼容swoole 4.8.x或5.0.x,php 8.1必须用5.0+;4.8.13是最后支持php 7.4的版本,在8.1下硬装4.8.11会导致segmentation fault;phpize与php-config路径须严格匹配对应php版本,且--enable-openssl和--enable-http2在8.1下为必需参数。

PHP 8.0 和 PHP 8.1 的 Swoole 版本兼容性必须分开看
PHP 8.0 可用 Swoole 4.8.x 或 5.0.x,但 PHP 8.1 必须用 Swoole 5.0+;Swoole 4.8.13 是最后一个支持 PHP 7.4 的版本,在 PHP 8.1 上编译会直接失败或运行时报 Class not found。如果你在 PHP 8.1 环境下硬装 swoole-4.8.11,php --ri swoole 可能显示成功,但 new Swoole\Http\Server 一执行就 Segmentation fault。
phpize 和 php-config 路径不能混用
宝塔里 PHP 8.0 和 PHP 8.1 是两套独立安装,路径数字不同:
- PHP 8.0 对应
/www/server/php/80/bin/phpize和/www/server/php/80/bin/php-config - PHP 8.1 对应
/www/server/php/81/bin/phpize和/www/server/php/81/bin/php-config
写错一个数字(比如在 PHP 8.1 环境下用了 /www/server/php/80/bin/phpize),make install 会把 swoole.so 装进错误目录,后续加 extension=swoole.so 也无效。
openssl 和 http2 参数在 PHP 8.1 下更敏感
PHP 8.1 的 Swoole 5.0+ 默认启用更多协程特性,--enable-openssl 和 --enable-http2 不再是可选项:
- 不加
--enable-openssl,Swoole\Http\Server启动 HTTPS 时会报Call to undefined function swoole_http_server()或连接被拒绝 - 不加
--enable-http2,WebSocket over HTTPS、gRPC 等协议无法协商,客户端握手直接断开 - PHP 8.0 下漏掉参数可能“看似能跑”,PHP 8.1 下更容易在首次请求时崩溃
CLI 和 FPM 的 php.ini 必须分别处理
PHP 8.0 和 PHP 8.1 各自拥有两套配置文件:
- CLI 加载:
/www/server/php/80/bin/php.ini(8.1 则是/www/server/php/81/bin/php.ini) - FPM 加载:
/www/server/php/80/etc/php.ini(8.1 则是/www/server/php/81/etc/php.ini)
Web 能用但命令行报错(比如 php artisan swoole:http start 失败),90% 是只改了 FPM 配置,忘了 CLI 的 php.ini。验证时别只跑 php -m | grep swoole,得用对应版本的完整路径:/www/server/php/81/bin/php --ri swoole。
最常被忽略的点:PHP 8.1 的 no-debug-non-zts- 后缀和 PHP 8.0 不同,扩展目录名可能是 no-debug-non-zts-20210902 而不是 20200930,配 extension_dir 或写死路径时容易出错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











