PHP 错误:“zip 扩展名和解压缩命令都丢失,正在跳过。”

Posted

技术标签:

【中文标题】PHP 错误:“zip 扩展名和解压缩命令都丢失,正在跳过。”【英文标题】:PHP error: "The zip extension and unzip command are both missing, skipping." 【发布时间】:2017-05-07 14:07:16 【问题描述】:

当我运行 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 可以下载依赖项?

【问题讨论】:

解决方法:使用composer update --prefer-source 我在尝试composer update phpspec 时遇到了这个问题。 Failed to download symfony/polyfill-ctype from dist: The zip extension and unzip command are both missing, skipping. 我在 Mac 上,在让 Homebrew 安装 php 扩展时遇到问题。因此,我的快速解决方法是通过添加 --prefer-source 选项来强制 composer not 需要使用 zip。这意味着它会下载 repo 而不是压缩包。不是一个长期的解决方案,但很容易知道。 【参考方案1】:

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

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

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

【讨论】:

对于 Ubuntu apt-get install php-zip 就足够了 @OlafDietsche 您如何知道/确定何时安装 php[version]-packagephp-package 为任何给定的软件包?很想知道,因为我通常只使用php[version]-package 版本,但也许这不是最佳选择…… @elbowlobstercowstand php-<package> 是默认版本。这些软件包仅取决于最新版本。如果您需要某些特定(通常是较旧的)版本,请安装 php<version>-<package> 人们不断给出安装 php-zip 以及 zip/unzip 的说明。两者都需要是没有意义的。 另外,你真的应该安装解压缩。否则作曲家会抱怨: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. 所以应该是RUN … apt-get install -yqq … zlib1g-dev libzip-dev unzip && docker-php-ext-install zip【参考方案2】:

适用于 PHP 5.6 的服务器

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

【讨论】:

朋友,你是救命稻草。 为我工作。谢谢 sudo apt-get install zip unzip php7.4-zip // 根据你的 PHP 版本【参考方案3】:

不必赘述,但如果您在 Dockerfile 中工作,您可以通过安装 unzip 实用程序来解决 Composer 的这个特殊问题。下面是使用official PHP image 安装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

This is a helpful GitHub issue 上面的内容是从这里亲切地提出来的。

【讨论】:

我很喜欢你在这个答案中的散文。谢谢 在我的情况下,执行 apt-get install -y zlib1g-dev libzip-dev unzip 可以消除错误。 如果警告来自在 php:7.4-cli 中使用 Dockerfile 执行的作曲家,只需安装 zip 警告就会消失。 RUN apt-get update && apt-get install -y zip。它没有要求解压缩、库或 docker-php-ext...【参考方案4】:

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

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

您可以省略 --yes,但在 Dockerfile 中运行它时它很有用。

【讨论】:

感谢分享 Peter,为我节省了一些时间寻找合适的 php-zip 版本:D【参考方案5】:

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

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

【讨论】:

包括16.04【参考方案6】:

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

sudo apt-get install zip unzip php-zip

更新

在 Ubuntu 18.04 上试过这个并且效果很好。

【讨论】:

【参考方案7】:

我正在使用 Ubuntu,并且可以使用以下命令

apt-get install --yes zip unzip

【讨论】:

【参考方案8】:

如果您使用的是 Ubuntu 和 PHP 7.2,请使用此...

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

【讨论】:

【参考方案9】:

当我在我的 digitalocean 云服务器(Ubuntu 18.04 和 PHP 7.2)上安装 Laravel 5.5 时遇到此错误,并且以下命令修复了它。

sudo apt install zip unzip php7.2-zip

【讨论】:

【参考方案10】:

在带有图像 php:7.2-apache 的 docker 上,我只需要压缩和解压缩。不需要 php-zip:

apt-get install zip unzip

或 Dockerfile

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

【讨论】:

【参考方案11】:

实际上作曲家现在似乎可以在没有zip 命令行命令的情况下工作,所以安装php-zip 就足够了 --- 但它会显示警告:

由于没有“解压缩”命令安装的 zip 文件正在使用 PHP 压缩扩展。 这可能会导致损坏档案的无效报告。安装“解压缩”可能 修复它们。

另见Is there a problem with using php-zip (composer warns about it)

【讨论】:

【参考方案12】:

PHP-ZIP 需要一些依赖或缺少库,取决于来自Dockerfile 的图像,您需要先安装它们

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

【讨论】:

【参考方案13】:

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

sudo apt install php-zip

【讨论】:

【参考方案14】:

在 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 错误:“zip 扩展名和解压缩命令都丢失,正在跳过。”的主要内容,如果未能解决你的问题,请参考以下文章

php504错误

怎么让php打印错误日志?

php 运行的时候出现的错误

PHP最详细PHP从入门到精通——PHP错误处理

为啥php会出现500错误呢?急!

php错误处理