Почему скрипт php не завершает свою работу после ухода пользователя?
Добрый день.
Поясните, кто может, один момент.
Есть сайт, пользователь заходит на страницу подгружая основные элементы сайта, далее когда DOM сформирован, ajax запрашивает данные с сервера (скрипт php долгий, данных много, все данные уходят одним ответом) и расставляет их в нужные блоки. Проблема в том, что если пользователь нажал на ссылку, что бы перейти на другую страницу не дожидаясь пока все данные загрузятся, сайт зависает. И уже когда ajax получил ответ и вставил значения, только тогда пользователя редиректит куда нажимал.
Неужели выполнение скрипта php не прерывается, когда пользователь уходит со страницы?
Как можно решить эту проблему?
Роман Юрьевич Ипатьев, я прошу прощения, плохо вопрос сформулировал. Запрос один, в скрипте php цикл с большим кол-вом данных, данные уходят одним ответом.
Может кому пригодится.
Проблема решилась сама по себе, перенесли сайт на хостинг. По всей видимости были проблемы в конфигурации php.ini, а именно "output_buffering".
Так же проблема бывает из-за блокировки сессий, если скрипт выполняет работу с ними. В данном случае с сессиями я не работал.
Неужели выполнение скрипта php не прерывается, когда пользователь уходит со страницы?
А с чего бы ему прерываться? По сути это 2 абсолютно не связанных действия - переход на страницу и выполнение скрипта. Точнее первое инициализирует второе, а после уже никак на происходящее на сервере не влияет.
Чем больше знаю, тем лучше понимаю, как мало знаю.
Логично же, что AJAX-функция во время своей работы блокирует переход по любым ссылкам. Пока AJAX-функция переходы не разблокирует (получив данные) - переходов и не будет. Ищите не в PHP, а в AJAX-функции в браузере.
У вас похоже на то, что вы в обоих скриптах открываете сессию и не закрываете её.
В результате второй ждёт, когда первый эту сессию освободит, зависая на вызове открытия сессии (для браузера это выглядит, будто сервер подвис, т.к. он запрос получил, но ничего пока ещё не отправил в ответ).
Если в сессию больше ничего писать не надо, закрывайте её как можно быстрее. https://www.php.net/manual/ru/function.session-wri...