@Olegpc

Почему после соединения по IMAP не завершается процесс apache?

Добрый день.
Столкнулся с такой проблемой.
Есть около 15 почтовых ящиков на яндексе. Задача: осуществлять сбор новой почты с этих ящиков каждые 5 минут по протоколу imap на php.
В 40 процентах случаев процесс подключения по imap завершается с ошибкой по таймауту.
А процесс на apache так и остается висеть. Он может провисеть очень долго, а может через какое-то время завершиться.
Не могу понять, как сделать так, чтобы процесс убивался, если соединение не установлено.
Во такой вот код
$listacc = "список всех почтовых ящиков";
foreach($listacc as $acc){
	if($acc['status'] == 1){
		$server = $acc['server'];
		$login = $acc['username'];
		$password = $acc['pass'];
		$user_id = $acc['user'];
		$result = Message::searchPostInMail($server, $login, $password, $user_id);
		if(!$result){
			die();
		}
	}
}
die();

Даже если происходит выход из функции, процесс так и висит
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 1
@dedalqq
Когда у вас загрузка в браузере к вашему апачу завершилась по таймауту, именно в этот момент у вас порвалось соединение к imap серверу. Не смотрите на процессы апача, они с этим почти не связаны, смотрите на то какие порты открываются у вас на этой машине для исходящих соединений. Связка апачь + php так работает, что как только запрос к этому самому апач закончился (по таймауту или не важно по чему еще) как таковой php процесс (не путайте с процессом ОС) тоже закончил свою работу, и как следствие, все открытые ресурсы (в данном случае коннект к imap) закрылись. Это ни как не связано с тем что вы видите в процессах апач в свой ОС
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы