Hello! On Thu, Apr 15, 2021 at 12:02:31PM +0700, Victor Sudakov wrote:
> Maxim Dounin wrote: > > > > On Tue, Apr 13, 2021 at 02:52:00PM +0700, Victor Sudakov wrote: > > > > > Aleksandr Sytar wrote: > > > > > > > > > Что должно > > > > > произойти, когда пользователь отменил HTTP запрос, или браузер закрыл? > > > > > nginx закроет соответствующее соединение с php-fpm ? А PHP-код > > > > > продолжит > > > > > работу? Или должен прерваться? > > > > > > > > > > Прошу прощения за сумбурное изложение, поправки и указания на неверное > > > > > понимание логики работы с благодарностью принимаются. > > > > > > > > > > > > > > > > > > > Раз - https://habr.com/ru/post/179399/ > > > > Двас - > > > > https://www.php.net/manual/ru/function.fastcgi-finish-request.php и > > > > крути себе дальше в базе что надо. > > > > > > Я наверное плохо сформулировал вопрос, но мне как раз интересно видеть > > > обратное поведение. Закрыли браузер - обслуживавший этот сеанс процесс > > > PHP завершился, что бы ни делал в этот момент. > > > > > > А в приведенных ссылках обратную задачу пытаются решить. > > > > Прямая задача, как я понимаю, нормально решается только в случае, > > если php-скрипт что-то возвращает клиенту, подробнее тут: > > > > https://www.php.net/manual/en/features.connection-handling.php > > Спасибо, Maxim, очень полезная ссылка. Я в первом письме так и > предполагал, как должно происходить (см. последнюю строчку цитаты): > > "If the remote client disconnects, the ABORTED state flag is turned on. > A remote client disconnect is usually caused by users hitting their STOP > button. [...] You can decide whether or not you want a client disconnect > to cause your script to be aborted. Sometimes it is handy to always have > your scripts run to completion even if there is no remote browser > receiving the output. The default behaviour is however for your script > to be aborted when the remote client disconnects. " > > Другой вопрос, почему в наблюдаемом мной случае это не происходило. > Пойду посмотрю код, может там действительно какой-нибудь > ignore_user_abort стоит. В php.ini уже проверил, > ignore_user_abort => Off => Off Отмечу ещё раз, что всё это работает только в том случае, если php-скрипт что-то возвращает клиенту, и даже в этом случае нужны приседания. Об этом, в частности, рассказывается в комментариях к описанию connection_aborted(). То есть исходная задача "скрипт ждёт ответа базы 3 часа" - в php просто так не решается. -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru