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. На передний план здесь выходят проблемы эффективности и удобочитаемости, но на время отложим их в сторону. Более детально эта проблема рассматривается в конце книги.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Операции ввода-вывода и доступ к диску. Часть Вторая.
28-12-2009
<< Предыдущая статья | Следующая статья >> |
PHP. Операции ввода-вывода и доступ к диску | PHP. Операции ввода-вывода и доступ к диску. Часть Третья. |