| |
ти I книги. Оператор echo,
предназначенный для вывода данных в браузер, нам также хорошо знаком. Теперь
осталось лишь разобрать, какие средства предусмотрены в PHP для работы с
заголов-
ками HTTP.
Установка заголовков ответа
Первая функция, которую мы сейчас рассмотрим, — Header() — предназначена для
посылки заголовка браузеру (точнее, для добавления заголовка к документу,
пересы-
лаемому браузеру). Она может быть вызвана только до первой команды вывода сце-
нария (конечно, если вы до этого не воспользовались функцией буферизации
ob_start()).
Вывод заголовка
int Header(string $string)
Обычно функция Header() является одной из первых команд сценария. Она предна-
значена для установки заголовков ответа, которые будут переданы браузеру — по
одному заголовку на вызов. Не забывайте, что вызов Header() обязательно должен
осуществляться до любого оператора вывода в сценарии — в противном случае вы
получите предупреждение. Заметьте, что текст вне и ?> также рассматривается
как оператор вывода, а потому старайтесь не делать лишних пробелов до первой
"скобки" в сценарии (и в особенности в файле, который этим сценарием включа-
ется) и, конечно, после последнего ограничителя ?> во включаемом файле. Впрочем,
вы сможете легко обнаружить подобную ошибку, если выставите уровень контроля
ошибок, равный 15 (1+2+4+8) — в этом случае при недопустимом вызове Header()
вы получите предупреждение. Пример:
// перенаправляет браузер на сайт PHP
Header("Location: http://www.php.net");
// теперь принудительно завершаем сценарий, ввиду того, что после
// перенаправления больше делать нечего
exit;
Часть IV. Стандартные функции PHP 290
Запрет кэширования
Еще одно полезное приложение функции Header() — запрет кэширования докумен-
та браузером и Proxy-серверами. Большинство сценариев формируют документы,
которые при каждом запуске программы изменяются. Очевидно, если браузер поль-
зователя начнет кэшировать такие документы, ничего хорошего не получится. Вы-
ход — использовать в начале сценария следующие команды:
Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Дата в прошлом
Header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
Header("Pragma: no-cache"); // HTTP/1.0
Header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
Самое неприятное то, что для полного запрета кэширования приходится всегда
посы-
лать 4 указанных заголовка, и ни один пропустить нельзя — в противном случае не
сработает либо браузер, либо Proxy-сервер. Так что рекомендую оформить их все в
виде функции (например, с именем NoCache()) и затем вызывать эту функцию в
нужный момент.
Получение заголовков запроса
Для получения всех заголовков запроса (того самого запроса, что вынудил
запустить-
ся сценарий) следует воспользоваться функцией GetAllHeaders():
array GetAllHeaders()
Функция GetAllHeaders() возвращает ассоциативный массив, содержащий данные
о HTTP-заголовках запроса клиента, породившего запуск сценария. Ключи массива
содержат названия заголовков, а значения — их величины.
Вот пример использования этой функции:
$headers = GetAllHeaders();
foreach($headers as $header=>$value)
echo "$header: $value \n";
Функция GetAllHeaders() поддерживается PHP только в том случае, если
он установлен в виде модуля Apache. В противном случае этой функции про-
сто не будет (да и не может быть, потому что обычный CGI-сценарий не имеет
доступа к заголовкам запроса). В частности, в PHP для Windows (который ча-
ще всего реализуют именно в виде сценария) функция GetAllHeaders() не-
доступн
|
|