情景

在PHP8.2版本环境下能顺利搭建Flarum1.8.5,但在后台配置SMTP发信,发送测试邮件时,会提示:“糟糕,出错啦,请刷新页面重试。”
有关于Flarum的搭建参照:宝塔面板(aaPanel)搭建Flarum

2024-06-10T04:00:36.png

检查网页端控制台,错误如下:
屏幕截图 2024-06-10 120156.png

检查PHP日志,错误如下:

2024/06/10 11:51:34 [error] 25932#0: *24187 FastCGI sent in stderr: "
PHP message: PHP Deprecated: Callables of the form ["Swift_SmtpTransport", "Swift_Transport_EsmtpTransport::__construct"] are deprecated in 
/www/wwwroot/wadao.net/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SmtpTransport.php on
line 36;
PHP message: PHP Deprecated: Callables of the form ["Swift_Message", "
Swift_Mime_SimpleMessage::__construct"] are deprecated in 
/www/wwwroot/wadao.net/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Message.php on line 46; 
PHP message: PHP Fatal error: Uncaught Laminas\HttpHandlerRunner\Exception\EmitterException: Output has been emitted previously; cannot emit response in /www/wwwroot/wadao.net/vendor/laminas/laminas-
httphandlerrunner/src/Exception/EmitterException.php:20

错误原因

Flarum依赖的SwiftMailer库包含了一些 PHP8.2已弃用的功能,例如以ClassName, 'methodName'形式使用的回调,以及动态属性创建。
经测试,在纯净的Flarum程序上,会出现发送测试邮件报错、更改邮箱报错,此处理方法仅能解决测试邮件报错。同时,很多适配于1.8.5版本的Flarum扩展插件将会引发报错,例如fof/likes、mattoid/flarum-ext-money-history、littlecxm/whisper、fof/mentions(空内容发帖/回复)等,需要等待Flarum后续版本更新依赖。

解决方法

方法一、安装Swiftmailer fork

Swiftmailer可以在最高达8.1版本的PHP上运行,但不支持更高版本。
Swiftmailer分支swiftmailer-legacy,可以在 PHP 8.2 上运行而不会出现任何弃用警告。
有关此分支详情:Swiftmailer on PHP 8.2

升级方法:

composer require viaaurea/swiftmailer-legacy -W

这将替换原始软件包,而不会破坏其他依赖于正在安装的Swiftmailer软件包的需求。该分支是完全兼容的原始Swiftmailer的直接替代品,只需最少的代码更改即可支持PHP8.2。
安装完成后,再次发送测试邮件便不会出现报错。但此方法只适用于解决SwiftMailer库引发的问题,更多由动态属性创建等引发的报错不会得到解决。

方法二、关闭PHP错误信息输出

由于各错误并不影响程序的实际运行,我们可以通过关闭display_errors来隐藏警告。
在/public/中创建php.ini,屏蔽错误信息。内容如下:

display_errors = Off
log_errors = On
error_log = /var/log/php-error.log

若为宝塔面板,直接在PHP管理——配置修改——display_errors关闭即可。

PHP8.2版本下Flarum测试邮件报错的解决方案

https://bluish.cc/archives/2090/

作者

bluish

发布时间

2024-06-11

许可协议

CC BY-SA 4.0

标签: debug, 服务器, Flarum, PHP

已有 4 条评论

  1. php都8.2了,更新好快呀。

    1. 是的~ 不过还是不要追求太新的好,好多不兼容。

  2. 哈哈哈很感谢提供的这个方法,搜了好几条方法都不适用,确实新版本的各项兼容都不是很好。

    1. 还是会建议用老版本~尤其是对我这种强迫症来说,看不得报错😂

添加新评论