PHP 7.1.17下执行sudo composer install报错:Phar类未找到
首先咱们先明确问题场景:
- 普通用户执行
composer install完全正常,输出仅提示废弃包和SSL禁用的警告; - 但用
sudo composer install就直接报错Fatal error: Uncaught Error: Class 'Phar' not found in /usr/bin/composer:23; - 而你通过
php -i查看到 Phar 扩展明明处于启用状态。
问题根源
这个问题几乎都是普通用户和 root 用户的 PHP 环境不一致导致的:你当前普通用户使用的 PHP 已经开启了 Phar 扩展,但 root 用户的 PHP 环境(可能是另一个版本,或者对应的 php.ini 未启用 Phar)根本没加载这个扩展,而 /usr/bin/composer 脚本默认调用的是 root 环境下的 PHP,自然就找不到 Phar 类了。
具体解决方案
方案1:强制让 sudo 下的 composer 使用普通用户的 PHP
先找到你普通用户正在使用的 PHP 路径:
which php
假设输出是 /usr/local/bin/php,那直接用这个路径的 PHP 来运行 composer:
sudo /usr/local/bin/php /usr/bin/composer install
这样就绕开了 root 环境里有问题的 PHP,直接用你确认过带有 Phar 扩展的版本。
方案2:修复 root 用户的 PHP 配置
- 先切换到 root 账号,检查当前 root 使用的 PHP 是否启用了 Phar:
sudo su php -i | grep Phar
如果输出里看不到 Phar: PHP Archive support => enabled,说明 root 的 PHP 确实没启用 Phar。
- 找到 root 对应的 php.ini 文件:
php --ini
查看输出里的 Loaded Configuration File 那一行,就是需要编辑的文件。
- 打开这个 php.ini,找到 Phar 相关配置,确保下面的行没有被注释(去掉前面的
;):
extension=phar.so phar.readonly = Off # 部分场景下需要关闭只读,可选但建议加上
保存退出后,再尝试执行 sudo composer install 应该就能正常运行了。
方案3:尽量避免用 sudo 执行 composer
其实不太推荐用 sudo 运行 composer,因为这样生成的文件/目录权限会变成 root,后续普通用户操作这些文件会遇到权限问题。如果不是必须使用 sudo,优先用普通用户执行;如果确实需要,优先选择方案1,避免修改 root 的全局配置。
另外提一句,你普通用户执行 composer 时提示 SSL/TLS 保护禁用,建议检查下 PHP 的 OpenSSL 扩展是否正常启用,或者配置 composer 的 SSL 证书,这样能更安全地下载依赖包。
内容的提问来源于stack exchange,提问作者Fabio_M

