2010-11-18 32 views
0

J'utilise PHP avec IMAP. J'ai besoin de récupérer les 20 plus nouveaux emails d'un dossier. J'utilise imap_sort pour trier par date, mais le problème est que pour un grand dossier avec 700 e-mails et plus, cela prend des années.imap_sort limite le nombre de résultats?

Est-ce que je peux utiliser PHP IMAP pour trier les messages par date et apporter les 20 derniers emails?

Peut-être utiliser imap_search?

Voici mon 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); 

Merci.

Répondre

1

Il n'y a pas de moyen simple de le faire.

Vous minimisez déjà les données récupérées par la bibliothèque c-client sous-jacente aux fonctions imap_* de PHP par sorting on SORTARRIVAL instead of SORTDATE. Et, alors qu'il y a an IMAP extension qui permet à un appelant de demander un sous-ensemble des résultats SORT (par exemple les 20 premiers résultats), très peu de serveurs IMAP le supportent et PHP ne peut pas l'utiliser.

Vous pouvez essayer d'utiliser imap_search et demander des messages arrivés depuis 1 jour. Si cela ne suffit pas, vous pouvez effectuer une nouvelle recherche des messages arrivés depuis 2 jours. Etc. Mais cela peut devenir compliqué à coder, et il peut ne pas finir par être plus rapide que ce que vous faites déjà.