Ярлыки

.htaccess (4) тестирование (8) шаблоны проектирования (3) css (5) Debian (6) docker (2) Doctrine2 (6) Git (6) html (4) java (6) javascript (13) jquery (11) LFS (3) linux (23) mac os (4) mod_rewrite (2) MSSQL (4) MySQL (18) ORM Doctrine (17) patterns (3) PDO (3) perl (7) PHP (64) PHPUnit (8) Python (15) SEO (2) Silex (1) SimpleXML (1) SQL (14) ssh (4) Ubuntu (24) Yii1 (1) Zend Framework (19) ZendFramework2 (8)

понедельник, 11 апреля 2011 г.

PHP. Работа с соединением (посылаем ответ и продолжаем выполнение).

Если надо, например, показать страницу, закрыть соединение после запроса пользователя и продолжить выполнение длительного процесса на сервере, то можно использовать такой код ...
ignore_user_abort(true); // скрипт продолжит выполнение
                         // даже если пользователь нажмет стоп в браузере
// начинаем буфферизацию вывода
ob_start();
echo "Ваш запрос принят ...";

// размер ответа
$size = ob_get_length();

// посылаем заголовки браузеру, что соединение закрыто
header("Content-Length: $size");
header("Content-Encoding: none"); // если включен zlib, 
                                  //не отдает контент пока не закончится вывод
header("Connection: close");

// вывод
ob_end_flush();
ob_flush();
flush();

// закрываем текущую сессию, если запущена
if (session_id()) session_write_close();

/******** процесс начинает свое выполнение ********/

sleep(50);
...

Комментариев нет:

Отправить комментарий