imap_sort ограничить количество результатов? - PullRequest
0 голосов
/ 18 ноября 2010

Я использую PHP с IMAP.Мне нужно получить 20 самых новых писем из папки.Я использую imap_sort для сортировки по дате, но проблема заключается в том, что для большой папки с 700 и более электронными письмами требуется возраст.

Есть ли способ использовать 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 Ответ

1 голос
/ 15 января 2011

Нет простого способа сделать это.

Вы уже минимизируете данные, выбираемые библиотекой c-client, лежащей в основе функций PHP imap_*, сортируя по SORTARRIVAL вместо SORTDATE. И хотя существует расширение IMAP , которое позволяет вызывающей стороне запрашивать подмножество результатов SORT (например, первые 20 обращений), очень немногие серверы IMAP поддерживают его, и PHP не может использовать это.

Вы можете попробовать использовать imap_search и запросить сообщения, пришедшие с 1 дня назад. Если хитов недостаточно, вы можете повторно найти сообщения, поступившие 2 дня назад. И так далее. Но это может привести к путанице в коде, и в итоге может оказаться не так быстро, как то, что вы уже делаете.

...