в php, что происходит, когда пользователь переходит на другой сайт во время обработки страниц сервера? - PullRequest
0 голосов
/ 31 декабря 2011

если пользователь отправляет сообщение на сервер, и он начинает обработку, ничего не отправляя пользователю при этом (это может занять несколько секунд, например, отправка почты через стороннюю службу), и пользователь переходит на другой сайт или страницу до его завершения

это сервер уведомлен?

когда сервер сдается?

сервер пытается завершить обработку?

есть ли способ сделать функцию "атомарной" в php, чтобы после начала гарантированно завершить ее?

1 Ответ

2 голосов
/ 31 декабря 2011

По умолчанию и правильное поведение пользовательского клиентского браузера заключается в том, что он ДОЛЖЕН уведомить, что загрузка страницы была отменена - причины не имеют значения - пользователь либо нажал кнопку «Назад», кнопку «Стоп», нажал другую ссылку или просто закрыл браузер.

По умолчанию в PHP - сервер получает это уведомление и покидает страницу обработки. Это зависит от установки директивы php.ini ignore_user_abort - см. эту страницу документации PHP .

Сервер ведет себя при установке директивы ignore_user_abort. Если для него установлено значение false (по умолчанию), тогда он просто прекращает обработку запроса. Если задано значение true, запрос завершается, так как он не получает никакого уведомления об отмене пользователя.

Не рекомендуется запускать с ignore_user_abort = true для всего сервера, поэтому я бы не советовал помещать его прямо в файл php.ini. Но вы можете поместить этот код в начало скрипта, что крайне важно для вас, чтобы быть атомарным и всегда заканчиваться при запуске:

ini_set('ignore_user_abort', true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...