Błąd PHP: „Brak rozszerzenia zip i polecenia rozpakowania, pomijam”.

144

Po uruchomieniu composer updateotrzymuję następujący komunikat o błędzie:

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

Co muszę zrobić, aby włączyć polecenia zip i unzip, aby kompozytor mógł pobierać zależności?

b85411
źródło
Obejście problemu: Użyj composer update --prefer-source Miałem ten problem podczas próby skorzystania z composer updatephpspec. Failed to download symfony/polyfill-ctype from dist: The zip extension and unzip command are both missing, skipping. Używam komputera Mac i miałem problemy z uruchomieniem programu Homebrew w celu zainstalowania rozszerzeń php. Więc moje szybkie ustalenie było zmuszenie composer nie do potrzeby korzystania zamek dodając opcję --prefer-source. Oznacza to, że pobiera repozytorium zamiast spakowanego pakietu. Nie jest to rozwiązanie długoterminowe, ale warto je znać.
John Walker

Odpowiedzi:

311

W zależności od wersji Linuksa i PHP mogą się one różnić.

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

To jest bardzo często zadawane pytanie, więcej przydatnych informacji znajdziesz w eterze, wyszukując <distro> php <version> zip extension.

Arrisar
źródło
48
Dla Ubuntu apt-get install php-zipwystarczy
Olaf Dietsche
1
@OlafDietsche Skąd wiesz / określić, kiedy zainstalować, php[version]-packagea kiedy php-packagedla danego pakietu? Chciałbym wiedzieć, jak zwykle po prostu php[version]-package
wybieram
@elbowlobstercowstand php-<package>jest wersją domyślną. Te pakiety zależą tylko od najnowszej wersji. Jeśli potrzebujesz określonej (zwykle starszej) wersji, zainstaluj php<version>-<package>.
Olaf Dietsche
Działa również dla # yum install zip unzip php7.2-zip(na CentOS 7)
Pathros
1
Ludzie ciągle podają instrukcje instalacji php-zip, a także zip / unzip. Nie ma sensu, że potrzebuje obu.
jgmjgm
45

Dla serwerów z PHP 5.6

sudo apt-get install zip unzip php5.6-zip
Olawale
źródło
1
Ratujesz życie, przyjacielu.
Haring10
1
Pracował dla mnie. Dzięki
umarbilal
23

Dla Debian Jessie (który jest bieżącym domyślnym obrazem PHP w Docker Hub):

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

Możesz pominąć - tak, ale jest to przydatne, gdy uruchamiasz go w pliku Dockerfile.

Peter Breuls
źródło
dzięki za udostępnienie Piotra, zaoszczędziłem trochę czasu na szukaniu odpowiedniej wersji php-zip: D
thaerlabs
23

W przypadku starszych dystrybucji Ubuntu, tj. 16.04, 14.04, 12.04 itd

sudo apt-get install zip unzip php7.0-zip
Goke Obasa
źródło
2
w tym 16.04
lightup
15

Miałem PHP7.2 na serwerze Ubuntu 16.04 i rozwiązało to mój problem:

sudo apt-get install zip unzip php-zip

Aktualizacja

Wypróbowałem to dla Ubuntu 18.04 i również działało.

Aqib Ashef
źródło
7

Używam Ubuntu i zadziałało następujące polecenie

apt-get install --yes zip unzip

Oscar David
źródło
5

Nie żeby rozwodzić się nad tym, ale jeśli pracujesz w programie Dockerfile, możesz rozwiązać ten konkretny problem z Composerem, instalując unzipnarzędzie. Poniżej znajduje się przykład użycia oficjalnego obrazu PHP do zainstalowania unzipi ziprozszerzenia PHP dla dobrego pomiaru.

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

Jest to pomocny problem z GitHubem, w którym powyższy opis jest pięknie wzięty.

DJ Sipe
źródło
4

Jeśli używasz Ubuntu i PHP 7.2 , użyj tego ...

sudo apt-get update
sudo apt-get install zip unzip php7.2-zip
aphoe
źródło
3

Otrzymałem ten błąd, kiedy zainstalowałem Laravel 5.5 na moim serwerze w chmurze digitalocean (Ubuntu 18.04 i PHP 7.2), a następujące polecenie naprawiło go.

sudo apt install zip unzip php7.2-zip

Joyal
źródło
2

W dockerze z obrazem php:7.2-apachewystarczyło spakować i rozpakować. Nie potrzeba php-zip:

apt-get install zip unzip

lub Dockerfile

RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "zip"]
RUN ["apt-get", "install", "-y", "unzip"]
Armel Larcier
źródło
1

Faktycznie, obecnie Composer wydaje się działać bez zippolecenia wiersza poleceń, więc instalacja php-zippowinna wystarczyć --- ALE wyświetli ostrzeżenie:

Ponieważ nie ma zainstalowanego polecenia „unzip”, pliki zip są rozpakowywane przy użyciu rozszerzenia PHP zip. Może to spowodować nieprawidłowe raporty o uszkodzonych archiwach. Zainstalowanie „unzip” może je naprawić.

Zobacz także Czy jest problem z używaniem php-zip (ostrzega kompozytor)

Alex
źródło