Homebrew安装php@8.2后php -v仍显示系统旧版,是因PATH未生效:需执行brew link --force php@8.2,并将Homebrew bin路径加入~/.zshrc(如eval "$(/opt/homebrew/bin/brew shellenv)"),再source生效;同时须手动启用php.ini中的pdo.so和mbstring.so扩展,确保php -v、which php、php --ini、composer --version四者版本一致。

php@8.2 是 Homebrew 官方维护的稳定版本,不是“旧版”,而是 ThinkPHP 6+、Laravel 9/10 等主流框架实际兼容性最好的 PHP 版本之一。直接装 php(默认最新)反而容易踩扩展缺失、Xdebug 不兼容、Composer autoload 失败等坑。
brew install php@8.2 后 php -v 还是系统旧版?
这不是安装失败,是 PATH 没生效。Homebrew 把 php@8.2 的二进制放在 /opt/homebrew/bin/php(Apple Silicon)或 /usr/local/bin/php(Intel),但 shell 默认不认这个路径。
- 先确认是否已执行
brew link --force php@8.2—— 缺这步,which php会指向/usr/bin/php - 检查
$PATH是否包含 Homebrew bin:运行echo $PATH | grep homebrew(M1/M2)或echo $PATH | grep local(Intel),无输出就说明没加载 - 补上初始化脚本:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc(M1/M2)或echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zshrc(Intel) -
source ~/.zshrc后再验证:which php应输出/opt/homebrew/bin/php,php -v显示PHP 8.2.x
装完 php@8.2,ThinkPHP 启动报 Class 'PDO' not found
PDO 不是 ThinkPHP 的 bug,是 Homebrew 的 php@8.2 默认不启用任何扩展 —— 包括 pdo 和 mbstring,而这两个是 ThinkPHP 6+ 启动硬依赖。
- 先查扩展是否已加载:
php -m | grep -E "pdo|mbstring",若无输出,说明没启用 - 找到对应
php.ini:php --ini输出里 “Loaded Configuration File” 路径,通常是/opt/homebrew/etc/php/8.2/php.ini - 用编辑器打开它,取消注释这两行:
extension=pdo.so和extension=mbstring.so - 改完保存,重启终端(旧 shell 会缓存旧配置),再运行
php -m验证
composer install 报 vendor/autoload.php 找不到
这不是权限问题,是 Composer 调用了系统自带的 PHP(/usr/bin/php),而不是你刚装的 php@8.2 —— 导致 composer 自己的 autoloader 都没生成。
PHP 8.5.12 RC 1 候选版修复 BZ2、DOM、PDO、Opcache/JIT 和扩展内存安全问题,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 运行
which composer,再运行composer --version,看它是否和php -v显示同一版本 - 如果版本不一致,说明
composer没走对 PHP:先brew uninstall composer,再brew install composer(Homebrew 版 Composer 会自动绑定当前brew link的 PHP) - 首次运行前建议设国内镜像:
composer config -g repo.packagist composer https://packagist.phpcomposer.com - 确保在 ThinkPHP 项目根目录(含
think文件)下执行composer install
php think serve 访问 localhost:8000 空白或报 Failed to listen
ThinkPHP 内置服务器封装了 php -S,但它对环境更敏感 —— 端口冲突、PHP 版本、目录结构、甚至 shell 权限都可能让它静默失败。
立即学习“PHP免费学习笔记(深入)”;
- 先手动测试底层能力:
php -S 127.0.0.1:8000 -t public/,能访问说明是 ThinkPHP 封装层的问题 - 检查端口是否被占:
lsof -i :8000,有结果就kill -9 [PID] - 别用
sudo php think serve—— Homebrew PHP 不需要 root,加 sudo 反而会让它读不到用户级php.ini,PDO 扩展就失效 - 确保当前目录是项目根目录(
ls能看到think、app/、public/),否则提示Could not open input file think
php -v、composer --version、php --ini、which php 这四条命令的结果必须全部对齐,少一个,后面所有框架、扩展、服务都会出不可预测的问题。


















