ChatGPT解决这个技术问题 Extra ChatGPT

PHP error: "The zip extension and unzip command are both missing, skipping."

When I run a composer update I get this error message:

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

What do I need to do to enable the zip and unzip commands so that composer can download dependencies?

Workaround: Use composer update --prefer-source I had this issue when trying to composer update phpspec. Failed to download symfony/polyfill-ctype from dist: The zip extension and unzip command are both missing, skipping. I am on a Mac and had problems making Homebrew work to install php extensions. So, my quick fix was to force composer not to need to use zip by adding the --prefer-source option. This means it downloads the repo instead of a zipped package. Not a long term solution but handy to know.

A
Arrisar

Depending on your flavour of Linux and PHP version these may vary.

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

This is a very commonly asked question, you'll be able to find more useful info in the aether by searching <distro> php <version> zip extension.


For Ubuntu apt-get install php-zip is sufficient
@OlafDietsche How do you know/determine when to install php[version]-package vs php-package for any given package? Would love to know as I usually just go with the php[version]-package version, but perhaps that's not optimal…
@elbowlobstercowstand php-<package> is the default version. These packages just depend on the most recent version. If you need some specific (usually older) version, you install php<version>-<package>.
People keep giving instructions to install php-zip as well as zip/unzip. It makes no sense that it needs both.
Also, you really should install unzip. Otherwise composer will complain: As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension. This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost. Installing 'unzip' may remediate them. So it should be RUN … apt-get install -yqq … zlib1g-dev libzip-dev unzip && docker-php-ext-install zip
G
Goke Obasa

For servers with PHP 5.6

sudo apt-get install zip unzip php5.6-zip

You are a life saver, my friend.
Worked for me. Thanks
sudo apt-get install zip unzip php7.4-zip // according to your PHP version
D
DJ Sipe

Not to belabor the point, but if you are working in a Dockerfile, you would solve this particular issue with Composer by installing the unzip utility. Below is an example using the official PHP image to install unzip and the zip PHP extension for good measure.

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

This is a helpful GitHub issue where the above is lovingly lifted from.


I enjoyed your prose in this answer. Thank you
In my case, doing apt-get install -y zlib1g-dev libzip-dev unzip gets the error gone.
If warning comes from composer executed in php:7.4-cli with Dockerfile, by installing just zip warning goes away. RUN apt-get update && apt-get install -y zip. It didn't request for unzip, libs nor docker-php-ext...
P
Peter Breuls

For Debian Jessie (which is the current default for the PHP image on Docker Hub):

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

You can omit the --yes, but it's useful when you're RUN-ing it in a Dockerfile.


thanks for sharing Peter, saved me some time looking for the right version of php-zip :D
G
Goke Obasa

For older Ubuntu distros i.e 16.04, 14.04, 12.04 etc

sudo apt-get install zip unzip php7.0-zip

including 16.04
A
Aqib Ashef

I had PHP7.2 on a Ubuntu 16.04 server and it solved my problem:

sudo apt-get install zip unzip php-zip

Update

Tried this for Ubuntu 18.04 and worked as well.


O
Oscar Gallardo

I'm Using Ubuntu and with the following command worked

apt-get install --yes zip unzip


A
Armel Larcier

On docker with image php:7.2-apache I just needed zip and unzip. No need for php-zip :

apt-get install zip unzip

or Dockerfile

RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "zip"]
RUN ["apt-get", "install", "-y", "unzip"]

a
aphoe

If you are using Ubuntu and PHP 7.2, use this...

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

J
Joyal

I got this error when I installed Laravel 5.5 on my digitalocean cloud server (Ubuntu 18.04 and PHP 7.2) and the following command fixed it.

sudo apt install zip unzip php7.2-zip


A
Alex

Actually composer nowadays seems to work without the zip command line command, so installing php-zip should be enough --- BUT it would display a warning:

As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension. This may cause invalid reports of corrupted archives. Installing 'unzip' may remediate them.

See also Is there a problem with using php-zip (composer warns about it)


P
Pascal Tovohery

PHP-ZIP needs some dependancies or library missing, depends on the image from Dockerfile you need to install them first

RUN set -eux \
   && apt-get update \
   && apt-get install -y libzip-dev zlib1g-dev \
   && docker-php-ext-install zip

P
Pejman Kheyri

Try this for PHP 7.4:

sudo apt-get install zip unzip php7.4-zip

And for PHP 8.0:

sudo apt-get install zip unzip php8.0-zip

C
Cyril

PHP 8.1

apt-get install --yes zip

D
DevonDahon

The shortest command to fix it on Debian and Ubuntu (dependencies will be installed automatically):

sudo apt install php-zip

S
Salvador Rueda

After run

apt install php-zip

and run again

composer require ...

I get the next warning and suggestion

As there is no 'unzip' nor '7z' command installed zip files are being unpacked using the PHP zip extension.

This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost.

Installing 'unzip' or '7z' (21.01+) may remediate them.

As there is no 'unzip' nor '7z' command installed zip files are being unpacked using the PHP zip extension.

This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost.

Installing 'unzip' or '7z' (21.01+) may remediate them.

So I suggest install unzip first.

apt install unzip