Laravel API部署正式服务器报BusServiceProvider语法错误邮件发送失败
问题根因
该错误是线上服务器PHP版本低于本地环境导致的语法不兼容问题:
你所用的Laravel版本核心代码中使用了PHP 7.3才支持的函数/方法参数末尾尾随逗号语法,PHP 7.2及更低版本无法解析该语法,就会抛出你看到的unexpected ')'语法错误。
数据库更新逻辑能正常执行,是因为DB操作在邮件队列派发逻辑之前,代码执行到邮件发送环节才会触发Laravel Bus服务的加载,此时解析BusServiceProvider.php文件碰到不兼容语法才会触发500错误,所以前面的DB逻辑可以正常跑完。
修复步骤
- 先验证版本问题:分别在本地和线上服务器执行
php -v命令,确认线上PHP版本是否低于7.3 - 推荐方案:将线上PHP版本升级到和本地环境一致,至少升级到7.4及以上(如果使用Laravel 8+建议升级到8.1及以上,同时安装好Laravel所需的全部扩展如mbstring、fileinfo、redis等)
- 临时兼容方案:如果暂时无法升级线上PHP版本,可将Laravel版本降级到7.x及以下,该版本核心代码未使用PHP7.3的新语法
- 版本调整后执行
composer install重新安装依赖,重启php-fpm服务和队列worker进程(队列是常驻进程,代码更新后必须重启才会加载新代码) - 额外优化:你提供的代码片段存在小隐患,
if($pass->telephone) $query_checker = '+233';逻辑中如果$pass->telephone为空,$query_checker变量会未定义,后续strpos调用会抛出警告,建议给$query_checker设置默认值避免该问题。
内容的提问来源于stack exchange,提问作者Danso Adjei
相关产品推荐
相关产品推荐

