2010-11-18 13 views
0

IMAP ile PHP kullanıyorum. Bir klasörden en yeni 20 e-postayı almam gerekiyor. Ben tarihe göre sıralamak için kullanıcı imap_sort, ama sorun 700 ve daha fazla e-posta ile büyük bir klasör için yaş alır.imap_sort sonuç sayısını sınırlıyor mu?

İletileri tarihe göre sıralamak ve yalnızca en yeni 20 e-postaları getirmek için PHP IMAP kullanmanın bir yolu var mı?

Belki 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); 

Teşekkür:

İşte benim kodudur.

cevap

1

Bunu yapmanın kolay bir yolu yok.

Zaten PHP'nin imap_* işlevlerinin altında yatan c-istemci kitaplığı tarafından getirilen verileri sorting on SORTARRIVAL instead of SORTDATE ile en aza indiriyorsunuz. Ve bir arayanın SORT sonuçlarının bir alt kümesini (örneğin ilk 20 isabeti) talep etmesini sağlayan an IMAP extension varken, çok az IMAP sunucusu bunu destekler ve PHP bunu kullanamaz.

imap_search kullanmayı deneyebilir ve 1 gün önce iletilerin gönderilmesini isteyebilirsiniz. Bu yeterli sayıda isabet değilse, 2 gün önce gelen iletiler için yeniden arama yapabilirsiniz. Ve bunun gibi. Ancak bu, kodlara bulaşabilir ve zaten yaptığınızdan daha hızlı olmayabilir.

İlgili konular