1

我有一些噩梦般的 IMAP 代码,这让我花了很长时间来编写代码。当 7.x 是当前的 PHP 时,我做到了,并且多年来我一直使用它来将我的电子邮件提取到我的 PHP 系统中,没有任何这样的问题。

昨天,PHP 8 终于作为“GA”(稳定版)发布了。我更新了。果然,更新软件时总会有一些奇怪的问题。现在,我的 IMAP 代码用这些废话淹没了日志:

imap_msgno(): Bad message number

相关代码片段:

$message_number_array = imap_search($specific_mailbox_connection, 'ALL', SE_UID);

if (count($message_number_array))
{
    foreach ($message_number_array as $message_number)
    {
        $header_info = imap_headerinfo($specific_mailbox_connection, imap_msgno($specific_mailbox_connection, $message_number));

我已经双重验证这$message_number_array确实是一个整数数组,没有别的。它直接来自imap_search. 这些号码怎么可能是“坏消息号码”?

是的,我一直在到处使用 UID。与昨天与 PHP 7.4.12 完美配合时相比,我的代码没有任何改变。

像往常一样,当我搜索时,网上的相关信息为零。

在这种情况和这种情况下我该怎么办?我什至不明白这是怎么可能的——更不用说我将如何解决它了。

4

3 回答 3

0

对于将来搜索的任何其他人,这已被确认为实现中的错误立即修复

该修复程序包含在2021 年 1 月 7 日发布的 PHP 8.0.1中。

对于任何想要帮助确保在“普遍可用”之前捕获这些类型的错误的人,请通过针对 Beta 和 Release Candidate 构建测试您的代码来提供帮助。总是有很多功能没有被自动化测试覆盖,只有在有人尝试运行他们的真实代码时才会被发现。

于 2021-01-14T20:57:13.263 回答
0

这是 PHP8 中的一个已知错误,请参阅

https://bugs.php.net/bug.php?id=80438

于 2020-11-30T13:21:10.447 回答
0

不确定是否可以提供帮助,但根据 php_imap.c 中的源代码更改,他们在两个月前将一些警告提升为错误,您的代码可能正在处理警告而您没有注意到?

您可以检查此责备视图中的更改:

更改以促进对错误的警告

在第 144 行加注星标,正如您在 imap_msgno 源代码(第 2835 行)中看到的那样,它正在调用 PHP_IMAP_CHECK_MSGNO。

如果没有看到任何代码或日志,很难说除了代码更改之外发生了什么。

于 2020-11-27T05:15:04.843 回答