根本原因是composer调用的php二进制与终端中php -v使用的不是同一个;需通过which php和composer diagnose | grep "php binary"对比路径和版本,确保homebrew php(如/opt/homebrew/bin/php)在path最前端,或直接指定php_binary环境变量。

Composer install 报 “PHP version does not satisfy” 但 php -v 显示版本正确
根本原因不是 PHP 没装好,而是 Composer 启动时调用的 php 二进制文件和你在终端里敲 php -v 用的根本不是同一个。
Homebrew 安装的 PHP(比如 /opt/homebrew/bin/php)常被加到 $PATH 后段,而系统默认的 /usr/bin/php(通常是 PHP 7.4 或 8.0)仍在前段,Composer 就会优先选它。
- 运行
which php和composer diagnose | grep "PHP binary",对比两者的路径和版本是否一致 - Mac 上 Homebrew PHP 的典型路径是:
/opt/homebrew/bin/php(M1/M2)或/usr/local/bin/php(Intel),确保它在$PATH最前面 - 临时验证:直接用完整路径跑命令,比如
/opt/homebrew/bin/php /usr/local/bin/composer install
Homebrew PHP 装了却提示 “PHP binary not found”
这说明 Composer 启动时压根找不到 php 命令——哪怕你终端里能执行,也不代表 Composer 能看到。
常见于:Homebrew 安装后没重载 shell 配置、用了 alias、或 CLI 版本未启用(比如 MAMP 自带 PHP 不在 PATH)。
- 运行
command -v php(比which更可靠,能识别 alias) - 检查
php -v和/usr/bin/php -v输出是否不同,确认你信任的是哪个 - 如果
command -v php无输出,说明当前 session 没加载 PHP 路径,需往~/.zshrc加export PATH="/opt/homebrew/bin:$PATH"并source ~/.zshrc - CI/容器等受限环境,直接设
PHP_BINARY环境变量最稳:export PHP_BINARY=/opt/homebrew/bin/php
为什么 Homebrew 的 composer 包不推荐用
Homebrew 的 composer 包自 2023 年起已弃用,它会把 Composer 绑定到系统 PHP,且路径管理混乱,容易覆盖权限、混用版本、导致 global require 失效。
- 官方推荐做法:先确保
php -v和which php正确,再用脚本安装:curl -sS https://getcomposer.org/installer | php - 移
composer.phar到/opt/homebrew/bin/composer(M1/M2)并chmod +x - 避免
sudo brew install composer—— 它可能把二进制塞进/usr/local/bin,却仍调用/usr/bin/php
镜像配了却 still loading repositories 卡住
换源后卡在 “Loading composer repositories”,大概率不是网络问题,而是镜像配置本身没生效,或者 CA 证书过期。
- 验证是否真写进去了:
composer config -g repo.packagist必须输出完整 JSON,如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 键名必须是
repo.packagist(不是repos.packagist),type必须显式为composer,URL 末尾必须有/ - 如果项目
composer.json里有"repositories": []字段,全局镜像会被完全忽略——改用项目级配置:composer config repo.packagist composer https://mirrors.aliyun.com/composer/ - SSL 错误常因 PHP 的
openssl.cafile指向旧 CA 包,下载最新cacert.pem并在php.ini中统一设置openssl.cafile和curl.cainfo
Homebrew PHP 和 Composer 的路径耦合是最容易被跳过的细节,尤其在重装或切换版本后,php -v 和 composer diagnose 的输出不一致,几乎总是问题起点。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











