Как сделать ответ от php в ajax до завершения выполнения php кода?

Добрый вечер!
Я делаю плагин для wp. Плагин добавляет форму через shortcode. После отправления формы через ajax я записываю данные в БД и мне нужно послать ответ что данные успешно записаны к примеру echo 1; или не успешно тогда echo 0; тогда js выведет соответствующее сообщение пользователю.
Основное дело в том что после этого ответа нужно выполнить другой код php с задержкой. К примеру отправить на почту
через 10 мин я пишу sleep(600); $mail->send(); Но тогда ответ через ajax приходит тоже только через 10 мин.
Пробовал использовать функции ob_flush(); flush(); после echo на отдельной php страничке вывод происходит до конца выполнения php кода, но в моем плагине ответ не приходит.
  • Вопрос задан
  • 181 просмотр
Решения вопроса 2
@prostoprofan
Используйте задачи (крон), например вставляйте в таблицу задачи и временную метку когда задачу надо выполнить, тогда вопрос будет решен
Ответ написан
Комментировать
alex-1917
@alex-1917
Если ответ помог, отметь решением
Коли у тебя свой плагин, что мешает использовать крон?
1. Пишем данные в таблицу, колонка флаг по умолчанию ноль.
2. Кроном пробегаем раз в 10 минут по таблице - ищем строки с флагом ноль, собираем с этих строк в массив емайлы, флаг ставим еденичку, массив отдаем скрипту почтовому.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Вы не можете заставлять сервер спать. Это чудовищная трата ресурсов. Первая и основная задача сервера, это "как можно скорее отдать ответ и быть готовым к приему следующего запроса". К тому же хостер не разрешит вам выполнять скрипт 10мин. По умолчанию на скрипт выдается 30 секунд.
Что Вам мешает отправить почту, а потом вернуть ответ? Если, все же, Вы хотите отдать ответ, а потом отправить почту, тогда посмотрите в сторону cron задач.
Ответ написан
Комментировать
@maddimas
Есть асинхронный php, но мне так и не удалось его заставить работать. Вообще это от лукавого. Может вам делать два ajax запроса? Один на запись в бд а другой на отправку писем? И вообще я бы сделал все за один раз. Записал бы в базу, записал в другую таблицу, что надо отправить через 10 минут письмо и дал бы ответ юзеру. А крон задание запускающееся раз в 10 минут отправило бы письмо.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽