Laravel 8升级9后cPanel部署报A facade root has not been set错误
问题根本原因
- 你看到的
A facade root has not been set、日志通道未定义都属于框架初始化失败后的连锁次生报错,核心根因是Laravel日志中明确记录的语法解析错误:ParseError: syntax error, unexpected token ")" at vendor/symfony/finder/Finder.php:588 - 该语法错误由服务器PHP版本不满足要求直接触发:Laravel 9 最低要求PHP 8.0版本,配套依赖的
symfony/finder6.x版本使用了PHP 8.0及以上才支持的新语法,低版本PHP解析代码时无法识别新语法,就会抛出意外右括号的解析错误。 - 你之前使用
composer install --ignore-platform-reqs的操作,仅能让Composer跳过版本校验安装依赖包,不会改变服务器实际运行的PHP版本。升级前Laravel 8可正常运行是因为Laravel 8最低支持PHP 7.3,依赖兼容低版本;升级到Laravel 9后依赖全部要求高版本PHP,绕开Composer检查无法解决代码本身的语法兼容问题。 - 你观察到的
bootstrap/app.php文件内容变少是Laravel 9的正常调整:默认服务提供者、门面别名的注册逻辑已经迁移到框架内部自动加载,不需要在该文件中手动注册,你手动添加的SEOTools服务提供者注册写法没有问题,不是故障点。
修复步骤
- 切换站点运行的PHP版本
- 登录cPanel面板,找到「MultiPHP Manager」或「Select PHP Version」功能,将对应站点绑定的PHP版本切换为8.1及以上。注意必须修改Web服务(Apache/Nginx)实际使用的PHP版本,仅修改命令行CLI版本不会生效。
- 版本切换后,在public目录下新建临时文件
phpinfo.php,写入代码<?php phpinfo();,通过浏览器访问该文件确认PHP版本确实为8.1+,验证完成后立即删除该临时文件避免安全风险。
- 清理旧文件
- 删除站点根目录下的整个
vendor目录 - 删除
bootstrap/cache目录下所有缓存文件(包括config.php、packages.php、services.php、events.php等)
- 删除站点根目录下的整个
- 重新安装依赖
- 在站点根目录执行
composer install,不要添加--ignore-platform-reqs参数,如果命令执行过程中不再提示PHP版本不满足要求,说明PHP版本配置正确。
- 在站点根目录执行
- 清理项目缓存
- 依次执行以下命令完成缓存清理:
php artisan config:clear php artisan cache:clear php artisan route:clear php artisan view:clear - 访问验证
- 重新访问站点即可恢复正常,若后续出现其他报错,属于独立问题,和本次的PHP版本不兼容核心故障无关,按新报错提示单独排查即可。
内容的提问来源于stack exchange,提问作者DerickMasai
相关产品推荐
相关产品推荐

