LRCenter
20.12.2012 - 10:56
Возможно ли принудительно разорвать соединение с клиентом из
скрипта?
exit() не подойдет, речь идет именно о разрыве соединения, а не о прекращении работы сценария.
Среди функций управления соединением ничего похожего не нашел.
http://www.php.su/phphttp/?connhandling
_____________
Меньше кода - меньше багов ©
Можно если используешь
php-fpm
В нём есть функция для этого - fastcgi_finish_request(); После неё соединение прерывается, но
скрипт продолжает выполняться.
_____________
VPS от 5$, первые 2 месяца -
бесплатно.
ob_start();
echo '[' . date('h:i:s') . '] Соединение закрыто';
header("Connection: close");
header('Content-Length: ' . ob_get_length());
ob_end_flush();
flush();
sleep(10);
file_put_contents('test.txt', 'Скрипт продолжил работу и записал этот текст в ' . date('h:i:s'));
P.S. используй
php.net, там есть комментарии.
LRCenter
20.12.2012 - 13:49
Rand
Спасибо, а без хинта с буферизацией видимо никак?
Жаль что нет стандартной функции.
Hello
К сожалению, я использую версию php без php-fpm.
_____________
Меньше кода - меньше багов ©
Можно без буферезации, если сможешь сам Content-Length посчитать:
<?
header("Connection: close");
header('Content-Length: 29');
echo '[' . date('h:i:s') . '] Соединение закрыто';
flush();
sleep(10);
file_put_contents('test.txt', 'Скрипт продолжил работу и записал этот текст в ' . date('h:i:s'));
LRCenter
20.12.2012 - 13:57
А зачем нужен этот заголовок?
header('Content-Length: 29');
А этот способ будет
работать в любом браузере/агенте?
Например роботы поисковиков не смогут увидеть контент после заголовка с командой разрыва?
_____________
Меньше кода - меньше багов ©
Цитата |
А зачем нужен этот заголовок? |
Данный заголовок указывает на размер данных содержащихся в теле ответа сервера.
Цитата (LRCenter @ 20.12.2012 - 15:57) |
А этот способ будет работать в любом браузере/агенте? |
В Хроме работает, про ПС не знаю, теоретически, всё что соблюдает стандарты HTTP должно работать нормально
LRCenter
20.12.2012 - 14:47
Цитата |
Данный заголовок указывает на размер данных содержащихся в теле ответа сервера. |
Это понятно, я хотел спросить зачем его указывать принудительно?
_____________
Меньше кода - меньше багов ©
Цитата (LRCenter @ 20.12.2012 - 16:47) |
Это понятно, я хотел спросить зачем его указывать принудительно? |
Могу ошибатся, но скорее всего веб-сервер будет ждать завершения работы скрипта, чтобы отправить данный заголовок автоматом.
neadekvat
20.12.2012 - 15:56
LRCenter, обрисуй задачу шире, возможно, есть другие пути решения. Например, из скрипта, к которому обращаются из браузера, запустить в фоне другой скрипт. Соответственно, этот умрет, а в фоне - будет жить.
Цитата (LRCenter @ 20.12.2012 - 13:47) |
Цитата | Данный заголовок указывает на размер данных содержащихся в теле ответа сервера. |
Это понятно, я хотел спросить зачем его указывать принудительно?
|
Чтобы клиент знал когда конец тела ответа.
Клиент посылает аналогичный заголовок, когда посылает POST запрос, и сервер понимает где конец запроса.
_____________
VPS от 5$, первые 2 месяца -
бесплатно.
LRCenter
22.12.2012 - 14:14
neadekvat
Да я над этим думал.
Если вы говорите про exec() или system(), то это интересное решение, но к сожалению работает только под линуксом.
Вот если-бы под виндой и линуксом работало.
_____________
Меньше кода - меньше багов ©
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.