2013-10-03 4 views
2

Я создаю персональный веб-почты, но я сталкиваюсь некоторые проблемы с imap_search()Почему функция PHP imap_search() работает медленно?

Я использую этот код, но функцию imap_search() не останавливается:

$criteria = 'SINCE "'.date('d M Y', strtotime('- 1 days')).'"'; 
$uids = imap_search($mailbox, $criteria, SE_UID, 'UTF-8'); 

Я вы пробовали с небольшим почтовым ящиком, и он работал медленно, но он работал, однако он не был с большим почтовым ящиком. Итак, я попытался получить только одно из сообщений электронной почты с тем же почтовым ящиком и «SUBJECT», но он тоже не работал. С этим опытом я не думаю, что проблема связана с моими $ критериями, а мой imap_open() работает успешно.

Самый большой почтовый ящик насчитывает в общей сложности 9000 писем и 63 дня. Самое маленькое - всего 20 писем, и мне удалось загрузить их все.

Я пробовал на разных серверах, и это то же поведение.

Если у кого-то есть идея, это будет очень полезно.

Спасибо.

+0

Вы проверили код или принятые протокольные трассы, чтобы вы могли увидеть, вызвана ли локальная нагрузка или ожидает ответа удаленного сервера на команду ПОИСК? – Max

+0

@Max Принимая средний почтовый ящик с 42 электронными письмами, мне удалось загрузить их в 9.42. Imap_search() занял 9 с этого времени и с большим почтовым ящиком (9000) он вообще не останавливался. –

+0

Когда я устанавливаю _'ALL'_ критерии ** imap_search() **, массив из 9000 ** uids ** загружается за несколько мс, и когда я пытаюсь использовать критерии _SINCE'_, функция doesn Не останавливайся. Означает ли это, что критерии _SINCE'_ для ** imap_search() ** не оптимизированы для больших почтовых ящиков? Должен ли я фильтровать 9000 электронных писем самостоятельно в php или другом другом решении? –

ответ

0

Возможно, неправильный пример на странице документации PHP для imap_search(). Я просто попытался следующую команду против Gmail, и он не работает вообще:

0003 UID SEARCH SINCE "8 August 2013" 

... который имеет смысл, потому что RFC3501 определяет даты в формате 08-Aug-2013, а на самом деле следующее работал:

0004 UID SEARCH SINCE "8-Aug-2013" 

Так что попробуйте форматировать свою дату как таковой и посмотреть, как она идет.

Первый комментарий на странице документа также подтверждает вышеуказанное.

+0

Я пробовал форматировать дату, как вы говорите, но она всегда в ожидании. Я также пробовал с помощью самого маленького почтового ящика, он работает, но, как обычно, с теми же проблемами. –

+0

Затем попробуйте вручную взаимодействовать с сервером IMAP для устранения неполадок. Если вы работаете в Windows, вы можете использовать мой клиент, IMAPTalk: http://gigi.nullneuron.net/comp/imaptalk.php – Gigi

0

попробуйте на вашем сервере и используйте этот $ mbox = imap_open ('{localhost: 143/novalidate-cert} INBOX', 'your_user_name', 'your_password');

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