2010-11-18 260 views
0

我使用PHP和IMAP。我需要從一個文件夾中檢索20個最新的電子郵件。我用imap_sort按日期進行排序,但問題在於,對於包含700個或更多電子郵件的大文件夾,它需要很長時間。imap_sort限制結果數量?

有沒有一種方法可以使用PHP IMAP按日期對消息進行排序,並只帶來最新的20封電子郵件?

也許使用imap_search?

這裏是我的代碼:

$start_from = params::cleanDefault($_GET, 'start_from', 0); 
$limit  = params::cleanDefault($_GET, 'limit', 20); 
$sort_by  = params::cleanDefault($_GET, 'sort_by', 'SORTARRIVAL'); 

$emails = imap_sort($mbox, $sort_by, 1, SE_NOPREFETCH); 
$emails = array_slice($emails, $start_from, $limit); 

感謝。

回答

1

有沒有簡單的方法來做到這一點。

您已經通過sorting on SORTARRIVAL instead of SORTDATE最小化了PHP imap_*函數的c客戶端庫提取的數據。而且,雖然有an IMAP extension允許調用者請求SORT結果的子集(例如前20個點擊),但很少有IMAP服務器支持它,而PHP無法使用它。

您可以嘗試使用imap_search並要求提供自1天前以來收到的消息。如果沒有足夠的點擊率,您可以重新搜索自2天前以來收到的消息。等等。但是這會讓代碼變得混亂,並且最終可能不會比你已經做的更快。