composer show --platform 显示的才是 composer 实际依赖的 php 版本和扩展,比 php -v 更真实;90% 的“配置不满足”源于 cli 调用的 php 与 composer 实际使用的不一致,需通过 which php/where php 确认路径、php -m 验证扩展加载、php --ini 核对配置文件,并区分 cli 与 web sapi 配置。

直接看 composer show --platform,它显示的才是 Composer 实际依赖的 PHP 版本和扩展——比 php -v 和你“以为装好的”更真实。90% 的“配置不满足”问题,根源是 CLI 调用的 PHP 和 Composer 认的不是同一个。
先确认 CLI PHP 是不是真 8.3
很多报错看着像版本不够,其实是 PATH 混乱导致调用了旧版 PHP:
- macOS Intel:运行
which php,输出必须是/usr/local/bin/php;如果是/usr/bin/php,说明还在用系统自带的旧版 - macOS Apple Silicon:应为
/opt/homebrew/bin/php,不是/usr/local/bin/php - Windows:运行
where php,第一个路径必须是你解压 PHP 8.3 的目录(如C:\php),否则要检查环境变量Path中该路径是否排在最前 - Linux(Debian/Ubuntu):
which php应指向/usr/bin/php8.3或/usr/local/bin/php,若为/usr/bin/php,大概率是没装php8.3-cli包
再查关键扩展有没有真正加载
Composer 报 “ext-mbstring missing” 或 “ext-fileinfo not loaded”,往往不是没装,而是没启用或没读到配置:
- 运行
php -m | grep -E "(mbstring|fileinfo|pdo|curl)",确认扩展名出现在列表里 - 如果没出现,先看
php --ini输出的 “Loaded Configuration File” 路径是否存在、是否可读 - Windows 下常见错误:php.ini 里写了
extension=php_fileinfo.dll,但实际文件叫php_fileinfo.dll—— 注意大小写和后缀是否匹配(TS/NT 版本 DLL 名可能不同) - Homebrew macOS:配置文件在
/opt/homebrew/etc/php/8.3/php.ini(Apple Silicon)或/usr/local/etc/php/8.3/php.ini(Intel),不是/etc/php.ini
最后验证 Web SAPI 和 CLI 是否一致
CLI 能跑不代表 Web 能跑,phpinfo() 显示的版本和扩展,由 Web 服务器决定,和终端完全无关:
- Apache 场景:确保已禁用旧模块(如
sudo a2dismod php8.2),启用新模块(sudo a2enmod php8.3),并重启服务(sudo apachectl restart) - Nginx + PHP-FPM:改的是
/etc/php/8.3/fpm/php.ini,重启的是php8.3-fpm服务,不是 nginx 本身 - 快速对比:执行
php -i | grep 'Loaded Configuration File'(CLI 配置),再建一个test.php写<?php phpinfo(); ?>浏览器访问(Web 配置),两者的配置路径和扩展列表必须对得上
最容易被忽略的一点:PHP 8.3 的 JIT 和 OPcache 默认不启用,json_validate() 等新函数虽能用,但性能可能反不如 8.2;如果你在压测或 CI 中发现行为异常,别只盯版本号,先跑一遍 php -r "echo ini_get('opcache.jit');" 看返回是不是 tracing。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











