Ошибка PHP: «Расширение zip и команда unzip отсутствуют, пропускаются».

147

Когда я запускаю, 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, чтобы композитор мог загружать зависимости?

b85411
источник
Обходной путь : использование У composer update --prefer-source меня возникла эта проблема при попытке composer updatephpspec. Failed to download symfony/polyfill-ctype from dist: The zip extension and unzip command are both missing, skipping. Я использую Mac, и у меня возникли проблемы с тем, чтобы Homebrew работал с установкой расширений php. Итак, мое быстрое решение заключалось в том, чтобы заставить composer отказаться от использования zip, добавив параметр --prefer-source. Это означает, что он загружает репо вместо заархивированного пакета. Не долгосрочное решение, но полезно знать.
Джон Уокер

Ответы:

325

В зависимости от вашего вкуса Linux и версии PHP они могут отличаться.

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

Это очень часто задаваемый вопрос, вы сможете найти более полезную информацию в эфире, выполнив поиск <distro> php <version> zip extension.

Arrisar
источник
51
Для Ubuntu apt-get install php-zipдостаточно
Olaf
1
@OlafDietsche Как узнать / определить, когда устанавливать php[version]-packagevs php-packageдля любого данного пакета? Хотел бы знать, так как я обычно просто использую эту php[version]-packageверсию, но, возможно, это не оптимально…
elbowlobstercowstand
@elbowlobstercowstand php-<package>- версия по умолчанию. Эти пакеты зависят только от самой последней версии. Если вам нужна какая-то конкретная (обычно более старая) версия, вы устанавливаете php<version>-<package>.
Olaf Dietsche
1
Люди продолжают давать инструкции по установке php-zip, а также zip / unzip. Нет никакого смысла, что ему нужны оба.
jgmjgm
1
Кроме того, вам действительно стоит установить 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
Thomas Praxl
45

Для серверов с PHP 5.6

sudo apt-get install zip unzip php5.6-zip
Olawale
источник
1
Вы спасаете жизнь, мой друг.
Haring10
1
Работал у меня. Спасибо
umarbilal
24

Для Debian Jessie (который является текущим значением по умолчанию для образа PHP в Docker Hub):

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

Вы можете опустить --yes, но это полезно, когда вы запускаете его в Dockerfile.

Питер Брелс
источник
спасибо, что поделился с Питером, сэкономил мне время на поиски правильной версии php-zip: D
thaerlabs
23

Для более старых дистрибутивов Ubuntu, т.е. 16.04, 14.04, 12.04 и т. Д.

sudo apt-get install zip unzip php7.0-zip
Гоке Обаса
источник
2
в том числе 16.04
засветка 04
16

У меня был PHP7.2 на сервере Ubuntu 16.04, и он решил мою проблему:

sudo apt-get install zip unzip php-zip

Обновить

Пробовал это для Ubuntu 18.04 и тоже работал.

Акиб Ашеф
источник
8

Не вдаваясь в подробности, но если вы работаете в a Dockerfile, вы могли бы решить эту конкретную проблему с помощью Composer, установив unzipутилиту. Ниже приведен пример использования официального образа PHP для установки unzipи zipрасширения 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, из которой с любовью взято все вышесказанное.

DJ Sipe
источник
7

Я использую Ubuntu, и сработала следующая команда

apt-get install --yes zip unzip

Оскар Дэвид
источник
4

Если вы используете Ubuntu и PHP 7.2 , используйте это ...

sudo apt-get update
sudo apt-get install zip unzip php7.2-zip
афо
источник
4

Я получил эту ошибку, когда установил Laravel 5.5 на свой облачный сервер digitalocean (Ubuntu 18.04 и PHP 7.2), и следующая команда исправила ее.

sudo apt install zip unzip php7.2-zip

Радость
источник
3

В докере с изображением php:7.2-apacheмне просто нужно было заархивировать и разархивировать. Не нужен php-zip:

apt-get install zip unzip

или Dockerfile

RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "zip"]
RUN ["apt-get", "install", "-y", "unzip"]
Армель Ларсье
источник
2

На самом деле composer в настоящее время, похоже, работает без команды zipкомандной строки, поэтому установки php-zipдолжно быть достаточно --- НО будет отображаться предупреждение:

Поскольку отсутствует команда «распаковать», установленные zip-файлы распаковываются с использованием расширения PHP zip. Это может привести к неверным сообщениям о поврежденных архивах. Установка «распаковать» может исправить их.

См. Также Есть ли проблема с использованием php-zip (об этом предупреждает композитор)

Alex
источник
1

Самая короткая команда, чтобы исправить это в Debian и Ubuntu (зависимости будут установлены автоматически):

sudo apt install php-zip
ДевонДахон
источник
0

PHP-ZIPтребуются некоторые зависимости или библиотека, в зависимости от образа, который Dockerfileвам нужно сначала установить

RUN set -eux \
   && apt-get update \
   && apt-get install -y libzip-dev zlib1g-dev \
   && docker-php-ext-install zip
Паскаль Товогери
источник