@Dobroe3lo

Почему скрипт php не завершает свою работу после ухода пользователя?

Добрый день.

Поясните, кто может, один момент.
Есть сайт, пользователь заходит на страницу подгружая основные элементы сайта, далее когда DOM сформирован, ajax запрашивает данные с сервера (скрипт php долгий, данных много, все данные уходят одним ответом) и расставляет их в нужные блоки. Проблема в том, что если пользователь нажал на ссылку, что бы перейти на другую страницу не дожидаясь пока все данные загрузятся, сайт зависает. И уже когда ajax получил ответ и вставил значения, только тогда пользователя редиректит куда нажимал.

Неужели выполнение скрипта php не прерывается, когда пользователь уходит со страницы?
Как можно решить эту проблему?
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
@Dobroe3lo Автор вопроса
Может кому пригодится.
Проблема решилась сама по себе, перенесли сайт на хостинг. По всей видимости были проблемы в конфигурации php.ini, а именно "output_buffering".
Так же проблема бывает из-за блокировки сессий, если скрипт выполняет работу с ними. В данном случае с сессиями я не работал.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Неужели выполнение скрипта php не прерывается, когда пользователь уходит со страницы?
А с чего бы ему прерываться? По сути это 2 абсолютно не связанных действия - переход на страницу и выполнение скрипта. Точнее первое инициализирует второе, а после уже никак на происходящее на сервере не влияет.
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Логично же, что AJAX-функция во время своей работы блокирует переход по любым ссылкам. Пока AJAX-функция переходы не разблокирует (получив данные) - переходов и не будет. Ищите не в PHP, а в AJAX-функции в браузере.
Ответ написан
Комментировать
SagePtr
@SagePtr
Еда - это святое
У вас похоже на то, что вы в обоих скриптах открываете сессию и не закрываете её.
В результате второй ждёт, когда первый эту сессию освободит, зависая на вызове открытия сессии (для браузера это выглядит, будто сервер подвис, т.к. он запрос получил, но ничего пока ещё не отправил в ответ).
Если в сессию больше ничего писать не надо, закрывайте её как можно быстрее. https://www.php.net/manual/ru/function.session-wri...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы