PHP Warning: PHP Startup: Unable to load dynamic library ‘zip.so’ (tried: /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/zip.so (/www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/zip.so: cannot open shared object file: No such file or directory), /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/zip.so.so (/www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/zip.so.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 ‘/www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/fileinfo.so’ (tried: /www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/fileinfo.so (/www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/fileinfo.so: undefined symbol: zend_string_init_interned), /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718//www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/fileinfo.so.so (/www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718//www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/fileinfo.so.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 ‘ixed.8.0.lin’ (tried: /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/ixed.8.0.lin (/www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/ixed.8.0.lin: cannot open shared object file: No such file or directory), /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/ixed.8.0.lin.so (/www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/ixed.8.0.lin.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 ‘/www/server/
这是个很麻烦的问题,我们字面理解是 未安装扩展
实际他的麻烦在于我们安装了扩展,我们一步步看
针对特别是 zip.so
和 fileinfo.so
扩展未能正确加载。以下是完整的解决方案:
问题分析
- 混合的 PHP 版本路径:系统同时引用了 PHP 7.2 和 PHP 8.0 的扩展路径
- 缺失或损坏的扩展:
zip.so
和fileinfo.so
扩展文件缺失或版本不匹配 - 错误的扩展配置:PHP 配置文件错误地引用了不存在的扩展
解决方案
1. 确认当前使用的 PHP 版本
php -v
2. 根据您实际使用的 PHP 版本选择解决方案
如果是 PHP 7.2(路径显示为 /www/server/php/72/
)
# 安装 zip 扩展
sudo apt-get install php7.2-zip
# 检查 fileinfo 扩展
sudo apt-get install php7.2-fileinfo
# 重启 PHP 服务
sudo service php7.2-fpm restart
如果是 PHP 8.0(路径显示为 /www/server/php/80/
)
# 安装 zip 扩展
sudo apt-get install php8.0-zip
# 检查 fileinfo 扩展
sudo apt-get install php8.0-fileinfo
# 重启 PHP 服务
sudo service php8.0-fpm restart
3. 修复 PHP 配置文件
编辑 php.ini 文件(根据您的 PHP 版本):
# 对于 PHP 7.2
sudo nano /www/server/php/72/etc/php.ini
# 对于 PHP 8.0
sudo nano /www/server/php/80/etc/php.ini
查找并确保以下行正确(移除重复或错误的扩展引用):
extension=zip.so
extension=fileinfo.so
; 移除或注释掉以下错误行
; extension=ixed.8.0.lin
4. 检查扩展目录权限
sudo chmod -R 755 /www/server/php/72/lib/php/extensions/
sudo chmod -R 755 /www/server/php/80/lib/php/extensions/
5. 验证扩展是否加载
php -m | grep zip
php -m | grep fileinfo
6. 清除 PHP 缓存
sudo service php-fpm restart
# 或者特定版本
sudo service php7.2-fpm restart
sudo service php8.0-fpm restart
7. 针对 Laravel 项目的额外检查
确保项目使用的 PHP 版本与命令行一致:
# 检查项目使用的 PHP 版本
composer show -p | grep php
常见问题排查
- 如果找不到软件包:
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
- 如果扩展已安装但仍报错:
# 重新安装扩展
sudo apt-get install --reinstall php8.0-zip php8.0-fileinfo
- 如果使用宝塔面板:
-
- 通过宝塔面板的 PHP 管理界面安装缺失扩展
- 确保网站设置中选择了正确的 PHP 版本
完成验证
最后验证问题是否解决:
php artisan --version
在宝塔面板中安装 PHP 扩展非常简单,以下是详细步骤:
方法一:通过宝塔图形界面安装
1. 登录宝塔面板
访问您的宝塔面板地址(通常是 http://服务器IP:8888
)并登录
2. 进入 PHP 管理页面
- 在左侧导航栏点击「软件商店」
- 找到已安装的 PHP 版本(如 PHP-7.2、PHP-8.0 等)
- 点击对应 PHP 版本的「设置」按钮
3. 安装扩展
- 在 PHP 设置页面切换到「安装扩展」选项卡
- 找到「zip」和「fileinfo」扩展
- 分别点击对应的「安装」按钮
4. 重启 PHP 服务
安装完成后,点击「服务」选项卡中的「重启」按钮
方法二:通过 SSH 命令行安装(备用方案)
如果图形界面安装失败,可以通过 SSH 连接服务器执行:
# 进入宝塔的 PHP 扩展目录
cd /www/server/php/72/src/ext # 请将72替换为您实际使用的PHP版本
# 安装 zip 扩展
wget https://pecl.php.net/get/zip-1.20.0.tgz
tar -zxvf zip-1.20.0.tgz
cd zip-1.20.0
/www/server/php/72/bin/phpize # 替换为您的PHP路径
./configure --with-php-config=/www/server/php/72/bin/php-config
make && make install
# 安装 fileinfo 扩展
cd /www/server/php/72/src/ext
wget https://pecl.php.net/get/fileinfo-1.0.5.tgz
tar -zxvf fileinfo-1.0.5.tgz
cd fileinfo-1.0.5
/www/server/php/72/bin/phpize
./configure --with-php-config=/www/server/php/72/bin/php-config
make && make install
# 添加到 php.ini
echo "extension=zip.so" >> /www/server/php/72/etc/php.ini
echo "extension=fileinfo.so" >> /www/server/php/72/etc/php.ini
# 重启 PHP
/etc/init.d/php-fpm-72 restart # 根据实际版本调整
我们使用的是8.0
执行到最后 提示7.2已经输出了 在目录,并且成功安装完成。
但是 实际我们是安装了有扩展的,因此问题来了
验证安装是否成功
- 在宝塔面板创建 PHP 探针:
-
- 点击「网站」→ 选择您的网站 → 「设置」→ 「PHP探针」
- 查看「已编译扩展」列表中是否有 zip 和 fileinfo
- 或者通过 SSH 执行:
php -m | grep zip
php -m | grep fileinfo
常见问题解决
1. 安装按钮灰色不可点击
- 确保您使用的是 PHP 官方版本(非极速安装版)
- 尝试先卸载再重新安装 PHP
2. 安装失败提示依赖缺失
# 安装编译依赖
yum install -y libzip-devel # CentOS
# 或
apt-get install -y libzip-dev # Ubuntu/Debian
3. 安装后仍不生效
- 检查 php.ini 文件是否已添加扩展
- 确保重启了 PHP 服务
- 查看 PHP 错误日志:
/www/server/php/72/var/log/php-fpm.log
注意事项
- 操作前建议先备份网站数据
- 不同 PHP 版本可能需要不同版本的扩展
- 生产环境建议在低峰期进行操作
- 如果使用 Laravel,安装后需要清除缓存:
php artisan config:clear
php artisan cache:clear
然后其实都提示安装了,包括7.2也是安装的
您看到扩展已安装但仍报错的问题,主要是因为 PHP 配置文件错误地引用了不存在的扩展路径,以及存在 PHP 版本混淆的情况。以下是系统化的解决方案:
问题根源分析
- PHP 版本冲突:系统中同时存在 PHP 7.2 和 PHP 8.0 的配置混用
- 错误的扩展引用:
-
- 尝试加载不存在的
zip.so
(PHP 7.2) - 尝试加载不兼容的
fileinfo.so
(PHP 8.0) - 尝试加载不存在的
ixed.8.0.lin
(加密扩展)
- 尝试加载不存在的
- 路径配置错误:php.ini 中指定的扩展路径与实际路径不符
完整解决方案
第一步:确定当前使用的 PHP 版本
# 查看当前命令行使用的 PHP 版本
php -v
# 查看宝塔面板中网站使用的 PHP 版本
cat /www/server/panel/vhost/nginx/您的网站.conf | grep php-cgi
第二步:清理错误的扩展配置
- 编辑 php.ini 文件:
# 对于 PHP 7.2
nano /www/server/php/72/etc/php.ini
# 对于 PHP 8.0
nano /www/server/php/80/etc/php.ini
- 查找并删除或注释以下行:
; 移除或注释这些错误配置
; extension=zip.so
; extension=/www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/fileinfo.so
; extension=ixed.8.0.lin
第三步:正确安装和配置扩展
方法一:通过宝塔面板重新安装
- 进入宝塔面板 → 软件商店 → 找到对应的 PHP 版本
- 点击「设置」→「安装扩展」
- 先卸载 zip 和 fileinfo 扩展
- 然后重新安装这两个扩展
很神奇的就是
方法二:手动修复(如果面板操作无效)
# 对于 PHP 7.2
cd /www/server/php/72/src/ext
rm -rf zip-* fileinfo-*
wget https://pecl.php.net/get/zip-1.20.0.tgz
wget https://pecl.php.net/get/fileinfo-1.0.5.tgz
tar -zxvf zip-1.20.0.tgz
tar -zxvf fileinfo-1.0.5.tgz
cd zip-1.20.0
/www/server/php/72/bin/phpize
./configure --with-php-config=/www/server/php/72/bin/php-config
make && make install
cd ../fileinfo-1.0.5
/www/server/php/72/bin/phpize
./configure --with-php-config=/www/server/php/72/bin/php-config
make && make install
基本上 面板无效 我们手动来试试
只能手动
这回显示ok了
第四步:正确配置 php.ini
; 对于 PHP 7.2
extension=zip.so
extension=fileinfo.so
; 对于 PHP 8.0(如果需要)
; extension=zip
; extension=fileinfo
这回我们检查下 php. ini 配置文件
果然有2个 ,带引号的 是错误的。
然后我们针对php8.0版本再次重复一遍
第五步:修复环境变量和软链接
# 检查实际扩展目录
ls /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/
# 如果扩展存在但名称不对,创建软链接
cd /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/
ln -s zip.so.1.0 zip.so
ln -s fileinfo.so.1.0 fileinfo.so
# 更新动态链接库缓存
ldconfig
第六步:重启服务
# 重启 PHP 和 Web 服务器
/etc/init.d/php-fpm-72 restart
/etc/init.d/nginx restart
再次使用重启
这里又出现个 新问题 但是这个问题 在另一篇讲了
不过 重启 是生效了 至少 安装生效了
# 或者使用宝塔面板的重启功能
验证修复结果
php -m | grep -E 'zip|fileinfo'
php -i | grep extension_dir
php --ini
我们验证修复
能检测到 说明问题已经解决,接下来解决下一个问题
常见问题排查
- 如果仍然报错:
# 检查扩展文件是否存在
ls -la /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/zip.so
# 检查文件权限
chmod 755 /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/*.so
- 如果出现版本冲突:
# 确保命令行和网站使用相同PHP版本
update-alternatives --config php
- 如果使用宝塔多版本PHP:
-
- 在宝塔面板 → 网站 → 对应网站设置中
- 确保「PHP版本」选择正确
- 点击「切换版本」后重启所有服务
预防措施
- 在宝塔面板中操作 PHP 扩展时,确保:
-
- 先停止网站流量
- 备份当前配置
- 一次只修改一个扩展
- 定期检查 PHP 错误日志:
tail -f /www/server/php/72/var/log/php-fpm.log
通过以上步骤,您应该能彻底解决这个扩展加载错误问题。如果仍有问题,可能需要考虑完全卸载并重新安装特定 PHP 版本。
如果仍有问题,请提供以下信息以便进一步诊断:
php -v
的输出php --ini
的输出/www/server/php/72/etc/php.ini
中关于扩展加载的部分内容