2014-10-14 4 views
0

Мне нужно загрузить все заголовки в почтовый ящик (тело не понадобится). Почтовый ящик может иметь 100 тыс. Сообщений или более.Производительность: imap_headers() или imap_fetchheader()?

imap_headers() обещает вернуть все заголовки почтового ящика; что сделало бы вещи простыми в использовании. У меня есть проблемы с тем, будет ли это работать по всему диапазону серверов IMAP (и некоторые из них не дают всех заголовков).

Альтернативой является использование imap_search() для получения списка идентификаторов, а затем imap_fetchheader() для итерации и получения всех заголовков (вероятно, с использованием какой-либо системы очередей).

Кто-нибудь сталкивался с этой проблемой? Если imap_headers «работает» надежно (или есть простой способ сказать, что он потерпел неудачу), это было бы предпочтительнее; в противном случае я думаю, что imap_fetchheader - это путь.

ответ

0

Ни один из них не будет хорошо работать при любых обстоятельствах. Запрашивать заголовки сообщений все сообщения в почтовом ящике, который содержит несколько тысяч или, может быть, сотни тысяч сообщений, является неправильной идеей. С другой стороны, обработка их один за другим не является разумной, так как библиотека, которую вы используете, является синхронной, и, следовательно, вы будете ограничены временем туда и обратно между хостом, на котором запущен ваш PHP-скрипт, и IMAP сервер, на который вы запрашиваете.

Получите асинхронную библиотеку IMAP и используйте для получения нужного размера окна/диапазона сообщений. Например. получение пары десятков или нескольких сотен сообщений каждый раз, вероятно, разумно.