PHP IMAP循环逐渐变慢

时间:2013-02-19 10:32:49

标签: php loops imap

我在使用IMAP时遇到了一些问题。 基本上,我连接到服务器以获取文件夹名称,为每个文件夹重新连接,循环遍历每条消息并执行我需要的操作。

它的工作除了事实上事情变得越来越慢。有这个想法吗?我有一种有趣的感觉,它与imap_body有关,因为它似乎导致了这个问题。我是否需要以某种方式为每个循环清除它?

我的代码看起来与此类似(但是删除了一些位)......

    $Mailbox = imap_open("$Hostname", "$Username", "$Password") or die('Error: ' . imap_last_error());
    $List = imap_list($Mailbox, "$Hostname", "*");

    if(is_array($List))
    {
            foreach ($List as $Folder)
            {
                    $FolderName = imap_utf7_decode($Folder);
                    $FolderStream = imap_reopen($Mailbox, "$Folder") or die('Error: ' . imap_last_error());
                    $FolderCount = imap_num_msg($Mailbox);
                    for($i=1;$i<=$FolderCount;$i++)
                    {
                            $EmailBody = imap_body($Mailbox, $i);
                            // Do whatever I need here
                    }
            }
    }
    imap_close($Mailbox);

更新 我通过使用服务器的IP地址而不是主机名加速了一点(这是除了指定端口之外),尽管问题仍然存在,因为事情变得越来越慢。

2 个答案:

答案 0 :(得分:1)

这完全取决于您的网络和连接IMAP服务器满足客户端请求的能力。 imap_body实际上是获取邮件正文,邮件大小可能从几kbs到20-25 mbs不等。

客户端无法做任何事情。

有时,如果数据传输过高,服务器会尝试限制连接,在这种情况下,您可以尝试重新连接连接并从之前的状态继续。

更新到IP不会对您有很大帮助,我建议您仅使用主机名。

答案 1 :(得分:1)

每隔20/25邮件或下载50 / 100mb的数据后,尝试重新连接到邮件服务器。 我看到IMAP服务器在此之后降低了速度......