Управление ответом в php скрипте

Однажды мне понадобилось отправлять ответ пользователю в браузер до завершения работы php-скрипта. Известно, что даже такой простой скрипт не отпустит посетителя со страницы в течение 20 секунд:

header("Location: http://www.bloged.org",TRUE,301);
sleep(20);
?>

Т.е. пока скрипт не завершит свою работу, по умолчанию результат не уйдет в браузер и редиректа не случится. Однако, это ограничение можно обойти, например так:

set_time_limit(80);
header("Location: http://www.bloged.org",TRUE,301);
header("Content-Length: 0");
header("Connection: close");
flush();
error_log("Это пишется сразу в лог\n", 3, "/ramdisk/log.txt");
sleep(60);
error_log("А это через минуту\n", 3, "/ramdisk/log.txt");
?>

Несмотря на то, что пользователь уже перенаправлен в другое место, скрипт будет работать еще минуту и в логи запишет все, что надо.

Управление ответом в php скрипте: комментарий

  1. Конечно, длительные скрипты нужно выполнять через cli, чтобы не пользователь не зависел от этого и разработчик не зависел от set_time_limit.
    А в общем любопытно!Спасибо!

Обсуждение закрыто.