Здравствуйте. Хочу сделать следующее. Скрипт обрабатывает пользовательский запрос, отписывает в респонс результат в виде хтмл, отключается, но не завершается, чтоб не задерживать пользователя. После этого нужно некую аналитику в базе провести. То есть возможно ли такое, что пользователю отдали все, что хотели, закрыли хттп-коннекцию, но скрипт после этого еще некоторое время работает? Насколько я понимаю, функции exit() и die() сливают буферы, закрывают коннекцию и завершают скрипт.
armadillo, там кстати от версии к версии бывало странное поведение - например, некоторые обьекты уничтожались ДО вызова этой функции. В общем, странная она была.
да, уничтожение объектов - это неприятно . но хотя бы глобальные переменные остаются доступны в этой функции?
Я говорю - это бывало в некоторых версиях ПХП. Закономерности я тогда не нашел. Возможно, сейчас все работает корректно
зарегистрированная функция shutdown выполняется при живой хттп-коннекции (внутри шутдаун-функции все написанное функцией echo попадает в респонс) как разорвать коннекцию, но остаться внутри скрипта?
может я что не так делаю? в начале скрипта регистрирую коллбэк. для проверки внутри этого коллбэка сделал вызов эхо() и увидел в пришедшем хтмл эти слова.
к сожалению, сейчас оно вызывается до сброса буфера. пример: PHP: <?php class TEST { function TEST() { echo __METHOD__ . "<br/>\n"; register_shutdown_function(array($this, "shutdown_static"), "inside"); register_shutdown_function(array($this, "shutdown_public"), "inside"); } public function shutdown_public( $param ) { echo __METHOD__ . ":param = $param <br/>\n"; } static function shutdown_static( $param ) { echo __METHOD__ . ":param = $param <br/>\n"; sleep(10); } } ob_start("ob_gzhandler", 9); $test = new TEST(); register_shutdown_function(array("TEST","shutdown_static"), "outside"); register_shutdown_function(array($test,"shutdown_public"), "outside"); die("DYING BUT NOT DEAD<br/>\n"); echo "NOTE: shutdown methods called after exit() and even die() <br/>\n"; ob_end_flush(); ?> то есть ее нельзя использовать для сокращения времени загрузки страницы и отложенных действий. придется самому реализовывать этот функционал в своем module.php
о как, у меня при наличии die/exit эти функции дают вывод, при нормальном завершении - не дают вывода. но вывод все равно тормозится до их завершения