Учебник по основам PHP. PHPBeginner

Использование интерфейса HTTP


Эти функции позволяют отсылать данные браузеру клиента непосредственно на уровне протокола HTTP.

headers_sent

Проверка отсылки заголовков

boolean headers sent (void)

Возвращает TRUE, если заголовки HTTP уже были отосланы; иначе — FALSE.

См. также header().

header

Посылка простого заголовка HTTP

int header (string string)

Функция используется в начале сценария HTML (до вывода прочего текста) для низкоуровневой посылки строк заголовков по протоколу HTTP. Спецификация заголовков HTTP 1.1 (http://www.w3.org/ Г Protocols/rfc2616/rfc2616) определяет их формат и назначение.

Не забывайте, что вывод может происходить также из вложенных файлов, если они были подключены директивой include() или с помощью параметра auto_prepend.

Наиболее общие варианты использования заголовков представлены ниже.

Переадресация. Если браузер получает заюлонок Location, то он пытается загрузить страницу с нового указанного адреса (сервер Apache при этом также получает код статуса REDIRECT).



<?php
header
("Location: http://www.p.net/new.php");
echo "Эта страница была перенесена
в другое место. Обновите ссылки.": exit;>

Выполнение команды HTTP/ (регистр не важен).

header ("HTTP/1.0 404 Not Found").
// страница не найдена
header ("HTTP/1.0 403 Forbidden"):
// доступ к этому адресу запрещен

Управление кэшированием (на браузере или прокси-сервере). Следующие четыре команды запрещают кэширование различными способами.

header ("Expires: Mon. 26 Jul
1988 05:00:00 GMT").
// Уже устаоело header
("Last-Modified- " . gmdateC'D. d M Y H:vs")
" GMT"):
// только что модифицировано
header ("Cache-Control: no-cache,
must-revalidate").
// HTTP/1.1 header ("Pragma: no-cache"):
// HTTP/1.0

См. также headers_sent().

HTTP-аутентификация в PHP

Осуществлять аутентификацию HTTP можно, только если PHP установлен как модуль web-сервера Apache. Для версии CGI и на других серверах (например, IIS) это невозможно. Аутентификация происходит путем посылки (с помощью функции Heatier()) заголовка Authentication Required, что заставляет браузер вывести окно для ввода имени пользователя и его пароля. После того как пользователь вводит эти данные, браузер заново запрашивает страницу, передавая серверу переменные $PHP_AUTH_USER, $PHP_AUTH_PW и $PHP_AUTH_TYPE, соответственно со значениями имени пользователя, его пароля и метода аутентификации. В настоящее время поддерживается только аутентификация простого типа «Basic».


См. также функцию Header().

<?рhр if(hsset($PHP_
AUTH_USER)) { Header
C'WWW-Authenticate: Basic
rea)m=\"My RealmV"):
Header("HTTP/1.0 401
Unauthorized"): echo "Вы
отменили ввод
идентификационной информации.\n";
exit: } else { // здесь обычно
".роверяется имя пользователя
и пароль echo "Привет
$PHP_AUTH_USER.<P>";
echo "Вы вели пароль:
$PHP_AUTH_PW.<P>"; } ?>

Cookies

PHP полностью поддерживает cookies. Cookies — это механизм HTTP для сохранения информации о пользователе на его клиентской машине. Они работают следующим образом:

  • при загрузке страницы браузером в заголовках передаются cookies (это должно выполняться сценарием РНР);


  • браузер сохраняет полученные cookies в определенном для них месте (обычно в маленьких файлах);


  • при загрузке следующей страницы (из того же домена и пути, что и страница, содержавшая cookies) браузер возвращает те cookies, которые у него имеются.


  • При получении cookies PHP преобразовывает их в переменные, как и переменные, полученные HTTP методами GET и POST (они также сохраняются в глобальном массиве $HTTP_COOKIE_VARS[]). Таким образом можно ассоциировать определенную информацию с конкретным пользователем (а реально его браузером) и передавать данные между страницам» одного сайта.

    Например, так можно сохранять настройки пользователя для сайта или для электронных магазинов, информацию о том, что находится в «покупательской корзине» пользователя. В противном случае пришлось бы передавать всю эту информацию (часто достаточно объемную) в строке адреса URL. Имеется также альтернативный и часто более предпочтительный вариант — использование сессий (см. ниже).

    Не забывайте, что cookies являются частью заголовков HTTP, и передавать их следует до того, как началась передача текста страницы (а также до того, как функцией header() будут посланы обычные заголовки). Таковы правила HTTP. Стоит отметить, что для одной страницы не может быть установлено более 20 cookies. А также, что значения cookies можно будет получить только при загрузке следующей страницы удалять cookies нужно с теми параметрами, с которыми они были созданы.



    setcookie

    Посылка cookie /

    int setcookie (string name [, string value [, int expire [, string path [, string domain [, int secure])

    Функция посылает переменную cookie в заголовке HTTP. Все аргументы, кроме имени name, необязательны (если какие-то указывать не требуется, то тогда их значением может быть пустая строка "" для строковых аргументов и 0 для числовых). Если у браузера уже имелся cookie с таким именем, он будет заменен новым.

    В аргументе value можно указать значение, которое необходимо сохранить. Время, до которого браузер должен хранить у себя cookie, указывается в аргументе expire (в формате Unix time, возвращаемом функциями time() или mktirae()). Если в аргументе secure указывается ненулевое значение, то cookie будет передаваться в зашифрованном виде через протокол HTTPS.

    В аргументах path и domain можно указать, страницам из каких каталогов какого домена необходимо возвращать значения cookies.

    Следующие примеры устанавливают cookies:

    setcookie ("TestCookiel". "Test Value"):
    setcookie ("TestCooHeZ1 , $value.fime()+3GOO);
    /* устаревает через час */ setcookie
    ("TestCook'eS". $value.time()+3600.
    "/-rasmus/". " utoronto.ca". 1):

    Удалить cookies из примера выше можно следующим образом:

    setcookie ("TestCookiel"):
    // set the expiration date to one hour ago
    setcookie ("TestCookie2". "". timeO - 3600):
    // время уже прошло
    setcookie ("TestCookleS". "". timeO - 3600.
    "/-nasmus/". " utoronto.ca". 1);

    Можно сохранять в одном cookie одномерный массив (но устанавливать значение каждого элемента нужно по отдельности):

    setcookie ("cookie[three]".
    "cookie_three").
    setcookie ("cookie[two]".
    "cookie_two"): , setcookie
    ("coohe[one]". "cookie_one").
    // проверим получение на
    следующей странице ]
    if (isset (Scookie)) { while
    (list ($name. Svalue) = each ($cookie))
    { I echo "Sname == $vatue<br>\n": } }

    Документацию Netscape, описывающую cookies, можно найти по адресу: http://www.netscape.com/newsref/std/cookie_spec.html

    Microsoft Internet Explorer 4 (c Service Pack 1) некорректно работает с cookies, имеющими установленный третий параметр. Netscape Communicator 4.05 и Microsoft Internet Explorer 3.x некорректно работают с cookies с не установленными третьим и четвертым параметрами.


    Содержание раздела