为啥 PHP 函数 imap_search() 很慢?
Posted
技术标签:
【中文标题】为啥 PHP 函数 imap_search() 很慢?【英文标题】:Why the PHP function imap_search() is slow?为什么 PHP 函数 imap_search() 很慢? 【发布时间】:2013-10-10 05:52:35 【问题描述】:我正在创建个人网络邮件,但在使用 imap_search()
时遇到了一些问题我使用此代码,但函数 imap_search() 并没有停止:
$criteria = 'SINCE "'.date('d M Y', strtotime('- 1 days')).'"';
$uids = imap_search($mailbox, $criteria, SE_UID, 'UTF-8');
我试过用一个小邮箱,它运行缓慢,但它工作,但它没有一个大邮箱。 因此,我尝试仅获取一封具有相同邮箱和 'SUBJECT' 搜索的电子邮件,但它也不起作用。 有了这个经验,我认为问题不是我的 $criteria,我的 imap_open() 工作成功。
最大的邮箱一天总共有 9000 封电子邮件和 63 封。最小的一共有20封邮件,我都成功加载了。
我在不同的服务器上尝试过,结果都是一样的。
如果有人有想法,那将非常有帮助。
谢谢。
【问题讨论】:
您是否对代码进行了检测或进行了协议跟踪,以便查看延迟是本地引起的还是正在等待远程服务器回复 SEARCH 命令? @Max 通过一个包含 42 封电子邮件的中型邮箱,我在 9.42 秒内成功加载它们。 imap_search() 这次花了 9 秒,而且邮箱更大(9000)它根本没有停止。 当我将 'ALL' 条件放入 imap_search() 时,会加载 9000 个 uids 的数组几毫秒,当我尝试使用 'SINCE' 标准时,该功能不会停止。这是否意味着 imap_search() 的 'SINCE' 标准不适用于大邮箱?我应该自己在 php 中过滤 9000 封电子邮件还是现有的其他解决方案? 如果您的服务器非常慢,这听起来像是搜索命令。可以直接连接使用IMAP命令进行评估吗? 例如,在 gmail 上进行 UID 搜索几乎不需要任何时间。 【参考方案1】:imap_search() 的 PHP 文档页面中的示例可能是错误的。我刚刚对 Gmail 尝试了以下命令,但它根本不起作用:
0003 UID SEARCH SINCE "8 August 2013"
...这是有道理的,因为RFC3501 以 2013 年 8 月 8 日的格式定义日期,实际上以下方法有效:
0004 UID SEARCH SINCE "8-Aug-2013"
因此,请尝试这样格式化您的日期,看看效果如何。
文档页面中的第一条评论也证实了上述内容。
【讨论】:
我试过像你说的那样格式化日期,但它总是挂起。我也尝试过使用最小的邮箱,它可以工作,但像往常一样有同样的问题。 然后尝试手动与 IMAP 服务器交互以排除故障。如果你在 Windows 上,你可以使用我的客户端,IMAPTalk:gigi.nullneuron.net/comp/imaptalk.php【参考方案2】:在您的服务器上尝试并使用此 $mbox = imap_open('localhost:143/novalidate-certINBOX', 'your_user_name', 'your_password');
【讨论】:
以上是关于为啥 PHP 函数 imap_search() 很慢?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 PHP 的 hash_equals() 函数中的参数顺序很重要?