Для того чтобы сценарий мог приносить определенную пользу, он должен иметь возможность общаться с внешним миром. Мы уже рассмотрели сценарии, которые отсылали текст браузеру и принимали какую-то информацию от функций, подобных функции date. В этой главе мы изучим различные способы обмена данными сценариев PHP без применения специального интерфейса: чтение с локальных дисков, подключение к удаленным машинам через Internet и получение данных.
Среда PHP работает аналогично другим программным средам, но с одним существенным отличием. Ввод пользователя обычно производится из простых HTML-форм, поля в которых преобразуются в переменные. При этом остановить выполнение сценария посередине и задать пользователю вопрос нельзя. Такая ситуация обеспечивает уникальные возможности. При каждом запуске сценария контекст неизвестен, неизвестна и предыстория, если об этом не позаботиться предварительно.
7.1. HTTP-соединения
Займемся изучением процесса обмена данными между браузером и Web-сервером. Это нам потребуется просто для иллюстрации, но можно обратиться и к более детализированному описанию. Такому, например, как описание с Web-узла W3C (<http://www.w3.org/Protocols/>).
При вводе URL в окно ввода адреса браузера первой задачей браузера является разбиение его на составные части, первой из которых является тип протокола (HTTP). Следующей частью является адрес Web-сервера, с которым браузер устанавливает соединение.
Браузер должен идентифицировать документ, который он хочет получить от Web-сервера, и делает он это с использованием HTTP-протокола. Перед завершением этого запроса браузер может предоставить строки дополнительного текста, которые называются заголовками (header). В этих заголовках серверу предоставляется информация о типе браузера, типе документа, который браузер может получить, и, возможно, адрес (или URL) страницы, на которую делается ссылка. В соответствии с протоколом Common Gateway Interface (CGI) Web-сервер размещает эти заголовки в переменных среды. Когда начинается выполнение PHP-сценария, PHP преобразует свои переменные среды в PHP-переменные. Одним из самых полезных является заголовок, в котором описывается тип и версия Web-сервера и который отсылается браузеру как User-agent. Web-сервер создает переменную среды HTTP_USER_AGENT, которая и содержит значение этого заголовка. PHP добавляет элемент в массив _SERVER с тем же именем. Ссылку на него можно делать следующим образом: $_SERVER['HTTP_USER_AGENT'] . Если вы используете Apache, у вас есть возможность использовать функцию getallheaders. Она возвращает массив всех заголовков, которыми обменивались браузер и сервер.
В соответствии с протоколом HTTP после начала выполнения сценария PHP обмен находится в следующем состоянии: некоторые заголовки отправлены в браузер, а содержимое не отправлено. Это можно считать своеобразной дополнительной возможностью для отправки дополнительных заголовков. Можно отправить заголовок, который заставит браузер запросить аутентификацию, а также заголовки, которые делают запрос на кэширование страниц, или заголовки, которые выполняют переадресацию на другой URL. Это лишь некоторые из множества HTTP-заголовков, которые можно отправить с помощью функции header. Некоторые из общих задач описываются в последнем разделе этой книги.
PHP помещает исходящие заголовки в список. Перед тем как переслать содержимое, PHP должен отправить все заголовки. После того как содержимое будет отправлено, возможность для отправки заголовков будет упущена. Содержимым является любой текст, расположенный за пределами PHP-тегов, даже если это был простой символ перевода строки. При попытке отправить заголовок после отправки содержимого PHP генерирует сообщение об ошибке. Можно воспользоваться функцией headers_sent, чтобы проверить, существует ли еще возможность добавления заголовков, или делать это уже поздно. Файлы cookies, о которых речь пойдет позднее, также используют заголовки и поэтому имеют аналогичное ограничение.
По мере того как сценарий выполняется и отсылает содержимое, Web-сервер сохраняет вывод в буфере. Для любой сети это является перегрузкой, поэтому небольшое количество памяти временно сохраняет информацию, которая будет отослана в пакеты. Web-сервер имеет такой буфер.
ТОП-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. Операции ввода-вывода и доступ к диску. Часть Вторая. |