Linux下VS Code终端执行PHP/Composer命令时出现扩展加载错误
PHP 8.1启动扩展加载错误解决指南
问题描述
卸载PHP 7后安装PHP 8.1,执行composer update、php --version、laravel --version等命令时,弹出两类错误:
- 无法找到指定的动态扩展库文件
- 部分模块提示已重复加载
具体错误信息:
PHP Warning: PHP Startup: Unable to load dynamic library 'bz2' (tried: /usr/lib/php/20210902/bz2 (/usr/lib/php/20210902/bz2: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/bz2.so (/usr/lib/php/20210902/bz2.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'curl' (tried: /usr/lib/php/20210902/curl (/usr/lib/php/20210902/curl: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/curl.so (/usr/lib/php/20210902/curl.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'gd' (tried: /usr/lib/php/20210902/gd (/usr/lib/php/20210902/gd: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/gd.so (/usr/lib/php/20210902/gd.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'mbstring' (tried: /usr/lib/php/20210902/mbstring (/usr/lib/php/20210902/mbstring: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/mbstring.so (/usr/lib/php/20210902/mbstring.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20210902/mysqli (/usr/lib/php/20210902/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/mysqli.so (/usr/lib/php/20210902/mysqli.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20210902/pdo_mysql (/usr/lib/php/20210902/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/pdo_mysql.so (/usr/lib/php/20210902/pdo_mysql.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20210902/pdo_sqlite (/usr/lib/php/20210902/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/pdo_sqlite.so (/usr/lib/php/20210902/pdo_sqlite.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'xsl' (tried: /usr/lib/php/20210902/xsl (/usr/lib/php/20210902/xsl: cannot open shared object file: No such file or directory), /usr/lib/php/20210902/xsl.so (/usr/lib/php/20210902/xsl.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 PHP Warning: Module "exif" is already loaded in Unknown on line 0 PHP Warning: Module "FFI" is already loaded in Unknown on line 0 PHP Warning: Module "fileinfo" is already loaded in Unknown on line 0 PHP Warning: Module "ftp" is already loaded in Unknown on line 0 PHP Warning: Module "gettext" is already loaded in Unknown on line 0
已尝试操作:取消php.ini相关项注释、重装Composer,问题未解决。
解决步骤
1. 安装缺失的PHP扩展
错误提示里找不到的扩展都是PHP 8.1的官方扩展包,直接通过包管理器安装:
- Debian/Ubuntu系统:
sudo apt install php8.1-bz2 php8.1-curl php8.1-gd php8.1-mbstring php8.1-mysqli php8.1-pdo-mysql php8.1-pdo-sqlite php8.1-xsl
- RHEL/CentOS/Rocky系统:
sudo dnf install php8.1-bz2 php8.1-curl php8.1-gd php8.1-mbstring php8.1-mysqli php8.1-pdo-mysql php8.1-pdo-sqlite php8.1-xsl
2. 修复模块重复加载问题
模块重复加载是因为配置文件里多次启用了同一模块:
- 先找到PHP当前使用的配置文件路径:
php --ini
重点看Loaded Configuration File(主php.ini)和Additional .ini files parsed(额外配置目录,通常是/etc/php/8.1/conf.d/)。
- 打开主php.ini,搜索
extension=exif、extension=FFI等重复提示的模块,确保每个模块只有一行启用配置,多余的注释掉或删除。 - 检查额外配置目录下的子文件,比如
10-exif.ini这类文件,是否和主php.ini重复启用了同一模块,删除重复的配置行。
3. 验证修复效果
执行以下命令查看已加载的扩展,确认没有启动警告:
php -m
再测试php --version、composer --version,看错误是否消失。
4. 关联Composer到正确的PHP版本(可选)
如果Composer还是调用旧版本PHP,强制指定PHP 8.1路径:
composer config -g php /usr/bin/php8.1
内容的提问来源于stack exchange,提问作者Camata Crespo Camila
相关产品推荐
相关产品推荐

