如何在CentOS 7上安装为PHP 7.4从头编译的zip扩展?

回答 3 浏览 1.9万 2020-05-12

我有一个PHP7.4.2的安装,是通过从源代码编译安装的。我使用的configure命令如下:

'./configure' '--with-apxs2=/usr/bin/apxs' '--with-curl=/usr' '--with-gd' '--with-gettext' '--with-jpeg-dir=/usr' '--with-freetype-dir=/usr' '--with-openssl' '--with-mcrypt=/usr/local/lib' '--with-mhash' '--with-mysql=mysqlnd' '--with-mysqli=mysqlnd' '--with-pcre-regex' '--with-pear' '--with-png-dir=/usr' '--with-xsl' '--with-zlib' '--with-zlib-dir=/usr' '--with-iconv' '--enable-bcmath' '--enable-calendar' '--enable-exif' '--enable-ftp' '--enable-gd-native-ttf' '--enable-soap' '--enable-sockets' '--enable-zip'

现在当我试图使用ZipArchive类时,我意识到zip扩展没有被安装或启用。它没有显示在我的phpinfo()中,代码显示了一个错误

Fatal error: Class 'ZipArchive' not found

我认为用于添加 zip 扩展的配置选项在 PHP 7.4 版本中已更改,我应该使用--with-zip而不是--enable-zip

我试着用pecl来安装扩展,但它返回的错误是这样的:

checking libzip... yes checking PHP version... 7.4 checking for pkg-config... /bin/pkg-config checking for libzip... not found configure: error: Please reinstall the libzip distribution

我试着从pecl档案中安装扩展,configure命令返回同样的错误。我是在CentOS 7上做的,有些帖子建议安装libzip-devel包。但它只能作为第三方软件库的一部分使用。由于这是一个生产环境,我也不能这样做。

如果我从源代码开始重新安装 PHP,再运行 configure 命令,会不会安装这个扩展?它会影响我现有的任何设置吗?我已经安装并启用了 SVN 扩展模块

Happy Coder 提问于2020-05-12
为什么不简单地用内置的ZIP支持来重新编译PHP呢?Nico Haase 2020-05-12
根据centos.pkgs.org/7/centos-x86_64/…,它应该只是yum install libzip-develNigel Ren 2020-05-15
既然有维护良好的软件包,为什么还要从源代码开始构建?rpms.remirepo.net/wizardRemi Collet 2020-05-17
3 个回答
#1楼 已采纳
得票数 3

zip扩展需要libzip库。所以你可以从源代码编译它。但是libzip库需要zlib库。为了确保你不会错过任何重要的东西,最好由我来告诉你我是怎么做的。

我是这样在我们的centos 7服务器上从源码编译7.4的。

首先,我正在安装软件包更新,并安装缺失的软件包:

sudo yum update
sudo yum -y install lzip oniguruma oniguruma-devel

# OR if you cant find the packages you can use RPMs - example:
curl https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/o/oniguruma-5.9.5-3.el7.x86_64.rpm --output oniguruma-5.9.5-3.el7.x86_64.rpm
rpm -Uvh oniguruma-5.9.5-3.el7.x86_64.rpm

安装CMake

cd
# installing compiled cmake
wget -c https://cmake.org/files/LatestRelease/cmake-3.16.0-Linux-x86_64.tar.gz
tar zxvf cmake-3.*

# OR install it from source:
curl -OL https://github.com/Kitware/CMake/archive/v3.16.5.tar.gz
tar zxvf v3.16.5.tar.gz

cd CMake-3.*
./bootstrap --prefix=/usr/local
sudo make -j2
sudo make install
# maybe this is not required:
sudo cp ~/CMake-3.16.5/bin/cmake /usr/bin/

编译zlib的内容:

wget -c http://www.zlib.net/zlib-1.2.11.tar.gz
tar zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
sudo make -j2
sudo make install

为 zip 扩展编译 libzip:

cd
wget -c https://libzip.org/download/libzip-1.6.1.tar.gz
tar zxvf libzip-1.6.1.tar.gz
cd libzip*
mkdir build
cd build
cmake ..
sudo make -j2
make test
sudo make install

复制构建的文件并将其添加到变量中

sudo cp /home/centos/libzip-1.6.1/build/libzip.pc /usr/local/lib64/pkgconfig/libzip.pc

# Also add this to the env variables for each session - later in the guide
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig/

编译php

如果php已经通过软件包安装程序安装了,那么请删除它。

sudo yum-config-manager --disable remi-php74
sudo yum remove php php-cli php-common php-opcache php-mcrypt php-gd php-curl php-fpm php-dom php-intl php-pecl-mongodb php-mbstring php-xml php-pear php-devel php-pecl-zip

额外的编译信息:https://shaunfreeman.name/compiling-php-7-on-centos

# for some reason libzip-last wont do what you need, so you need to compile it as it's written above
sudo yum install httpd-devel git gcc gcc-c++ readline-devel libxml2-devel libzip-last libxslt-devel pkgconfig openssl-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 libicu-devel
sudo mkdir /usr/local/php7
cd

# OPTION A
git clone https://github.com/php/php-src.git
cd php-src
git checkout PHP-7.4.5

# OPTION B
# use the release tar instead of the source branch
curl -OL https://github.com/php/php-src/archive/php-7.4.5.tar.gz
tar zxvf php-7.4.5.tar.gz

cd php-src-php-7.4.5
./buildconf --force
./configure --prefix=/usr/local/php7 \
    --with-config-file-path=/usr/local/php7/etc \
    --with-config-file-scan-dir=/usr/local/php7/etc/conf.d \
    --with-apxs2=/usr/bin/apxs \
    --enable-bcmath \
    --enable-fpm \
    --with-bz2 \
    --with-curl \
    --disable-phpdbg \
    --disable-phpdbg-webhelper \
    --enable-filter \
    --enable-gd \
    --with-freetype \
    --with-jpeg \
    --enable-intl \
    --with-mysql-sock=/var/lib/mysql/mysql.sock \
    --with-openssl \
    --enable-simplexml \
    --enable-xmlreader \
    --enable-xmlwriter \
    --enable-pcntl \
    --enable-shmop \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --with-xsl \
    --enable-opcache \
    --enable-calendar \
    --enable-sockets \
    --enable-mbstring \
    --with-readline \
    --with-zlib=~/libzip-1.6.1/build/ \
    --with-zip \
    --enable-exif \
    --with-gettext \
    --without-sqlite3 \
    --with-mhash \
    --enable-maintainer-zts
sudo make -j2
sudo make install
sudo mkdir /usr/local/php7/etc/conf.d
sudo cp -v ./php.ini-production /usr/local/php7/lib/php.ini
sudo cp -v ./sapi/fpm/www.conf /usr/local/php7/etc/php-fpm.d/www.conf
sudo cp -v ./sapi/fpm/php-fpm.conf /usr/local/php7/etc/php-fpm.conf
sudo vim /usr/local/php7/etc/conf.d/modules.ini

make -j2定义了你想用多少核心线程来进行编译。

你应该注意的另一句话是这句话:

--with-zlib=~/libzip-1.6.1/build/ \

在配置过程中,请使用你自己需要的软件包。

php主要从这里运行:/usr/bin/php

而你建立的php将位于这里:/usr/local/php7/bin/php

所以你可能需要重写它:

sudo mv /usr/local/php7/bin/php /usr/bin/php

这还不是全部,但它涵盖了带有 zip 扩展名的每个重要部分。

Random Dude 提问于2020-05-15
Community 修改于2020-10-14
#2楼
得票数 3

在此基础上进行尝试:

yum install php74-libzip.x86_64
yum install php-pecl-zip
Valantis Stergiopoulos 提问于2020-12-06
#3楼
得票数 2

在CentOS中,你有yum

你可以按下面的方法做,应该能行。我刚刚在一个带有 PHP 7.4 的全新 CentOS 中发了短信。

你不需要重新安装PHP,你只需要添加扩展名。

安装依赖关系(你需要以root身份运行)

yum install pcre-devel gcc zlib zlib-devel  libzip-devel make

使用PECL安装压缩包

pecl install zip

编辑/etc/php.ini来注册新的模块

(你需要以root身份打开)

extension=zip.so;
Carlos Robles 提问于2020-05-16
Carlos Robles 修改于2020-05-16