Как отдать ответ клиенту и продолжить выполнение долгого скрипта?
или так.
<?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.
Но лучше будет "тяжелую" часть обрабатывать в отдельных процессах. Например, одним из способов из комментариев к вопросу или из другого ответа, ссылку на который я дал в начале своего.