Lors de l’installation manuelle d’un plugin ou d’un thème WordPress, vous pouvez tomber sur cette erreur :
Unpacking the package…
Abort 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.
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.
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.
Cas Local : changer temporairement de version PHP
Dans Local, vous pouvez aussi tester une autre version de PHP depuis les réglages du site.
- Ouvrez Local.
- Sélectionnez le site concerné.
- Allez dans les réglages du site.
- Changez la version de PHP.
- Redémarrez le site.
- 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.
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.phpen 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
zipouzlibcomme manquant ? php -maffiche-t-ilzipetzlib?- Le PHP CLI est-il le même que le PHP utilisé par WordPress ?
- Le fichier
php.inimodifié 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
| Environnement | Correction probable |
|---|---|
| Local sur macOS | Réinstaller les services PHP de Local ou changer de version PHP |
| Ubuntu/Debian | Installer php-zip ou php8.3-zip, puis redémarrer PHP-FPM/Apache |
| Fedora/Rocky/AlmaLinux | Installer php-zip, puis redémarrer php-fpm ou httpd |
| Docker | Installer libzip-dev, zlib1g-dev, compiler zip, puis reconstruire l’image |
| Composer | Corriger les extensions du PHP CLI utilisé par Composer |
| MAMP/XAMPP/Laragon | Activer les extensions dans le bon php.ini, puis redémarrer le service |
À retenir
- L’erreur
Missing zlib extensionssurvient quand WordPress ne peut pas décompresser une archive. - Le fichier
class-pclzip.phpn’est pas le vrai problème. - WordPress a besoin de l’extension PHP
zip, aveczlibcomme 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.



