PHP отключить браузер без использования Content-Length - PullRequest
0 голосов
/ 30 августа 2018

У меня огромный кусок данных, которые отправляются в браузер через PHP. Если я буферизую и отправляю все сразу, у меня возникают проблемы с памятью, поэтому я периодически вызываю flush () и ob_flush () в процессе вывода.

Теперь я хочу, чтобы скрипт завершил вывод, закрыл соединение и запустил некоторые фоновые процессы, но, похоже, единственный способ сделать это, если я отправлю браузеру заголовок («Content-Length») заранее (например, в качестве метода указан здесь ). Данные генерируются динамически, поэтому я не могу знать длину контента, не пройдя его один раз, а это медленно и дорого.

Существует ли обходной путь или другой способ закрыть соединение с браузером, не зная, сколько всего данных отправляется?

Редактировать: проблема решена. Для тех, кто хочет решить эту проблему без php-fpm, как предложил Зейн, я поместил код обработки после вывода из браузера в отдельный скрипт. Вызывая новый сценарий из основного с помощью cURL и немедленно истекающий, браузер больше не ожидает завершения обработки вторичного сценария, прежде чем разорвать соединение. Вторичный скрипт должен иметь ignore_user_abort () установленным в true, хотя. Описано здесь .

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