J'ai une installation PHP 7.4.2, qui est installée en compilant à partir de zéro. La commande configure
que j'ai utilisée est la suivante:
'./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'
Maintenant, quand j'ai essayé d'utiliser la classe ZipArchive
, j'ai réalisé que le zip n'est pas installée ou activée. Il n'apparaît pas dans mon phpinfo ()
et le code affiche une erreur
Erreur fatale: Classe 'ZipArchive' introuvable
Je pense que l'option de configuration pour ajouter l'extension zip a été modifiée dans les versions PHP 7.4 et j'aurais dû utiliser --with-zip
au lieu de --enable-zip code >.
J'ai essayé d'utiliser pecl
pour installer l'extension et elle revient dans l'erreur suivante:
vérification de libzip ... oui
vérification de la version PHP ... 7.4
vérification de pkg-config ... / bin / pkg-config
recherche de libzip ... introuvable
configure: error: Veuillez réinstaller la distribution libzip
J'ai essayé d'installer l'extension à partir de l'archive pecl et la commande configure
a renvoyé la même erreur. Je fais cela sur CentOS 7
et certains articles suggèrent d'installer le package libzip-devel
. Mais il n'est disponible que dans le cadre d'un référentiel tiers. Comme il s'agit d'un environnement de production, je ne peux pas non plus le faire.
Si je réinstalle PHP à partir de zéro en exécutant à nouveau la commande configure, va-t-il installer l'extension? Cela affectera-t-il l'une de mes configurations existantes? J'ai installé et activé l'extension SVN
3 Réponses :
L'extension zip nécessite la bibliothèque libzip. Vous pouvez donc le compiler à partir des sources. Cependant, la bibliothèque libzip nécessite la bibliothèque zlib. Pour vous assurer que vous ne manquerez rien d'important, le mieux si je vous montre comment je le fais.
D'abord je J'installe la mise à jour du package et installe les packages manquants:
--with-zlib=~/libzip-1.6.1/build/ \
Installation de CMake:
# 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.iniCompilez le zlib:
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
Compilez le libzip pour l'extension zip:
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/
Copiez le fichier construit et ajoutez-le aux variables
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
Compilation de php:
si php est déjà installé via un programme d'installation de package, supprimez-le.
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
Informations supplémentaires pour la compilation: https://shaunfreeman.name/compiling-php-7-on-centos
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/
le make -j2 définit la quantité de threads de base que vous souhaitez utiliser pour compiler.
L'autre ligne que vous devriez remarquer est celle-ci:
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
Pendant le configuration utilisez le paquet de votre propre besoin.
php fonctionne principalement à partir d'ici: /usr/bin/php
Et votre php construit sera localisé ici: /usr/local/php7/bin/php
donc vous devrez peut-être l'écraser:
sudo mv / usr / local / php7 / bin / php / usr / bin / php
Ce n'est pas tout, mais cela couvre toutes les parties importantes avec l'extension zip.
Dans CentOS, vous avez yum
Vous pouvez faire ce qui suit et cela devrait fonctionner. Je viens de l'envoyer dans un nouveau CentOS avec PHP 7.4.
Vous n'avez pas besoin de réinstaller PHP, il vous suffit d'ajouter l'extension.
extension=zip.so;
pecl install zip
/etc/php.ini
pour enregistrer le nouveau module (vous devrez ouvrir en tant que root)
yum install pcre-devel gcc zlib zlib-devel libzip-devel make
Essayez ceci:
yum install php74-libzip.x86_64 yum install php-pecl-zip
Pourquoi ne pas simplement recompiler PHP avec le support ZIP intégré?
Selon centos. pkgs.org/7/centos-x86_64/... cela devrait être simplement
yum install libzip-devel
Pourquoi construire à partir de sources alors que des packages bien entretenus existent? rpms.remirepo.net/wizard