PHP 错误: The zip extension and unzip command are both missing, skipping

当我运行composer update时,报错如下:

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

我需要做什么才能启用 zip 和 unzip 命令,以便 composer 可以下载依赖项?

201474 次浏览

根据您对Linux和PHP版本的喜好,这些可能会有所不同。

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

这是一个非常常见的问题,你可以通过搜索<distro> php <version> zip extension在以太中找到更多有用的信息。

对于较旧的Ubuntu发行版,如16.04,14.04,12.04等

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

对于使用PHP 5.6的服务器

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

对于Debian Jessie(这是Docker Hub上PHP映像的当前默认):

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

你可以省略——是的,但当你在Dockerfile中运行它时,它很有用。

我正在使用Ubuntu,并使用以下命令工作

apt-get install --yes zip unzip

我在Ubuntu 16.04服务器上安装了PHP7.2,它解决了我的问题:

sudo apt-get install zip unzip php-zip

更新

在Ubuntu 18.04上尝试了这个方法,效果也不错。

如果你正在使用Ubuntu和PHP 7.2,使用这个…

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

实际上,现在的composer似乎不需要zip命令行命令就可以工作,所以安装php-zip应该就足够了——但是它会显示一个警告:

由于没有“unzip”命令,安装的zip文件正在使用 PHP压缩扩展。 这可能导致已损坏档案的无效报告。安装“unzip”可能 纠正他们。< / p >

另见使用php-zip是否有问题(编写者对此发出警告)

当我在digitalocean云服务器(Ubuntu 18.04和PHP 7.2)上安装Laravel 5.5时,我得到了这个错误,下面的命令修复了它。

sudo apt install zip unzip php7.2-zip

在docker上使用image php:7.2-apache,我只需要zip和unzip。不需要php-zip:

apt-get install zip unzip

或Dockerfile

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

我不想赘说这一点,但如果你在Dockerfile中工作,你可以通过安装unzip实用程序来解决这个特殊的问题。下面是一个使用PHP官方图片来安装unzipzip PHP扩展的例子。

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

这是一个有用的GitHub问题,上面是可爱的解除。

DebianUbuntu上修复它的最短命令(依赖项将自动安装):

sudo apt install php-zip

PHP-ZIP需要一些依赖项或库缺失,这取决于你需要先安装它们的Dockerfile映像

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

在PHP 7.4中试试这个:

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

对于PHP 8.0:

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

PHP 8.1

apt-get install --yes zip

后运行

apt install php-zip

再跑一遍

composer require ...

我得到了下一个警告和建议

由于没有“unzip”或“7z”命令,安装的zip文件正在使用PHP zip扩展名进行解压缩。

这可能导致已损坏档案的无效报告。此外,在存档中定义的任何UNIX权限(例如可执行文件)都将丢失。

安装'unzip'或'7z'(21.01+)可以修复它们。

由于没有“unzip”或“7z”命令,安装的zip文件正在使用PHP zip扩展名进行解压缩。

这可能导致已损坏档案的无效报告。此外,在存档中定义的任何UNIX权限(例如可执行文件)都将丢失。

安装'unzip'或'7z'(21.01+)可以修复它们。

所以我建议先安装unzip。

apt install unzip

apt-get install zip 我正在运行一个docker容器,这帮助了我 Docker-compose exec app apt-get install zip