我不确定为什么会出现这种情况,但如果您遍历邮箱中的所有邮件,每次都调用 imap_header(),则可以通过首先调用 imap_headers() 来显着提高性能。
比较一下
<?php
$imap = imap_open("{my.server.com:143}INBOX", "user", "pass");
$n_msgs = imap_num_msg($imap);
$s = microtime(true);
for ($i=0; $i<$n_msgs; $i++) {
$header = imap_header($imap, $i);
}
$e = microtime(true);
echo ($e - $s);
imap_close($imap);
?>
与之对比
<?php
$imap = imap_open("{my.server.com:143}INBOX", "user", "pass");
$n_msgs = imap_num_msg($imap);
imap_headers($imap)
$s = microtime(true);
for ($i=0; $i<$n_msgs; $i++) {
$header = imap_header($imap, $i);
}
$e = microtime(true);
echo ($e - $s);
imap_close($imap);
?>
我在多个机器上测试过,连接到多个不同的服务器,发现第二个代码片段始终只需要一半的时间,甚至更少。
也许是因为 `imap_headers()` 在一个连接上检索所有邮件,而 `imap_header()` 必须为每封邮件发出新的获取请求?我不确定为什么如果先调用 `imap_headers()` 它会更快,但我确实知道它更快,所以我想分享一下我的发现。如果有人知道原因,请告诉我。