Выполнение php останавливается после того, как пользователь оставляет страницу?

Я изучил первый год обучения всего этого, за исключением гибкой разработки.

Это - все о выборе правильной школы, по моему скромному мнению. Если Вы пойдете лучшие 10, то Вы изучите все это быстро.

До Образования CS в целом, мы в основном просим, чтобы преподаватели преподавали так (языки каждой разновидности, структур данных, эффективности во время выполнения, как вещи на самом деле работают на разрядном уровне). Я хотел бы поднять вопрос, Почему дети не берут его на себя для получения дополнительной информации о Разработке программного обеспечения?

39
задан Stephen Belanger 14 August 2009 в 21:22
поделиться

5 ответов

Это зависит.

От http://us3.php.net/manual/en/features.connection-handling.php :

Когда сценарий PHP работает нормально НОРМАЛЬНОЕ состояние активно. Если удаленный клиент отключает прерванный государственный флаг включен. Удаленный отключение клиента обычно вызвано пользователь нажимает кнопку СТОП.

Вы можете решить, хотите ли вы отключение клиента, чтобы вызвать ваш сценарий, который нужно прервать. Иногда бывает удобно, чтобы ваши скрипты всегда запускались до завершения, даже если нет удаленный браузер получает вывод. Однако поведение по умолчанию для ваш скрипт будет прерван, когда удаленный клиент отключается. Эта поведение может быть установлено через ignore_user_abort php.ini как а также через соответствующие php_value ignore_user_abort Apache httpd.conf или с помощью ignore_user_abort () function.

Казалось бы, ответ на ваш вопрос: «Да, скрипт завершится, если пользователь покинет страницу».

Однако следует понимать, что в зависимости от серверной части Используемый SAPI (например, mod_php ), php не может обнаружить, что клиент прервал соединение, пока не будет сделана попытка отправить информацию клиенту . Если ваш длительный скрипт не вызывает flush () , скрипт может продолжать работать, даже если пользователь закрыл соединение.

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

73
ответ дан 27 November 2019 в 02:28
поделиться

Это зависит от ваших настроек - обычно он останавливается, но вы можете использовать ignore_user_abort () , чтобы заставить его продолжить.

6
ответ дан 27 November 2019 в 02:28
поделиться

Если клиент / пользователь / загрузчик / просмотрщик прерывает работу или отключается, сценарий будет продолжать работать , пока что-то не попытается сбросить новые данные на клиенте. Если вы не использовали ignore_user_abort () , скрипт там умрет. В том же порядке PHP не может определить, есть ли еще клиент, не пытаясь сбросить какие-либо данные в httpd.

0
ответ дан 27 November 2019 в 02:28
поделиться

В зависимости от конфигурации веб-сервера и / или PHP процесс PHP может или не может убить поток, когда пользователь завершает HTTP-соединение. Если запрос AJAX ожидает обработки, когда пользователь уходит со страницы, это зависит от того, завершает ли браузер запрос (не гарантируется) на вершине конфигурации вашего сервера (не гарантируется). Не тот ответ, который вам хотелось бы услышать!

Я бы рекомендовал создать рабочую очередь в плоском файле или базе данных, которую постоянно работающий демон PHP может опрашивать на предмет заданий. Он не страдает от задержки cron , но поддерживает использование ЦП / памяти на приемлемом уровне. После завершения работы поместите результаты в плоский файл / базу данных для выборки AJAX. Или пообещайте отправить пользователю электронное письмо, как только работа будет завершена (мой предпочтительный метод).

Надеюсь, что это поможет

1
ответ дан 27 November 2019 в 02:28
поделиться

нашел фактическое решение для моего случая, не прерывая соединение. SESSION на моем сервере Apache/Php нужно было закрыть, прежде чем можно было запустить следующий.

Браузер ожидает завершения вызова ajax после прерывания.

0
ответ дан 27 November 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: