Ubuntu Nginx部署Laravel返回500错误,LoggerInterface语法错误原因咨询
psr/log语法错误触发Laravel 500报错的原因和解决方法
该报错的核心本质是当前运行的PHP版本不支持联合类型语法:| 表示的联合类型是PHP 8.0才正式支持的特性,低于8.0的PHP版本解析到该语法时就会抛出该错误。
可能的诱因
- CLI PHP版本与FPM版本不一致
命令行查询到的PHP 8.0.12是CLI模式下的版本,但Nginx转发请求调用的PHP-FPM版本低于8.0,是最常见的触发原因。你可以在站点public目录新建info.php写入<?php phpinfo(); ?>,通过浏览器访问该文件查看web端实际生效的PHP版本,确认是否为8.0系列。 - psr/log依赖版本与运行环境不匹配
psr/log 3.0及以上版本明确要求PHP >=8.0,如果你在部署时使用CLI的PHP 8.0执行composer install,会自动安装最新的兼容版psr/log,但web端实际用低于8.0的PHP运行时就会触发语法报错。 - composer平台配置错误
如果你在本地开发环境是PHP 8.0,直接将vendor目录同步到服务器,或是composer配置中指定了高于服务器实际运行的PHP版本,也会出现依赖版本和运行环境不兼容的问题。
对应解决方案
- 修正Nginx的PHP-FPM指向
确认服务器已安装PHP 8.0-FPM后,修改站点Nginx配置中的fastcgi_pass参数,指向正确的PHP8.0-FPM套接字,示例配置:
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
修改完成后执行sudo systemctl restart nginx php8.0-fpm重启服务即可。
- 锁定兼容的psr/log版本
如果暂时无法升级web端PHP版本,可以在composer.json的require段添加"psr/log": "^2.0",psr/log 2.x版本兼容PHP >=7.2,修改完成后执行composer update psr/log更新依赖即可。 - 锁定composer平台PHP版本
为避免后续再次出现类似的版本不匹配问题,可以在composer.json的config段添加平台版本锁定配置:
"config": { "platform": { "php": "8.0.12" } }
后续执行composer相关命令时,会强制按照指定的PHP版本安装兼容的依赖包。
内容的提问来源于stack exchange,提问作者Maha Waqar
相关产品推荐
相关产品推荐

