7.3. Буферизация вывода
Как уже было сказано, Web-сервер буферизирует все содержимое, отправленное в браузер, и можно задать операцию сброса буфера. PHP имеет также механизм управляемой буферизации выводимой информации. Среди функций буферизации вывода, перечисленных в главе 8, "Браузер ввода-вывода", упоминаются функции ob_start, ob_end_flush и ob_end_clean.
При вызове функции ob_start PHP помещает все, что было послано в браузер, в буфер, включая текст, находящийся за пределами тегов PHP. Web-сервер не получит это содержимое до тех пор, пока не будет вызвана функция ob_end_flush, которую можно применять двумя способами. Один из них позволяет избежать возникновения проблемы, связанной с отправкой заголовков. Поскольку PHP отправляет все заголовки одновременно, необходимо позаботиться о том, в какой момент использовать функцию header. Это может привести к такому алгоритму работы сценария, при котором начальные части сценария станут "мертвой" зоной и никогда не будут выведены. При использовании буферизации вывода можно где угодно добавить заголовки в стек и задержать отправку содержимого до получения последней строки вашего сценария.
Другой способ применения этой функции заключается в создании HTML-таблиц. Представьте себе процедуру создания таблицы, которая заполняется данными из базы данных. Вначале должны печататься открывающие теги таблицы, и для этого вы выполняете запрос и возвращаете результаты в цикле. Если выполнение происходит без ошибок, печатается тег, закрывающий таблицу. В случае возникновения ошибки в цикле вы можете прервать выполнение, и очередь кода, закрывающего таблицу, никогда не настанет. Это нехорошо из-за особенностей поведения браузера Netscape Navigator: он не отображает информацию, содержащуюся в незакрытой таблице. Решением будет включение режима буферизации вывода перед созданием таблицы. Если создание таблицы завершается успешно, буфер можно сбросить. В противном случае для очистки буфера придется прибегнуть к помощи функции ob_end_clean.
7.4. Переменные среды
PHP также имеет возможность работать с переменными среды, создаваемыми при запуске оболочки. Некоторые из них являются стандартными переменными типа PATH, другие - переменными, определенными интерфейсом CGI. Примером таких переменных являются REMOTE_ADDR и HTTP_USER_AGENT. Для удобства PHP добавляет их все в массив _SERVER.
Подобно переменным среды, PHP создает собственные переменные. Первой из таких переменных является массив GLOBALS, который представляет собой ассоциативный массив всех переменных, с которыми работает сценарий. Изучение этого массива позволяет узнать обо всех переменных среды, а также о некоторых других переменных. Кроме переменной GLOBALS, имеются переменные _GET, _POST, _COOKIE, _SERVER и _REQUEST, которые, как понятно по их именам, являются ассоциативными массивами переменных, созданными тремя методами. Ими может пользоваться браузер для отправки информации на сервер. Массив _REQUEST объединяет переменные _GET, _POST и _COOKIE в один массив.
Набор переменных определяется комбинацией Web-сервера и операционной системы. Для того чтобы просмотреть, что для вас доступно, можно написать специальный сценарий, который выводит массив GLOBALS, или воспользоваться известной функцией phpinfo.
ТОП-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. Операции ввода-вывода и доступ к диску. Часть Четвёртая. |