• 【填坑指南】PHP8报:Unable to load dynamic library ‘zip.so’ 错误


    1.原因分析

    这种情况多数发生在PHP安装时因为各种原因失败后,残余的库与最后安装的PHP版本不兼容导致的。

    2.我的路径

    一开始我按照以前摸索出来的安装PHP7.3的成功经验来编译方法安装PHP8.3,发现以前的套路已经失效了。反复重装PHP8.3失败后,改用Centos 8的仓库方式安装后成功。

    3. 使用 DNF 安装 PHP 8

    第一步是打开Centos 的 PowerTools 仓库:

    nano /etc/yum.repos.d/CentOS-Base.repo (修改系统仓库源)
    
     [PowerTools]
    name=CentOS-$releasever - PowerTools
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=PowerTools&infra=$infra
    baseurl=https://mirrors.tencentyun.com/centos/$releasever/PowerTools/$basearch/os/
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
    

    本例用的是腾讯云的镜像,国内访问比较快。 存盘退出后,重建仓库缓存:

    sudo dnf clean all
    sudo dnf makecache
    

    确保PowerTools安装成功后, 开始php8的安装流程:

    基础安装:
    sudo dnf groupinstall "Development Tools"
    sudo dnf install epel-release libxml2-devel bzip2-devel curl-devel libpng-devel libjpeg-devel libXpm-devel freetype-devel gmp-devel libmcrypt-devel mariadb-devel aspell-devel recode-devel autoconf bison re2c oniguruma oniguruma-devel libedit-devel 
    开启remi仓库:
    sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
    sudo dnf module reset php
    sudo dnf module list php (查看remi源支持的php版本)
    sudo dnf module enable php:remi-8.0 (选择8.0)
    sudo dnf install php php-cli php-fpm php-mysqlnd php-devel (安装php8.0基础框架)
    下载源码:
    wget https://www.php.net/distributions/php-8.0.0.tar.gz
    tar -xzvf php-8.0.0.tar.gz
    cd php-8.0.0
    CFLAGS="-fPIE" ./configure --prefix=/usr/local/php --enable-fpm --with-mysqli --with-zlib --enable-mbstring --enable-soap --enable-intl --with-curl --with-openssl --enable-bcmath --with-iconv
    make CFLAGS="-fPIE" LDFLAGS="-pie"
    sudo make install
    /usr/local/php/bin/php -v
    

    TIPS:
    通过这种方式安装的PHP 8, 默认路径如下:
    二进制文件: /usr/bin/php
    php.ini 设置文件 : /etc/php.ini
    www.conf 设置文件: /etc/php-fpm.d/www.conf

    以上这堆命令可以成功安装php 8,其中最后一条命令 php -v 是查看php版本号,如果显示无误,那么恭喜你安装成功,不需要再往下折腾了。但是如果报以下错误:

    PHP Warning: PHP Startup: Unable to load dynamic library ‘zip.so’ (tried: /www/server/php/81/lib/php/extensions/no-debug-non-zts-20210902/zip.so

    说明zip这个扩展没有正常开启,因为现在我们安装的是php 8.0,而我的系统里的php zip 扩展因为前面的反复折腾,已经搞不清楚是哪个版本了,因此报错。

    4. 解决方案

    首先确定现在的php版本到底是多少:
    php -v
    忽略错误信息,我们仍然可以从中判断出版本号:

    PHP 8.0.30 (cli) (built: Jun 4 2024 15:15:06) ( NTS gcc x86_64 )

    然后手动下载8.0.30的源代码并单独安装对应的zip扩展:

    wget https://www.php.net/distributions/php-8.0.30.tar.gz
    tar zxvf  php-8.0.30.tar.gz
    cd php-8.0.30
    cd ext\zip
    phpize
    ./configure --with-php-config=/usr/bin/php-config
    make
    make install
    php -v
    

    [root@VM-8-2-centos zip]# php -v
    PHP 8.0.30 (cli) (built: Jun 4 2024 15:15:06) ( NTS gcc x86_64 )
    Copyright © The PHP Group
    Zend Engine v4.0.30, Copyright © Zend Technologies
    with Zend OPcache v8.0.30, Copyright ©, by Zend Technologies

    不仅仅是zip扩展,其他扩展如果也有类似报错,也可以用这个方法解决!

  • 相关阅读:
    2023/10/05 部分汇编指令
    一文搞定异步爬虫框架Scrapy环境的安装
    RT-Thread 内存管理(学习一)
    Java理论题(2)——简答题
    Python两个序列的相关性
    [附源码]java毕业设计ssm宠物交易网站论文
    yamot:一款功能强大的基于Web的服务器安全监控工具
    在RDD上执行描述性统计操作
    git命令笔记
    小白优化Oracle的利器”sqltrpt.sql”脚本
  • 原文地址:https://blog.csdn.net/rockage/article/details/140409519