Электронная почта в отдельной теме в 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() вы не можете отправлять сообщения.