PHP не имеет возможности управлять этим процессом. Однако можно заказать сброс буфера, т.е. немедленно переслать его в браузер. Для этого можно воспользоваться функцией flush, однако прибегать к услугам этой функции целесообразнее в больших сценариях. Как браузеры, так и пользователи имеют вполне объяснимые рамки временных установок ожидания ответа. И PHP предоставляет возможность проинформировать их о том, как идут дела со сбросом буфера.
Два события могут неожиданно остановить выполнение сценария, если он работает очень долго и когда пользователь щелкает по кнопке браузера Остановить. По умолчанию PHP ограничивает сценарии временными рамками, обычно задаваемыми в секундах в файле инициализации php.ini. Обычно это время равно 30 секундам, но его можно откорректировать с помощью директивы max_execution_time. Но 30 секунд обычно является оптимальным временем. Если вы ошибочно написали сценарий, который будет работать вечность, PHP сможет остановить его. В противном случае несколько таких ошибочных сценариев могут полностью остановить работу вашего сервера. По этой же причине пользователям обычно предоставляется возможность прервать выполнение запроса страницы.
Бывают такие случаи, когда сценарию необходимо предоставить возможность выполняться до полного завершения, и PHP можно запрограммировать таким образом, чтобы он проигнорировал все временные ограничения и команды на прекращение работы от пользователей. Функция set_time_limit сбрасывает таймер PHP. Подробнее об этом рассказывается в главе 15, "Настройка".
Как-то я написал сценарии, которые выполнялись целую ночь. Подобным образом ди­ректива ignore_user_abort инструктирует PHP продолжать работу даже после того, как пользователь щелкнул по кнопке Остановить. Вместо того чтобы продолжить работу сценария, вы можете остановить его и проанализировать причину остановки с помощью специального программного кода. Для этого необходимо задать выполнение специальной функции PHP, register_shutdown_function, в случае завершения работы сценария. Эта функция выполняется независимо от причины завершения сценария. Она выполняется даже тогда, когда сценарий завершается нормально. Причину можно определить с помощью двух функций, connection_aborted и connection_timeout, которые детально описываются в главе 9, "Операционная система".
7.2. Запись в браузер
PHP располагает тремя функциями, echo, print и printf, которые позволяют отсылать текст в браузер. Все они выполняют аналогичные функции: принимают значение и распечатывают его в браузере. Функция printf позволяет задавать формат вывода, а не пересылать значения такими, как они есть. В последующих примерах используются операторы print, прежде всего, исходя из моих личных предпочтений. Обычно я не пользуюсь возможностями форматирования, которые предоставляет оператор printf. Во многих более старых примерах PHP, которые можно найти в Internet, используется только оператор echo, так как в PHP/FI существовал он один. Все три функции обсуждаются в главе 8, "Браузер ввода-вывода".
Важно помнить, что все, что вы пишете, обрабатывается Web-браузером. Если вы не предпримете определенных усилий, чтобы все было наоборот, весь ваш вывод будет рассматриваться как HTML-текст. При пересылке текста, который является HTML-кодом, он будет должным образом обработан. До этого я рассылал тег <br> с помощью оператора print, но в листинге 7.1 представлен еще более яркий пример реализации этой концепции.

| Листинг 7.1. Отправка HTML-кода с помощью оператора print
<?php
print("Bbi используете " .
$_SERVER['HTTP_USER_AGENT'] .
" для просмотра этой страницы. <br>n");
?>

 Конечно, PHP отсылает в браузер все, что находится вне его тегов. Это наиболее быстрый и наименее гибкий способ отправки содержимого. И здесь не совсем ясно, когда следует использовать оператор print, а когда размещать текст за пределами тегов PHP. На передний план здесь выходят проблемы эффективности и удобочитаемости, но на время отложим их в сторону. Более детально эта проблема рассматривается в конце книги.