imap_sort ограничивает количество результатов?

Я использую 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); 

Спасибо.


person aviv    schedule 18.11.2010    source источник


Ответы (1)


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

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

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

person dkarp    schedule 15.01.2011