记录一下,之前也没有这个问题,更新系统后突然出现的。

问题

PHP Warning: PHP Startup: Unable to load dynamic library ‘swoole.so’

1
2
root@VM-0-7-ubuntu:~# php -m
PHP Warning: PHP Startup: Unable to load dynamic library 'swoole.so' (tried: /usr/lib/php/20210902/swoole.so (/usr/lib/php/20210902/swoole.so: undefined symbol: curl_multi_ce), /usr/lib/php/20210902/swoole.so.so (/usr/lib/php/20210902/swoole.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

原因

php.ini 中配置扩展会优先于 conf.d 目录下配置文件加载,而swoole扩展依赖curl和socket扩展,因此需要在其后加载,因此不能在 php.ini 中添加 extension=swoole.so ,而是在 conf.d 目录中添加。

解决

在PHP的模块目录添加 swoole.ini

1
vim /etc/php/8.1/mods-available/swoole.ini

添加如下内容:

1
2
3
;configuration for php swoole module
;priority=20
extension=swoole.so

最后运行以下命令:

1
sudo phpenmod swoole

更简单的方法

不要通过 pecl install swoole 这个方式,直接安装php扩展就行: apt install php8.x-swoole (适用php8.1 和 8.2)。