解决PHP Warning: Module ‘zip’ already loaded in Unknown on line 0 扩展加载错误的完整方案-其他扩展通用卓伊凡 最近我们真的是因为一个问题解决就要衍生另一个问题,不过也是好事情,不断提升和学习,知识逐渐丰富,对疑难杂症处理会变得得心应手,所以每次的成功解决方案都要记录,并且我发现很多同行都在搜索类似问题,因此分享是肯定有作用滴。 PHP Warning: Module ‘zip’ already loaded 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/php/80/lib/php/extensions/no-debug-non-zts-20200930/redis.so’ (tried: /www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/redis.so (/www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/redis.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/redis.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/redis.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 ‘swoole.so’ (tried: /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/swoole.so (/www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/swoole.so: cannot open shared object file: No such file or directory), /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/swoole.so.so (/www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/swoole.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
zip
遇到的错误包含多个 PHP 扩展加载问题,我将分别解决每个问题并提供完整的操作步骤。 问题分析- zip 模块重复加载:Module 'zip' already loaded
- ixed 扩展加载失败:Unable to load dynamic library 'ixed.8.0.lin'
- redis 扩展版本不匹配:Unable to load dynamic library 'redis.so'
- swoole 扩展缺失:Unable to load dynamic library 'swoole.so'
- fileinfo 扩展问题:Unable to load dynamic library 'fileinfo.so'
解决方案1. 解决 zip 模块重复加载问题# 查找所有加载 zip 模块的配置grep -r "extension.*zip" /www/server/php/72/etc/# 编辑主 php.ini 文件nano /www/server/php/72/etc/php.ini在 php.ini 中: - 确保只有一行 extension=zip.so
- 注释或删除其他所有 extension=zip.so 的行
确保了没有重复 但是会报错
 确保了 所有行里面都没有重复 # 检查是否编译进 PHP 核心php -i | grep "Configure Command" | grep zip# 如果已编译进核心,则完全删除 php.ini 中的 extension=zip.so2. 解决 ixed 扩展问题# 完全移除 ixed 扩展引用nano /www/server/php/72/etc/php.ini查找并删除或注释掉: ; extension=ixed.8.0.lin3. 解决 redis 扩展问题# 卸载现有 redis 扩展pecl uninstall redis# 安装正确版本的 redis 扩展# 对于 PHP 7.2pecl install redis-5.3.7# 或者通过宝塔面板重新安装# 宝塔面板 → PHP 7.2 → 安装扩展 → redis4. 解决 swoole 扩展问题# 安装 swoole 扩展# 对于 PHP 7.2pecl install swoole-4.8.11# 或者通过宝塔面板# 宝塔面板 → PHP 7.2 → 安装扩展 → swoole5. 解决 fileinfo 扩展问题# 重新安装 fileinfo 扩展# 对于 PHP 7.2apt-get install php7.2-fileinfo# 或者通过宝塔面板# 宝塔面板 → PHP 7.2 → 安装扩展 → fileinfo完整操作流程备份当前配置 cp /www/server/php/72/etc/php.ini /root/php.ini.bak清理错误配置 nano /www/server/php/72/etc/php.ini删除或注释以下内容: ; extension=ixed.8.0.lin; extension=redis.so; extension=swoole.so; extension=fileinfo.so通过宝塔面板重新安装扩展 - 登录宝塔面板
- 进入「软件商店」
- 找到 PHP 7.2 → 「设置」
- 在「安装扩展」中重新安装 redis、swoole、fileinfo
检查 zip 模块 php -m | grep zip如果显示两次,按照前面方法解决重复加载问题 重启服务 /etc/init.d/php-fpm-72 restart/etc/init.d/nginx restart
验证修复结果php -m | grep -E 'zip|redis|swoole|fileinfo'php -i | grep extension_dir常见问题处理如果扩展安装失败: # 安装编译依赖apt-get install -y php7.2-dev pkg-config libssl-dev# 清理旧的编译文件pecl uninstall redisrm -rf /tmp/pear如果仍然报错: # 查看 PHP 错误日志tail -f /www/server/php/72/var/log/php-fpm.log版本冲突问题: # 确保命令行和网站使用相同 PHP 版本update-alternatives --config php针对 这个命令可以说到说到
update-alternatives --config php 命令详解命令作用update-alternatives --config php 是 Linux 系统中用于管理多个 PHP 版本切换的命令,主要功能是: - 显示系统中安装的所有可用 PHP 版本
- 允许用户交互式选择默认的 PHP 命令行版本
- 管理系统中的 PHP 命令符号链接
工作原理该命令通过维护一个”备选方案”系统来管理不同版本的 PHP: - 当系统安装多个 PHP 版本时,每个版本都会在 /usr/bin/ 下有对应的二进制文件
- update-alternatives 创建 /usr/bin/php 的符号链接指向当前选择的版本
- 所有通过命令行执行的 php 命令都会使用当前选定的版本
典型使用场景查看当前可用 PHP 版本: update-alternatives --config php输出示例: There are 2 choices for the alternative php (providing /usr/bin/php). Selection Path Priority Status------------------------------------------------------------* 0 /usr/bin/php8.0 80 auto mode 1 /usr/bin/php7.4 74 manual mode 2 /usr/bin/php8.0 80 manual modePress <enter> to keep the current choice- , or type selection number:
切换 PHP 版本: 验证当前 PHP 版本: php -v
重要注意事项仅影响命令行: - 这个命令只影响命令行执行的 PHP 版本
- 不影响 Apache/Nginx 等 web 服务器使用的 PHP 版本
与宝塔面板的关系: - 宝塔面板管理的网站 PHP 版本不受此命令影响
- 网站 PHP 版本需要在宝塔面板中单独设置
优先级系统: - 每个版本有优先级数字,数字高的会被设为”auto mode”默认
- “manual mode”表示手动选择的版本
安装新版本后: sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.1 81删除备选版本: sudo update-alternatives --remove php /usr/bin/php7.4
在当前问题中的应用涉及 PHP 7.2 和 8.0 的混合使用,可以通过此命令: - 确认命令行默认使用的 PHP 版本
- 确保命令行和 web 服务器使用相同 PHP 版本
- 避免版本混淆导致的扩展加载错误
建议运行后选择与您网站相同的 PHP 版本(很可能是 7.2),然后重新尝试安装和配置扩展。 卓伊凡我听从建议,直接最终解决方案,卸载7.2 然后奉劝大家 尽量在服务器不要多版本安装php ,项目多,那么现在轻量云服务器便宜,尽量同版本的放一堆 软件行业版本问题 真的 太太太太严重了 
不要学我们 几十个放一台,几十个 放一台, 我们估计服务器成本又要增加了哎, 现在面对很多老项目 直接重写 都比升级要好。
|