Уничтожьте процесс PHP, когда соединение будет закрыто

Для большего количества информации:

uname -a

Если Вы интересуетесь только номером версии:

uname -r
2
задан 23 May 2017 в 15:41
3 ответа

Если веб-браузер не закрывает соединение, ваш скрипт, вероятно, будет продолжать работать до тех пор, пока не истечет время ожидания соединения или не достигнет максимального времени выполнения PHP.

Лучшее, что я могу придумать, - это использовать AJAX для регулярного «эхо-запроса» сервера и остановки, если он не получал эти эхо-запросы в течение некоторого времени. Или каждый раз, когда он получает пинг, дайте PHP-скрипту еще 5 секунд для запуска.

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

0
ответ дан 3 December 2019 в 12:01

Когда вы опробовали эти методы, вы заставляли PHP очищать буфер? Пока что-то не будет написано из сценария, PHP / Apache не сможет увидеть, подключен ли клиент. Имейте в виду, что PHP не взаимодействует напрямую с клиентом - он взаимодействует с Apache.

Комментарии в нижней части connection_aborted PHP manual содержат несколько стратегий.

1
ответ дан 3 December 2019 в 12:01

https://stackoverflow.com/questions/23530820/php-connection-aborted-does-not-always-works/29401757#29401757

TCP требует, чтобы ВСЕ отправленные пакеты подтверждались клиентом, и поэтому сервер должен определить это как минимум как тайм-аут отправки ...

session_write_close();//to make flush work
while (connection_status() !== 0) {//this will work if the connection is properly shutdown
                                   //or if it is simply disconnected...
  sleep(1);
  echo "whatever";
  ob_flush();
  flush();
}
1
ответ дан 3 December 2019 в 12:01

Теги

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