Composer 报错本质是 PHP 未启用 phar 扩展或 phar.readonly = On;需通过 php -m、php -i 验证,修改对应 php.ini 启用 extension=phar.so(Linux/macOS)、extension=php_phar.dll(Windows)或安装 php*-phar(Alpine),并设 phar.readonly = Off。

Composer 报错 Could not open input file: composer.phar 或提示 phar extension is missing,本质不是 Composer 本身坏了,而是 PHP 运行时没加载 phar 扩展——这个扩展默认启用,但某些精简版 PHP(如 Alpine 容器、部分 macOS Homebrew 安装、Windows XAMPP 绿色版)会把它编译禁用或注释掉。
确认 phar 扩展是否真的未启用
别急着改配置,先验证问题根源:
- 运行
php -m | grep phar,无输出即未启用 - 运行
php -i | grep "phar.readonly",若返回phar.readonly => On,说明扩展已加载但写权限受限(影响composer install解包) - 运行
php --ini查看实际生效的php.ini路径,避免改错文件
启用 phar 扩展的三种常见场景修复
不同安装方式下,phar 的开关位置和方式不同:
-
Linux/macOS(源码/PHPBrew/Homebrew):检查
php.ini中是否有extension=phar.so;若没有,添加该行(注意不是extension=phar) -
Windows(XAMPP/WAMP):打开
php.ini,取消注释;extension=php_phar.dll→ 改为extension=php_phar.dll -
Docker(Alpine):基础镜像常不带
phar,需在Dockerfile中加apk add php7-phar(PHP 7)或apk add php8-phar(PHP 8)
phar.readonly = Off 是必须的吗?
是。Composer 在执行 install、update 时会动态解压和写入 phar 包,若 phar.readonly = On(PHP 默认值),会报类似 PharError: Cannot write to phar archive 的错误。
立即学习“PHP免费学习笔记(深入)”;
修改方法:在 php.ini 中确保有这一行:
phar.readonly = Off
注意:phar.readonly 是 INI 设置项,不是扩展名,不能写成 extension=phar.readonly;它必须出现在全局配置段,不能只在某个 [phar] 小节里。
验证修复是否生效
改完配置后,必须重启 PHP 进程(CLI 模式无需重启 Web 服务,但需重新开终端):
- 运行
php -m | grep phar应输出phar - 运行
php -r "echo Phar::canWrite() ? 'ok' : 'fail';"应输出ok - 再跑
php composer.phar --version,不再报扩展缺失或只读错误
如果仍失败,大概率是 CLI 和 Web 使用了不同的 php.ini,或者容器中 PHP 配置被覆盖(比如通过 PHP_INI_SCAN_DIR 加载了额外 ini 文件,其中又把 phar 关掉了)。











