Задать вопрос

PHP: запуск задачи в фоне

Какие самые правильные и надежные подходы стоит использовать, если необходимо запустить некую длительную задачу в фоновом режиме?
Приведу пример, чтобы стало понятней:
есть основной php скрипт, контроллер, который обрабатывает пользовательские действия. Пользователь нажимает в интерфейсе волшебную кнопку, которая должна запустить долгоиграющую задачу и вернуть управление пользователю. При этом не требуется возвращать или как то дополнительно обрабатывать результат работы длительного скрипта.

Знаю, что для подобных задач существуют различные библиотеки для создания очереди сообщений, но конкретно для моего примера это избыточно.
Так же хотелось бы обойтись без cron-task-ов и других ОС-специфичных вещей.

Спасибо.
  • Вопрос задан
  • 25074 просмотра
Подписаться 12 Средний 1 комментарий
Ответ пользователя Super0leg К ответам на вопрос (6)
@Super0leg
<?php
 
ob_start(); // включаем буферизацию вывода
session_start(); // стартуем сессию(если нужна)
 
/* тут некий код наш */
 
echo 'Goodbye my friend!'; // пишем нечто в буфер
 
session_write_close(); // записываем сессию с сохранением
set_time_limit(0); // делаем лимит времени выполнения бесконечным(не обязательно)
ignore_user_abort(true); // игнорим что клиент отвалился и продолжаем работу
header('Connection: close'); // посылаем заголовок клиенту, чтобы он отвалился
header('Content-Length: ' . ob_get_length()); // посылаем количество байт
ob_end_flush(); // сбрасываем самый верхний буфер вывода
flush(); // сбрасываем системный буфер и отправляем
fastcgi_finish_request(); // сброс данных запроса клиенту(в случае php-fpm необходимо!)
 
/*
тут некий дальнейший код, он продолжит выполнение уже после закрытия связи с клиентом
*/


Источник - https://itnots.ru/php/asinhronnost-v-php-otdat-otv...
Ответ написан
Комментировать