2010-11-18 23 views
0

Ich verwende PHP mit IMAP. Ich muss die 20 meisten neuen E-Mails aus einem Ordner abrufen. Ich Benutzer imap_sort nach Datum zu sortieren, aber das Problem ist, dass für einen großen Ordner mit 700 und mehr E-Mails dauert es ewig.imap_sort begrenzen die Anzahl der Ergebnisse?

Gibt es eine Möglichkeit, ich kann PHP IMAP verwenden, um Nachrichten nach Datum zu sortieren und nur die neuesten 20 E-Mails zu bringen?

Vielleicht imap_search verwenden?

Hier ist mein Code:

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

Dank.

Antwort

1

Es gibt keine direkte Möglichkeit, dies zu tun.

Sie minimieren bereits die Daten, die von der c-client-Bibliothek abgerufen werden, die den imap_*-Funktionen von PHP unter sorting on SORTARRIVAL instead of SORTDATE zugrunde liegt. Und während es an IMAP extension gibt, das es einem Anrufer ermöglicht, eine Teilmenge der SORT Ergebnisse anzufordern (z. B. die ersten 20 Treffer), unterstützen nur sehr wenige IMAP-Server es, und PHP kann es nicht nutzen.

Sie könnten versuchen, imap_search verwenden und fragen nach Nachrichten seit 1 Tag angekommen. Wenn das nicht genug Treffer sind, können Sie nach Nachrichten suchen, die seit 2 Tagen angekommen sind. Und so weiter. Aber das kann chaotisch werden, und es wird vielleicht nicht schneller sein als das, was Sie bereits tun.

Verwandte Themen