如何在 CentOS 7 上安装从头编译的 PHP 7.4 的 zip 扩展?
How to install zip extension for PHP 7.4 compiled from scratch on CentOS 7?
我有一个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
class 时,我发现 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 运行 配置命令,它会安装扩展吗?它会影响我现有的任何设置吗?我已经安装并启用了 SVN
extnsion
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 扩展名的每个重要部分。
在 CentOS 中你有 yum
您可以执行以下操作,它应该会起作用。我只是在带有 PHP 7.4 的新 CentOS 中给它发了短信。
您不需要重新安装PHP,您只需要添加扩展程序。
安装依赖项(您需要 运行 作为 root)
yum install pcre-devel gcc zlib zlib-devel libzip-devel make
使用 PECL 安装 zip
pecl install zip
编辑/etc/php.ini
注册新模块
(您需要以 root 身份打开)
extension=zip.so;
试一试:
yum install php74-libzip.x86_64
yum install php-pecl-zip
我有一个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
class 时,我发现 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 运行 配置命令,它会安装扩展吗?它会影响我现有的任何设置吗?我已经安装并启用了 SVN
extnsion
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 扩展名的每个重要部分。
在 CentOS 中你有 yum
您可以执行以下操作,它应该会起作用。我只是在带有 PHP 7.4 的新 CentOS 中给它发了短信。
您不需要重新安装PHP,您只需要添加扩展程序。
安装依赖项(您需要 运行 作为 root)
yum install pcre-devel gcc zlib zlib-devel libzip-devel make
使用 PECL 安装 zip
pecl install zip
编辑/etc/php.ini
注册新模块
(您需要以 root 身份打开)
extension=zip.so;
试一试:
yum install php74-libzip.x86_64
yum install php-pecl-zip