WordPress : corriger l’erreur “Missing zlib extensions”

Lors de l’installation manuelle d’un plugin ou d’un thème WordPress, vous pouvez tomber sur cette erreur :

Unpacking the packageAbort class-pclzip.php :
Missing zlib extensionsLangage du code : CSS (css)

Le message apparaît généralement au moment où WordPress tente de décompresser une archive .zip. En clair : WordPress a bien reçu le fichier, mais PHP ne dispose pas des extensions nécessaires pour l’ouvrir correctement.

Dans mon cas, l’erreur était apparue avec Local, anciennement Local by Flywheel, après une mise à jour. Tous mes sites locaux utilisaient alors PHP 7.4.1, et l’installation manuelle de plugins ZIP échouait. Le problème venait des services PHP fournis par Local, qui devaient être réinstallés.

Voici comment diagnostiquer et corriger proprement l’erreur Missing zlib extensions dans WordPress, que vous utilisiez Local, Docker, MAMP, Valet, DDEV ou un serveur Linux.

Distingo, le livret à 2%

Ce que signifie l’erreur “Missing zlib extensions”

WordPress utilise PHP pour télécharger, lire et décompresser les archives ZIP des plugins, thèmes et mises à jour.

Quand l’extension PHP zip est disponible, WordPress peut utiliser les fonctions ZIP natives. Si zip n’est pas disponible, WordPress peut se rabattre sur PclZip, une bibliothèque PHP historique. Mais cette solution de repli dépend notamment de fonctions liées à zlib, comme gzopen().

Si ces fonctions ne sont pas disponibles, WordPress échoue avec :

Abort class-pclzip.php : Missing zlib extensionsLangage du code : CSS (css)

Autrement dit, le vrai problème n’est pas le fichier class-pclzip.php. Le problème est l’environnement PHP. Ne modifiez pas les fichiers du core WordPress. Le souci se règle côté PHP, pas dans wp-admin/includes/.

Vérifier si zip et zlib sont actifs

Commencez par vérifier les modules PHP disponibles.

php -m | grep -Ei 'zip|zlib'Langage du code : JavaScript (javascript)

Un résultat correct devrait afficher au moins :

zip
zlib

Vous pouvez aussi vérifier directement les fonctions utiles :

php -r 'var_dump(extension_loaded("zip"));'
php -r 'var_dump(extension_loaded("zlib"));'
php -r 'var_dump(function_exists("gzopen"));'Langage du code : JavaScript (javascript)

Si zip ou zlib retourne false, vous avez trouvé la cause probable.

Attention toutefois : la commande php teste le PHP en ligne de commande. WordPress, lui, utilise souvent PHP-FPM, Apache module PHP ou le runtime PHP fourni par un outil local. Les deux peuvent être différents. La suite du diagnostic sert justement à éviter ce piège classique.

Kinsta: Premium Managed WordPress hosting

Vérifier dans WordPress avec Site Health

Dans l’administration WordPress, allez dans :

Outils → Santé du site → Informations → Serveur

Vérifiez les extensions PHP chargées. Si WordPress signale que zip ou zlib manque, l’installation de thèmes et plugins depuis des archives ZIP peut échouer.

WordPress considère zip comme une extension requise pour ces opérations, tandis que zlib sert notamment de solution de repli dans certains cas. Le bon correctif consiste donc à activer au minimum zip, et idéalement les deux extensions.

Cas Local : réinstaller les services PHP

Si l’erreur apparaît dans Local après une mise à jour, le problème peut venir du service PHP embarqué. C’était le cas avec certaines versions de PHP 7.4.1 fournies par Local, où certains plugins ZIP échouaient alors qu’ils fonctionnaient avec d’autres versions de PHP.

La solution consiste à forcer Local à retélécharger le service PHP concerné.

Sur macOS, quittez Local, puis supprimez les services PHP concernés. Exemple pour PHP 7.4 :

rm -rf ~/Library/Application\ Support/Local/lightning-services/php-7.4*Langage du code : JavaScript (javascript)

Relancez ensuite Local, puis créez un site de test utilisant cette version de PHP. Local va retélécharger les services nécessaires. Une fois le service réinstallé, relancez votre vrai site local et réessayez l’installation du plugin ou du thème.

Adaptez évidemment la version dans la commande. Si le site utilise PHP 8.2, 8.3 ou 8.4, ne supprimez pas aveuglément les services PHP 7.4. Le terminal n’est pas rancunier, mais il exécute très bien les mauvaises idées.

Codeable: trouvez les meilleurs développeurs WordPress

Cas Local : changer temporairement de version PHP

Dans Local, vous pouvez aussi tester une autre version de PHP depuis les réglages du site.

  1. Ouvrez Local.
  2. Sélectionnez le site concerné.
  3. Allez dans les réglages du site.
  4. Changez la version de PHP.
  5. Redémarrez le site.
  6. Réessayez l’installation du plugin ZIP.

Si l’erreur disparaît avec une autre version de PHP, vous avez probablement un runtime PHP cassé ou incomplet dans Local, pas un problème WordPress.

Cas Ubuntu ou Debian : installer php-zip

Sur Ubuntu ou Debian, la correction la plus fréquente consiste à installer l’extension ZIP correspondant à votre version de PHP.

sudo apt update
sudo apt install php-zip

Si vous utilisez une version précise de PHP, installez le paquet correspondant. Par exemple :

sudo apt install php8.3-zipLangage du code : CSS (css)

Redémarrez ensuite PHP-FPM ou Apache selon votre stack.

Avec PHP-FPM :

sudo systemctl restart php8.3-fpmLangage du code : CSS (css)

Avec Apache :

sudo systemctl restart apache2

Avec Nginx + PHP-FPM, redémarrer Nginx ne suffit pas toujours. C’est PHP-FPM qui charge les extensions PHP.

Kinsta: Premium Managed WordPress hosting

Cas Fedora, AlmaLinux ou Rocky Linux

Sur les distributions de la famille Red Hat, installez le module ZIP de PHP avec dnf.

sudo dnf install php-zip

Puis redémarrez le service PHP ou Apache selon votre configuration :

sudo systemctl restart php-fpm

ou :

sudo systemctl restart httpd

Vérifiez ensuite dans WordPress, pas seulement en ligne de commande.

Cas Docker : installer zip et zlib dans l’image PHP

Si votre WordPress tourne dans Docker avec une image PHP officielle, il faut installer les dépendances système puis compiler ou activer l’extension ZIP.

Exemple pour une image Debian-based :

RUN apt-get update \
	&& apt-get install -y --no-install-recommends \
		libzip-dev \
		zlib1g-dev \
	&& docker-php-ext-install zip \
	&& rm -rf /var/lib/apt/lists/*Langage du code : JavaScript (javascript)

Reconstruisez ensuite le conteneur :

docker compose build --no-cache
docker compose up -d

Vérifiez dans le conteneur :

docker compose exec php php -m | grep -Ei 'zip|zlib'Langage du code : JavaScript (javascript)

Le nom du service peut être php, wordpress, app ou autre selon votre fichier docker-compose.yml.

Cas Composer : ext-zlib ou ext-zip manquant

Composer peut aussi signaler une extension manquante, par exemple :

requires ext-zlib * -> it is missing from your system
requires ext-zip * -> it is missing from your systemLangage du code : JavaScript (javascript)

Dans ce cas, Composer utilise le PHP CLI. Corrigez donc l’extension pour la version PHP utilisée par la commande composer.

which php
php -v
php -m | grep -Ei 'zip|zlib'Langage du code : JavaScript (javascript)

Sur une machine avec plusieurs versions de PHP, vérifiez que Composer n’utilise pas un PHP différent de celui de votre serveur web. C’est très courant sur macOS, Homebrew, Valet, MAMP et certains environnements Docker.

Cas macOS avec Homebrew

Avec PHP installé via Homebrew, vérifiez d’abord la version active :

which php
php -v
php -m | grep -Ei 'zip|zlib'Langage du code : JavaScript (javascript)

Si l’installation PHP est cassée, commencez par réinstaller ou relier correctement PHP :

brew reinstall php

Si vous utilisez Laravel Valet, redémarrez Valet après correction :

valet restart

Si vous utilisez Local, ne mélangez pas le PHP Homebrew et le PHP embarqué par Local. Local utilise ses propres services. Réinstaller PHP via Homebrew ne corrige pas forcément le runtime PHP de Local.

Cas Windows

Sur Windows, la situation dépend de votre environnement : Local, Laragon, XAMPP, WampServer, Docker Desktop ou PHP installé manuellement.

Vérifiez d’abord le PHP réellement utilisé :

where php
php -v
php -m | findstr /I "zip zlib"Langage du code : JavaScript (javascript)

Si vous utilisez XAMPP, WampServer ou Laragon, vérifiez le fichier php.ini chargé par l’environnement, puis assurez-vous que les extensions nécessaires sont activées. Redémarrez ensuite Apache, Nginx ou PHP-FPM selon l’outil.

Ne corrigez pas le mauvais php.ini. Windows adore avoir plusieurs PHP installés. C’est sa petite contribution au folklore local.

Vérifier le php.ini réellement chargé

Pour connaître le fichier php.ini utilisé par PHP CLI :

php --ini

Pour connaître le php.ini utilisé par WordPress, créez temporairement un fichier phpinfo.php à la racine du site :

<?php
phpinfo();Langage du code : HTML, XML (xml)

Ouvrez ensuite ce fichier dans le navigateur, cherchez Loaded Configuration File, zip et zlib, puis supprimez immédiatement le fichier :

rm phpinfo.phpLangage du code : CSS (css)

Ne laissez jamais un fichier phpinfo.php accessible publiquement. Il expose beaucoup trop d’informations sur votre environnement.

Alternative rapide : installer le plugin via FTP ou WP-CLI

Si vous êtes bloqué et devez avancer immédiatement, vous pouvez installer le plugin manuellement sans passer par le décompresseur WordPress.

Décompressez le ZIP sur votre machine, puis copiez le dossier dans :

wp-content/plugins/nom-du-plugin/

Vous pouvez ensuite l’activer depuis l’administration WordPress ou avec WP-CLI :

wp plugin activate nom-du-plugin

Cette méthode contourne l’installation ZIP, mais elle ne corrige pas le problème de fond. Si WordPress ne peut pas décompresser les archives, les mises à jour continueront probablement à échouer.

Ce qu’il ne faut pas faire

  • Ne modifiez pas wp-admin/includes/class-pclzip.php.
  • Ne remplacez pas des fonctions WordPress core pour contourner l’erreur.
  • Ne désactivez pas les mises à jour pour masquer le problème.
  • Ne corrigez pas seulement le PHP CLI si WordPress utilise PHP-FPM.
  • Ne laissez pas un fichier phpinfo.php en ligne.
  • Ne supprimez pas tous les services PHP de Local sans savoir quelle version votre site utilise.

Modifier WordPress core pour corriger cette erreur serait le mauvais combat. C’est un problème d’environnement PHP. Il faut donc corriger PHP, Local, Docker ou le serveur.

Checklist de diagnostic

  • L’erreur apparaît-elle uniquement dans Local ?
  • L’erreur apparaît-elle avec tous les plugins ZIP ou seulement certains fichiers ?
  • La même archive s’installe-t-elle sur un autre site ?
  • WordPress Site Health signale-t-il zip ou zlib comme manquant ?
  • php -m affiche-t-il zip et zlib ?
  • Le PHP CLI est-il le même que le PHP utilisé par WordPress ?
  • Le fichier php.ini modifié est-il bien celui chargé par le site ?
  • PHP-FPM ou Apache a-t-il été redémarré après installation de l’extension ?
  • Dans Docker, l’image a-t-elle été reconstruite ?
  • Dans Local, le service PHP concerné a-t-il été retéléchargé ?

Résumé des corrections

EnvironnementCorrection probable
Local sur macOSRéinstaller les services PHP de Local ou changer de version PHP
Ubuntu/DebianInstaller php-zip ou php8.3-zip, puis redémarrer PHP-FPM/Apache
Fedora/Rocky/AlmaLinuxInstaller php-zip, puis redémarrer php-fpm ou httpd
DockerInstaller libzip-dev, zlib1g-dev, compiler zip, puis reconstruire l’image
ComposerCorriger les extensions du PHP CLI utilisé par Composer
MAMP/XAMPP/LaragonActiver les extensions dans le bon php.ini, puis redémarrer le service

À retenir

  • L’erreur Missing zlib extensions survient quand WordPress ne peut pas décompresser une archive.
  • Le fichier class-pclzip.php n’est pas le vrai problème.
  • WordPress a besoin de l’extension PHP zip, avec zlib comme fallback dans certains cas.
  • Sur Local, le problème peut venir d’un service PHP embarqué incomplet ou cassé.
  • Sur Linux, la correction passe souvent par l’installation de php-zip.
  • Sur Docker, il faut corriger l’image puis reconstruire le conteneur.
  • Vérifiez toujours le PHP utilisé par WordPress, pas seulement le PHP CLI.
  • Ne modifiez jamais les fichiers du core WordPress pour contourner cette erreur.

En résumé, l’erreur Abort class-pclzip.php : Missing zlib extensions ne se corrige pas dans WordPress, mais dans l’environnement PHP. Activez zip, vérifiez zlib, redémarrez le bon service, puis relancez l’installation du plugin ou du thème. WordPress retrouvera alors sa capacité très sous-estimée à ouvrir un fichier ZIP sans drame.

Sources

Demandez à l'IA son opinion
Gravatar for Matt Biscay

Je suis Matt Biscay, développeur WordPress & WooCommerce certifié chez Codeable, administrateur système et enseignant.

J’aide les entreprises à créer, optimiser et fiabiliser leurs sites WordPress avec une approche technique propre : performance, sécurité, maintenance, développement sur mesure et résolution de problèmes complexes.

Sur Skyminds, je partage des tutoriels WordPress, WooCommerce, Linux et administration système, avec des solutions testées sur des cas réels et pensées pour durer.

Découvrez mes services WordPress et WooCommerce.

Laisser un commentaire