ubuntu默认不带zip扩展是因为php元包仅含基础组件,zip等功能模块被拆分为独立包(如php-zip)按需安装以精简环境;需运行sudo apt install php-zip启用,再用php -m | grep zip验证。

因为纯净 Ubuntu 系统默认安装的 PHP 不包含 zip 扩展模块,而 Laravel 项目依赖 Composer 安装,Composer 在解压第三方包(如 vendor 中的库)时必须调用 ZipArchive 类,该类由 PHP 的 zip 扩展提供。没有它,composer install 或 laravel new 就会直接报错 “zip extension is missing” 或 “requires ext-zip”。
为什么 Ubuntu 默认不带 zip 扩展
Ubuntu 的 php 元包(如 php8.2)只安装最基础的运行时组件,像 zip、mbstring、xml、gd 这类功能型扩展被拆分为独立包,按需安装。这是为了精简默认环境、降低安全面和资源占用——普通 Web 服务未必需要压缩/解压能力。
- PHP 核心包只含
cli、fpm、common等基础支持 - zip 扩展对应独立包名:
php-zip(自动适配当前默认 PHP 版本) - 其他常见缺失扩展同理:比如
php-mbstring、php-xml、php-curl
如何确认 zip 确实没启用
别猜,直接验证 CLI 模式下的真实状态:
- 运行
php -m | grep zip—— 无输出即未加载 - 运行
php --ini查看实际生效的配置路径(注意区分 CLI 和 Web 的 php.ini) - 运行
php -r "var_dump(class_exists('ZipArchive'));"—— 返回bool(false)就坐实问题
一键安装并生效的方法
在 Ubuntu 上,只需一条命令安装,无需手动改 php.ini:
sudo apt update && sudo apt install php-zip- 安装后,系统会自动在 CLI 配置目录(如
/etc/php/8.2/cli/conf.d/20-zip.ini)写入extension=zip.so - 新开终端执行
php -m | grep zip应有输出;再跑composer install就不再卡 zip
容易忽略的关联问题
装完 zip 扩展还报错?可能是这些环节出了问题:
- CLI 和 Web 用的不是同一份 php.ini —— 一定要用
php --ini确认路径,别去改 Apache/Nginx 的配置 - libzip 系统库太旧(尤其老版 Ubuntu 或 Docker Alpine)—— PHP 8.0+ 要求 libzip ≥ 1.6.0,否则解压时崩溃
- Docker 环境中只装了
php-zip,但没装系统级unzip命令 —— Composer 默认优先调用它,得补apk add unzip或apt install unzip











