ipshenicyn of delaweb
7/28/2017 - 11:12 PM

отдать ответ клиенту, закрыть соединение и разлочить сессию. полезно, когда нужно быстро ответить клиенту, чтобы он мог продолжить работу,

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

/**
 * сбрасывает ответ клиенту и выполняет все необходимые действия, 
 * после которых можно продолжить длительный процесс не мешая клиенту пользоваться сайтом 
 * @param $response
 * @param array $headers
 */
function flushResponse($response, $headers = [])
{
    ignore_user_abort(true);
    ob_start();

    echo $response;

    header('Connection: close');
    header('Content-Length: '.ob_get_length());
    header('Status: 200');

    if(!empty($headers)){
        foreach ($headers as $header) {
            header($header);
        }
    }

    session_write_close();
    ob_flush();
    flush();

    if(function_exists('fastcgi_finish_request')){
        fastcgi_finish_request();
    }
}