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

Как запустить php скрипт в фоне?

Есть кнопка на странице по нажатию на которой надо чтобы пользователь мог дальше продолжать работу, пока в фоне происходит выполнение скрипта.

Это реализовано путем открытия новой вкладки по нажатию на кнопку, в которой выполняется скрипт, а по завершении вкладка закрывается.
Но я столкнулся с проблемой, что выполнение скрипта может быть довольно долгим и по истечении 60с таймаута nginx принудительно завершает выполнение скрипта. Повышать таймаут не вариант.

Как сделать так, чтобы скрипт выполнялся в фоне?
  • Вопрос задан
  • 267 просмотров
Подписаться 1 Простой 13 комментариев
Пригласить эксперта
Ответы на вопрос 1
@iljaGolubev
Как отдать ответ клиенту и продолжить выполнение долгого скрипта?

или так.
<?php
ignore_user_abort(true);
set_time_limit(0);
ob_start();
header('Connection: close'); 
header('Content-Length: '.ob_get_length());
// можно добавить http статус подходящий
ob_end_flush();
ob_flush();
flush();
// дальше запуск
run_havy_task();


оба варианта предполагают, что есть отдельный способ получения результатов выполнения запущенной задачи.

UPD: после критики в комментариях, поясню.
Предложенное мной решение - примитивный способ сказать web серверу вернуть клиенту ответ и после этого продолжить выполнение скрипта.
При этом ресурсы ресурсы сервера не будут освобождены пока функция run_havy_task не закончит работу. Можно использовать fastcgi_finish_request - но она не на 100% гарантирует завершение процессов.
Таким образом, если до этого вы не переживали о ресурсах выделенных на выполнение "тяжелого" скрипта, то можно продолжать и так - запихнуть всё тяжелое в внутрь run_havy_task.
Но лучше будет "тяжелую" часть обрабатывать в отдельных процессах. Например, одним из способов из комментариев к вопросу или из другого ответа, ссылку на который я дал в начале своего.
Ответ написан
Ваш ответ на вопрос

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

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