Во-первых, я не ищу ignore_user_abort. Вместо этого я ищу функцию для завершения вывода и отправки документа пользователю. После этого я хотел бы, чтобы php-скрипт выполнял дополнительный процесс, который занимает еще несколько секунд без эффектов для пользователя, только фоновый процесс.
У пользователя нет причин ждать, пока это будет завершено. Выход уже готов к догонянию. Предоставляет ли PHP функцию для закрытия подключения к пользователю, но какое-то время оставайтесь на сервере для завершения работы?
Одна из лучших особенностей php-fpm. Вы – fastcgi_finish_requests (). Это завершит сеанс для клиентской стороны и продолжит процесс на сервере. Это также лучший вариант использования для обмена сообщениями в качестве альтернативы для чередования или задержки обработки cron.
Тем не менее, он ограничен php-fpm!
Вы должны разделить свою работу на 2 файла (один с начальной обработкой, который производит вывод), а второй, более тяжелый, который занимает еще несколько секунд, но не должен заставлять пользователя ждать до его завершения.
Затем попросите браузер вызвать его либо с помощью Ajax, либо с помощью скрытого iframe
.
Вы могли бы даже заставить второй скрипт вернуть сообщение об успешном завершении / сбое и поймать, что с JavaScript, чтобы уведомить пользователя, не затрагивая его фактический исходный результат.
похоже, что вы хотите, это какой-то материал ajax. если вы отправите ответ пользователю, сценарий закончится. но с помощью javascript вы можете запустить ajax-вызов другого php-скрипта, который ничего не изменит для пользователя.
вы можете попробовать использовать curl();
для ping localhost и запуска другого выполнения сценария для выполнения любых дополнительных задач, которые у вас есть.
После запуска сценария добавьте запись в таблицу очередей. Затем запустите задание cron, чтобы обработать очередь, заблокировать запись, а затем удалить их по мере их обработки, поэтому, если ваши кроны перекрываются, они не выполняют одну и ту же работу дважды.