Laravel 11 升级前必须确保 PHP ≥8.2,否则 php artisan 会直接报 Fatal error 或静默失败;需运行 php -v 和 php -m 验证实际版本及扩展(如 mbstring、pdo、curl 等),且 Laravel 11 不兼容 PHP 8.1 及以下版本。

升级 Laravel 11 前若 PHP 版本不达标,php artisan 命令会直接报 Fatal error 或静默失败,连服务都起不来,根本不会给你提示“版本不对”的友好错误。
确认当前 Laravel 实际版本
别信 composer.json 里写的 "laravel/framework": "^10.0",它可能早已被手动改过或锁死。打开终端,进入项目根目录,运行:
php artisan --version
输出类似 Laravel Framework 10.48.2 才是真实版本。如果显示 9.x 或更低,说明你还没到升级 Laravel 11 的起点——得先升到 10.x 再考虑 11。
查清 PHP 实际运行版本与扩展状态
这一步不能只看 php -v 的第一行,要验证 CLI 模式下真实加载的版本和扩展:
运行 php -v,输出必须为 PHP 8.2.x、PHP 8.3.x 或 PHP 8.4.x;任何 8.1.x 及以下版本都会触发 ParseError。
接着运行:
php -m | grep -E "(mbstring|openssl|pdo|tokenizer|xml|ctype|json|curl)"
每项都必须有输出。缺 mbstring?artisan tinker 进不去;缺 pdo?数据库迁移直接崩;缺 curl?HTTP 客户端调用全挂。Mac 用户常见问题是 brew install php@8.3 后没执行 brew link php@8.3,导致系统仍调用旧版 PHP。
对照 Laravel 版本锁定 PHP 范围
不是“PHP 越新越好”,而是严格按框架版本反向匹配:
① 如果你当前是 Laravel 10.x → 必须 ≥10.42 才支持 PHP 8.3;低于 10.42 升级 PHP 8.3 会导致 vendor/autoload.php fatal error。
② 如果你目标是 Laravel 11.x → 只认 PHP 8.2+,但拒绝 PHP 8.1(enum 类型、never 返回值等语法不可降级)。
③ 如果你还在跑 Laravel 9.x → 它明确不兼容 PHP 8.3,因 ReflectionUnionType 行为变更已被移除,强行升级 PHP 8.3 后 artisan serve 都无法启动。
注意:Laravel 11 不接受任何降级兼容,PHP 8.2 是硬门槛,不是推荐值。
绕过检查的后果很严重
方法一:在 composer.json 中加 "platform-check": false
这只是屏蔽警告,不阻止错误发生。依赖安装看似成功,但运行时遇到 enum 或 readonly 属性就直接报 ParseError。
方法二:用 composer install --ignore-platform-reqs 强装
这会让 composer 拉下不兼容的包,比如 laravel/framework ^11.0 + php 8.1 环境,结果是 vendor/autoload.php 解析失败,连 php -v 都可能报错。
方法三:修改 php.ini 把 extension=mbstring 注释去掉却不重启 PHP-FPM 或终端
【改完 php.ini 必须重启 PHP 运行时】,否则 php -m 仍看不到 mbstring,artisan 命令会在某次随机调用中突然崩溃,错误堆栈末尾才显示 Class 'Mbstring' not found。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











