需启用PHP zlib扩展:先用php -m验证是否加载,未启用则在CLI对应的php.ini中取消extension=zlib(PHP≥8.0)或extension=zlib.so(旧版)注释;Linux/macOS检查ext目录是否存在zlib.so,缺失则安装php-zlib(Debian)或php-zlib(RHEL)或重装Homebrew PHP;Windows确认php/ext/下有php_zlib.dll并取消php.ini中对应行注释,修改后重启终端。

Composer 报错 zlib extension is missing 怎么办
直接原因很明确:PHP 运行时没加载 zlib 扩展,而 Composer 在下载包、解压 .tar.gz 或 .zip 时强依赖它。不装这个扩展,composer install、composer create-project 都会卡在“failed to open stream: operation failed”或直接报 zlib extension is missing。
确认 PHP 是否真的没启用 zlib
别急着改配置,先验证问题是否出在这里:
- 运行
php -m | grep zlib,无输出即未启用 - 运行
php -i | grep "zlib version",有结果说明已加载;没结果或报错说明缺失 - 注意:CLI 和 Web(如 Apache/Nginx)可能用不同
php.ini,composer走的是 CLI SAPI,所以只看php -i输出的Loaded Configuration File对应的那个php.ini
Linux/macOS 下启用 zlib 的常见路径
绝大多数现代 PHP 发行版(包括 apt/yum/brew 安装的)默认编译了 zlib 支持,只是扩展未启用。操作分两步:
- 检查
ext/zlib.so是否存在:php -r "echo ini_get('extension_dir');",然后ls $(php -r "echo ini_get('extension_dir');")/zlib.so - 若存在,在
php.ini中取消注释:extension=zlib(PHP ≥ 8.0)或extension=zlib.so(旧版本) - 如果
zlib.so找不到,说明 PHP 编译时没带--with-zlib。Ubuntu/Debian 用户补装:sudo apt install php-zip(该包会连带拉取 zlib 依赖);CentOS/RHEL:sudo yum install php-zlib或dnf install php-zlib - macOS + Homebrew 用户:
brew install php@8.2(或其他版本)会自动包含 zlib;若单独编译过 PHP,请确保 configure 时加了--with-zlib=/usr(macOS 系统 zlib 路径)
Windows 下 php.ini 修改要点
Windows 用户常因路径和扩展名混淆出错:
- 打开
php.ini(通过php --ini确认位置),搜索php_zlib.dll - 取消注释这一行:
extension=php_zlib.dll(PHP 7.x)或extension=zlib(PHP 8.0+) - 确保
php_zlib.dll文件真实存在于php/ext/目录下;若缺失,说明安装包不完整,建议重下官方线程安全(TS)版 ZIP 包 - 修改后必须重启命令行终端(CMD/PowerShell),否则
php -v仍读缓存配置
php -m | grep zlib # 正常应输出:zlib
zlib 不是可选功能,它是 Composer 解包逻辑的底层依赖,哪怕你只装纯 PHP 包(不含二进制),也会在 vendor 压缩流校验阶段触发。漏掉这一步,后续所有依赖操作都不可靠。










