解决 Laravel PHP Warning: PHP Startup: Unable to loa

PHP
解决 Laravel PHP Warning: PHP Startup: Unable to load dynamic library ‘zip.so’ 报错问题以及关于php版本混淆问题-深度详解优雅草卓伊凡

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.sofileinfo.so 扩展未能正确加载。以下是完整的解决方案:

问题分析

  1. 混合的 PHP 版本路径:系统同时引用了 PHP 7.2 和 PHP 8.0 的扩展路径
  2. 缺失或损坏的扩展zip.sofileinfo.so 扩展文件缺失或版本不匹配
  3. 错误的扩展配置:PHP 配置文件错误地引用了不存在的扩展

解决方案

picture.image

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

常见问题排查

  1. 如果找不到软件包
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
  1. 如果扩展已安装但仍报错
# 重新安装扩展
sudo apt-get install --reinstall php8.0-zip php8.0-fileinfo
  1. 如果使用宝塔面板
    • 通过宝塔面板的 PHP 管理界面安装缺失扩展
    • 确保网站设置中选择了正确的 PHP 版本

完成验证

最后验证问题是否解决:

php artisan --version
宝塔面板安装 PHP zip 和 fileinfo 扩展的完整指南

在宝塔面板中安装 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

picture.image

picture.image

执行到最后 提示7.2已经输出了 在目录,并且成功安装完成。

但是 实际我们是安装了有扩展的,因此问题来了

验证安装是否成功

  1. 在宝塔面板创建 PHP 探针:
    • 点击「网站」→ 选择您的网站 → 「设置」→ 「PHP探针」
    • 查看「已编译扩展」列表中是否有 zip 和 fileinfo
  1. 或者通过 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

注意事项

  1. 操作前建议先备份网站数据
  2. 不同 PHP 版本可能需要不同版本的扩展
  3. 生产环境建议在低峰期进行操作
  4. 如果使用 Laravel,安装后需要清除缓存:
php artisan config:clear
php artisan cache:clear

然后其实都提示安装了,包括7.2也是安装的

picture.image

解决宝塔面板 PHP 扩展加载错误问题

您看到扩展已安装但仍报错的问题,主要是因为 PHP 配置文件错误地引用了不存在的扩展路径,以及存在 PHP 版本混淆的情况。以下是系统化的解决方案:

问题根源分析

  1. PHP 版本冲突:系统中同时存在 PHP 7.2 和 PHP 8.0 的配置混用
  2. 错误的扩展引用
    • 尝试加载不存在的 zip.so (PHP 7.2)
    • 尝试加载不兼容的 fileinfo.so (PHP 8.0)
    • 尝试加载不存在的 ixed.8.0.lin (加密扩展)
  1. 路径配置错误:php.ini 中指定的扩展路径与实际路径不符

完整解决方案

第一步:确定当前使用的 PHP 版本

# 查看当前命令行使用的 PHP 版本
php -v

# 查看宝塔面板中网站使用的 PHP 版本
cat /www/server/panel/vhost/nginx/您的网站.conf | grep php-cgi

第二步:清理错误的扩展配置

  1. 编辑 php.ini 文件:
# 对于 PHP 7.2
nano /www/server/php/72/etc/php.ini

# 对于 PHP 8.0
nano /www/server/php/80/etc/php.ini
  1. 查找并删除或注释以下行:
; 移除或注释这些错误配置
; extension=zip.so
; extension=/www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/fileinfo.so
; extension=ixed.8.0.lin

第三步:正确安装和配置扩展

方法一:通过宝塔面板重新安装

  1. 进入宝塔面板 → 软件商店 → 找到对应的 PHP 版本
  2. 点击「设置」→「安装扩展」
  3. 先卸载 zip 和 fileinfo 扩展
  4. 然后重新安装这两个扩展

很神奇的就是

picture.image

方法二:手动修复(如果面板操作无效)

# 对于 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

基本上 面板无效 我们手动来试试

只能手动

picture.image

picture.image 这回显示ok了

picture.image

第四步:正确配置 php.ini

; 对于 PHP 7.2
extension=zip.so
extension=fileinfo.so

; 对于 PHP 8.0(如果需要)
; extension=zip
; extension=fileinfo

这回我们检查下 php. ini 配置文件

果然有2个 ,带引号的 是错误的。

picture.image

picture.image 然后我们针对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

我们验证修复

picture.image

能检测到 说明问题已经解决,接下来解决下一个问题

picture.image

常见问题排查

  1. 如果仍然报错
# 检查扩展文件是否存在
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
  1. 如果出现版本冲突
# 确保命令行和网站使用相同PHP版本
update-alternatives --config php
  1. 如果使用宝塔多版本PHP
    • 在宝塔面板 → 网站 → 对应网站设置中
    • 确保「PHP版本」选择正确
    • 点击「切换版本」后重启所有服务

预防措施

  1. 在宝塔面板中操作 PHP 扩展时,确保:
    • 先停止网站流量
    • 备份当前配置
    • 一次只修改一个扩展
  1. 定期检查 PHP 错误日志:
tail -f /www/server/php/72/var/log/php-fpm.log

通过以上步骤,您应该能彻底解决这个扩展加载错误问题。如果仍有问题,可能需要考虑完全卸载并重新安装特定 PHP 版本。
如果仍有问题,请提供以下信息以便进一步诊断:

  1. php -v 的输出
  2. php --ini 的输出
  3. /www/server/php/72/etc/php.ini 中关于扩展加载的部分内容
0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动客户端性能优化最佳实践
在用户日益增长、需求不断迭代的背景下,如何保证 APP 发布的稳定性和用户良好的使用体验?本次分享将结合字节跳动内部应用的实践案例,介绍应用性能优化的更多方向,以及 APM 团队对应用性能监控建设的探索和思考。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论