应切换国内镜像源或手动下载编译:执行pecl config-set channel_mirror https://mirrors.tuna.tsinghua.edu.cn/pecl/,或直接下载Swoole包(如https://pecl.php.net/get/swoole-5.0.3.tgz),解压后用对应PHP版本的phpize和php-config编译安装,并确保CLI与FPM的php.ini均正确添加extension=swoole.so且extension_dir路径匹配。

pecl install swoole 网络超时失败怎么办
直接执行 pecl install swoole 卡在下载阶段(比如卡在 Downloading... 或报 Connection timed out),基本是网络连不上 pecl.php.net —— 这不是你服务器有问题,而是国内访问该域名常被 DNS 污染或防火墙拦截。
- 先确认是否真超时:运行
ping pecl.php.net或curl -v https://pecl.php.net,如果无响应或超时,就是网络问题 - 别反复重试,
pecl默认不走代理,也不支持设置超时重试次数 - 临时换镜像源最有效:执行
pecl config-set php_dir /www/server/php/81/bin(按你实际 PHP 路径调整)后,再运行pecl config-set preferred_state stable,然后用国内镜像地址手动下载包
手动下载 Swoole 包绕过 pecl 网络环节
跳过 pecl install 的自动下载步骤,自己下好 tar.gz 包再本地编译,全程不依赖外网。
- 去官方镜像站下载对应版本:
https://pecl.php.net/get/swoole-5.0.3.tgz(替换为你要的版本,如 4.11.1、5.0.3),推荐用清华、阿里云或华为云镜像(搜“pecl php net 镜像”可得) - 上传到服务器任意目录(如
/tmp),解压:tar -zxf swoole-5.0.3.tgz - 进源码目录,用对应 PHP 版本的
phpize初始化:/www/server/php/81/bin/phpize - 配置时指定
php-config路径:./configure --with-php-config=/www/server/php/81/bin/php-config --enable-openssl - 编译安装:
make -j$(nproc) && sudo make install,成功后会输出swoole.so的存放路径
装完 extension=swoole.so 不生效的常见错因
即使 swoole.so 文件已生成,php -m | grep swoole 仍没输出,大概率是 PHP 加载了错误的配置文件。
- CLI 和 FPM 用的是两套
php.ini:php --ini查 CLI 路径,php-fpm -i | grep "Loaded Configuration File"查 FPM 路径,两个都得加extension=swoole.so - 别写绝对路径:
extension="/www/server/php/81/lib/php/extensions/no-debug-non-zts-20220915/swoole.so"容易出错;直接写extension=swoole.so更稳(前提是extension_dir配置正确) - 检查
extension_dir是否指向对的目录:运行/www/server/php/81/bin/php -r "print_r(get_cfg_var('extension_dir'));",输出路径要和swoole.so实际位置一致 - 重启服务必须分清:改 CLI 配置只需
php命令能识别;改 FPM 配置必须service php-fpm-81 restart或宝塔界面点「重启」
内网或无外网环境怎么装 Swoole
完全断网的服务器,不能靠 pecl 或 git clone,只能靠离线包 + 手动编译。
立即学习“PHP免费学习笔记(深入)”;
- 提前在有网机器上下载完整依赖包:
gcc、make、autoconf、openssl-devel(CentOS)或libssl-dev(Ubuntu)的 rpm/deb 包,连同 Swoole 源码包一并拷贝过去 - 编译前先装依赖:
rpm -ivh *.rpm或dpkg -i *.deb,确保phpize能正常运行 - 关键一步:确认
php-config可执行且路径正确,否则./configure会报Cannot find php-config - 若服务器禁用了
exec、shell_exec等函数,Swoole 启动时可能报Module initialization failed,需检查disable_functions配置项
phpinfo() 里有模块但 php -m 没输出——这种错几乎都出在配置文件路径或 extension_dir 指向偏差上。



















