2010-11-18 4 views
0

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

Есть ли способ, которым я могу использовать 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

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

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

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

Смежные вопросы