Электронная почта в отдельной теме в php
Мне интересно, есть ли способ запустить отдельный поток в php для отправки и отправки по электронной почте.
У меня есть небольшая веб-служба, которая берет некоторую информацию из приложения iPad, а затем вставляет данные в db и отправляет электронное письмо после этого. Проблема в том, что иногда письмо слишком долго отправляется, а время ожидания IPad истекает. Есть ли способ отправить электронное письмо по отдельной теме? Я в основном хочу сказать, что iPad был успешным, прежде чем отправляется электронное письмо.
Пример кода:
... Process info and insert into DB
echo "success"; //this should be returned to the iPad right away.
//start new thread here or possibly fork???
$email->send();
Спасибо!
Ответы
Ответ 1
Как уже отмечалось, PHP не обладает многопоточными возможностями, но обладает многофункциональными функциями. Вы можете создать и вызвать второй PHP, который первым вызовет для обработки электронной почты. Этот script должен иметь возможность запускаться в командной строке.
exec('nohup php emailscript.php >/dev/null 2>&1 &');
Очень важно иметь nohup и все после него. Это то, что делает процесс в фоновом режиме и перенаправляет весь вывод. В противном случае PHP будет ждать завершения и возврата. Nohup убедится, что script не будет уничтожен ОС при завершении родительского процесса вызова.
Вам нужно как-то передать информацию по электронной почте в script. Вы можете поместить информацию в базу данных и передать ей идентификатор записи, передать информацию как параметры или несколько других параметров.
Ответ 2
Я считаю, что вы хотите выполнить ob_flush()
, чтобы отправить данные обратно клиенту и позволить вашему PHP скрипт продолжать выполнение. Обратите внимание, что вам нужно выполнить отправку данных обратно клиенту, поскольку после ob_flush()
вы не можете отправлять сообщения.