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?


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.


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

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.


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

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é.


7

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

apt-get install --yes zip unzip


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é.


4

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

sudo apt-get update
sudo apt-get install zip unzip php7.2-zip

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


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"]

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)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.