【填坑指南】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扩展,其他扩展如果也有类似报错,也可以用这个方法解决!

相关推荐

  1. php8编译

    2024-07-14 09:20:03       31 阅读
  2. Python PEP 8 代码风格指南

    2024-07-14 09:20:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 09:20:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 09:20:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 09:20:03       58 阅读
  4. Python语言-面向对象

    2024-07-14 09:20:03       69 阅读

热门阅读

  1. 大语言模型LLM

    2024-07-14 09:20:03       21 阅读
  2. 大模型时代,还需要跨端framework吗?

    2024-07-14 09:20:03       27 阅读
  3. 搭建docker私有仓库

    2024-07-14 09:20:03       26 阅读
  4. uvm中使用clone时,为什么要使用$cast

    2024-07-14 09:20:03       23 阅读
  5. Linux命令怎么背?

    2024-07-14 09:20:03       21 阅读
  6. OpenCV npy和txt文件的区别与使用

    2024-07-14 09:20:03       27 阅读