Erreur PHP: "L'extension zip et la commande de décompression sont toutes deux manquantes, sautées."

144

Lorsque j'exécute un, composer updateje reçois ce message d'erreur:

Loading composer repositories with package information
Updating dependencies (including require-dev)
    Failed to download psr/log from dist: The zip extension and unzip command are both missing, skipping.
The php.ini used by your command-line PHP is: /etc/php/7.0/cli/php.ini
    Now trying to download from source

Que dois-je faire pour activer les commandes zip et unzip afin que le compositeur puisse télécharger les dépendances?

b85411
la source
Solution: utilisez composer update --prefer-source J'ai eu ce problème en essayant de composer updatephpspec. Failed to download symfony/polyfill-ctype from dist: The zip extension and unzip command are both missing, skipping. Je suis sur un Mac et j'ai eu des problèmes pour faire fonctionner Homebrew pour installer les extensions php. Donc, ma solution rapide était de forcer à composer ne pas avoir besoin d'utiliser zip en ajoutant l'option --prefer-source. Cela signifie qu'il télécharge le dépôt au lieu d'un package compressé. Ce n'est pas une solution à long terme mais pratique à connaître.
John Walker

Réponses:

311

En fonction de votre version de Linux et de PHP, celles-ci peuvent varier.

(sudo) yum install zip unzip php-zip
(sudo) apt install zip unzip php-zip

C'est une question très fréquemment posée, vous pourrez trouver des informations plus utiles dans l'éther en recherchant <distro> php <version> zip extension.

Arrisar
la source
48
Pour Ubuntu apt-get install php-zipest suffisant
Olaf Dietsche
1
@OlafDietsche Comment savoir / déterminer quand installer php[version]-packageou php-packagepour un paquet donné? J'adorerais savoir comme j'utilise habituellement la php[version]-packageversion, mais ce n'est peut-être pas optimal…
elbowlobstercowstand
@elbowlobstercowstand php-<package>est la version par défaut. Ces packages dépendent uniquement de la version la plus récente. Si vous avez besoin d'une version spécifique (généralement plus ancienne), vous installez php<version>-<package>.
Olaf Dietsche
Cela fonctionne également pour # yum install zip unzip php7.2-zip(sur CentOS 7)
Pathros
1
Les gens continuent de donner des instructions pour installer php-zip ainsi que zip / unzip. Cela n'a aucun sens qu'il ait besoin des deux.
jgmjgm
45

Pour les serveurs avec PHP 5.6

sudo apt-get install zip unzip php5.6-zip
Olawale
la source
1
Vous sauvez la vie, mon ami.
Haring10
1
A travaillé pour moi. Merci
umarbilal
23

Pour Debian Jessie (qui est la valeur par défaut actuelle pour l'image PHP sur Docker Hub):

apt-get install --yes zip unzip php-pclzip

Vous pouvez omettre le --yes, mais c'est utile lorsque vous l'exécutez dans un Dockerfile.

Peter Breuls
la source
merci pour le partage Peter, m'a fait gagner du temps à chercher la bonne version de php-zip: D
thaerlabs
23

Pour les anciennes distributions Ubuntu, à savoir 16.04, 14.04, 12.04, etc.

sudo apt-get install zip unzip php7.0-zip
Goke Obasa
la source
2
dont 16.04
lightup
16

J'avais PHP7.2 sur un serveur Ubuntu 16.04 et cela a résolu mon problème:

sudo apt-get install zip unzip php-zip

Mettre à jour

J'ai essayé cela pour Ubuntu 18.04 et a également fonctionné.

Aqib Ashef
la source
7

J'utilise Ubuntu et avec la commande suivante a fonctionné

apt-get install --yes zip unzip

Oscar David
la source
5

Ne pas insister sur ce point, mais si vous travaillez dans un Dockerfile, vous résoudriez ce problème particulier avec Composer en installant l' unziputilitaire. Voici un exemple utilisant l' image PHP officielle à installer unzipet l' zipextension PHP pour faire bonne mesure.

FROM php:7.4-apache

# Install Composer
COPY --from=composer /usr/bin/composer /usr/bin/composer

# Install unzip utility and libs needed by zip PHP extension 
RUN apt-get update && apt-get install -y \
    zlib1g-dev \
    libzip-dev \
    unzip
RUN docker-php-ext-install zip

C'est un problème GitHub utile dont ce qui précède est amoureusement levé.

DJ Sipe
la source
4

Si vous utilisez Ubuntu et PHP 7.2 , utilisez ceci ...

sudo apt-get update
sudo apt-get install zip unzip php7.2-zip
aphoe
la source
3

J'ai eu cette erreur lorsque j'ai installé Laravel 5.5 sur mon serveur cloud digitalocean (Ubuntu 18.04 et PHP 7.2) et que la commande suivante l'a corrigée.

sudo apt install zip unzip php7.2-zip

Joyal
la source
2

Sur le docker avec image, php:7.2-apachej'avais juste besoin de zip et de décompresser. Pas besoin de php-zip:

apt-get install zip unzip

ou Dockerfile

RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "zip"]
RUN ["apt-get", "install", "-y", "unzip"]
Armel Larcier
la source
1

En fait, composer de nos jours semble fonctionner sans la zipcommande de ligne de commande, donc l'installation php-zipdevrait suffire --- MAIS cela afficherait un avertissement:

Comme il n'y a pas de commande 'unzip', les fichiers zip installés sont décompressés à l'aide de l'extension PHP zip. Cela peut entraîner des rapports non valides d'archives corrompues. L'installation de 'unzip' peut les corriger.

Voir aussi Y a-t-il un problème avec l'utilisation de php-zip (le compositeur en avertit)

Alex
la source