Я вызываю php-скрипт поверх ajax, чтобы выполнить некоторое обслуживание базы данных. Если пользователь закрывает страницу, отбрасывает назад или нажимает ссылку, полностью ли будет выполняться сценарий php? Есть ли способ сделать это?
Может быть, если скрипт php называется методом exec()
или чем-то похожим, что в свою очередь вызовет скрипт через консоль как таковую:
$ php /var/www/httpdocs/maintenance.php
?
Пока пользовательский агент (браузер и т. Д.) Полностью отправил запрос, сервер имеет все необходимое и выполнит запрос и попытается отправить ответ.
На самом деле такое поведение «пингования» часто используется для процессов с «сердечным ритмом», которые поддерживают обслуживание теплым или выполняют периодическое обслуживание.
Это состояние гонки. PHP обнаруживает в какой-то момент (обычно при попытке сделать вывод), что Apache вопит в лицо, что удаленный пользователь закрыл соединение. Все, что вы хотели сделать, сделано в этот момент, зависит от того, как структурирован ваш код.
Если вы хотите, чтобы все операции были завершены до того, как скрипт отключится, используйте ignore_user_abort(TRUE)
, который сохраняет PHP после завершения соединения. Он по-прежнему зависит от ограничений пользователя max_execution_time и еще чего-то, но он не будет отключен, потому что вы отключились.
Как только веб-запрос сделает это на вашем сервере, действительно не имеет значения, закрывает ли пользователь свой браузер или перемещается. Ваш сервер все равно будет отвечать, но никто не будет слушать ответ.
Изменяется настройки, веб-сервер, операционная система и т. Д.
Обычно запрос обрабатывается как обычно, и ответ будет просто никогда не читаться. Иногда запись может завершиться неудачно раньше, и запрос не работает во время обработки.
Как только вызов ajax стартует, пользователь может делать все, что захочет. Если они закрывают страницу, они просто не получат обратную связь (если она есть) от вызванного ajax-вызова.
Если php начинает выполнение, то он будет продолжать выполняться независимо от того, закрывает ли пользователь окно или перемещается в сторону от страницы.
PHP-скрипт завершится, независимо от состояния браузера. Php анализируется на сервере, и ему все равно, открыт ли клиент или нет.
Если HTTP-запрос был завершен, то да, PHP-скрипт будет выполнен полностью, даже если компьютер клиента закрыт.