PHP8.2版本下Flarum测试邮件报错的解决方案 作者: bluish 时间: 2024-06-11 分类: 折腾 ##情景 在PHP8.2版本环境下能顺利搭建Flarum1.8.5,但在后台配置SMTP发信,发送测试邮件时,会提示:**“糟糕,出错啦,请刷新页面重试。”** 有关于Flarum的搭建参照:[宝塔面板(aaPanel)搭建Flarum][1] ![2024-06-10T04:00:36.png][2] 检查网页端控制台,错误如下: ![屏幕截图 2024-06-10 120156.png][3] 检查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][4] ####升级方法: ``` 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`中`关闭`即可。 [1]: https://bluish.cc/archives/2041/ [2]: https://bluish.cc/usr/uploads/2024/06/423425949.png [3]: https://bluish.cc/usr/uploads/2024/06/367087245.png [4]: https://dev.to/dakujem/swiftmailer-on-php-82-4elk PHP8.2版本下Flarum测试邮件报错的解决方案 http://bluish.net/archives/2090/ 作者 bluish 发布时间 2024-06-11 许可协议 CC BY-SA 4.0 复制版权信息 标签: debug, 服务器, Flarum, PHP
php都8.2了,更新好快呀。
是的~ 不过还是不要追求太新的好,好多不兼容。
哈哈哈很感谢提供的这个方法,搜了好几条方法都不适用,确实新版本的各项兼容都不是很好。
还是会建议用老版本~尤其是对我这种强迫症来说,看不得报错😂