Справочник по PHP - white cat
Шрифт:
Интервал:
Закладка:
<?session_start()?>
<body>
<A href="php.php">PHP</A>
<A href="php.php?ss=1">PHP - выражения</A>
Вот что получиться, при наведении мышки на эти ссылки:
http://www.spravkaweb.ru/php.php?PHPSESSID=81456f6a886f2104http://www.spravkaweb.ru/php.php?ss=1&PHPSESSID=34f5d04a35601510f45
В PHP существует еще одна возможность использовать сессии с отключенными Cookies - добавление скрытых полей в формы, которые формируют сценарий, чтобы передать идентификатор сессии вызываемому документу.
Приведем пример, который выявляет эту возможность:
<?session_start()?>
<form action=act.php mathod=post>
</form>
А вот что получиться при просмотре нашей страницы в виде HTML:
<form action="act.php" method="post"><INPUT TYPE=HIDDEN NAME="PHPSESSID" VALUE="0a561093f84d4321"></form>
Из примера мы видим, что PHP добавил в форму скрытое поле с нужным именем и значением.
Работа с WWW
Header
Вывод заголовка.
Синтаксис:
int Header(string $string)
Обычно функция Header() является одной из первых команд сценария. Она предназначена для установки заголовков ответа, которые будут переданы браузеру - по одному заголовку на вызов. Вызов Header() обязательно должен осуществляться до любого оператора вывода в сценарии - в противном случае вы получете предупреждение. Текст вне <? и ?> также рассматривается как оператор вывода.
Пример:
// перенаправляет браузер на сайт PHP
Header("Location: http://www.php.net");
// теперь принудительно завершаем сценарий, ввиду того, что после
// перенаправления больше делать нечего
exit;
Смотреть также
Установка заголовков ответа
Header
Вывод заголовка.
Синтаксис:
int Header(string $string)
Обычно функция Header() является одной из первых команд сценария. Она предназначена для установки заголовков ответа, которые будут переданы браузеру - по одному заголовку на вызов. Вызов Header() обязательно должен осуществляться до любого оператора вывода в сценарии - в противном случае вы получете предупреждение. Текст вне <? и ?> также рассматривается как оператор вывода.
Пример:
// перенаправляет браузер на сайт PHP
Header("Location: http://www.php.net");
// теперь принудительно завершаем сценарий, ввиду того, что после
// перенаправления больше делать нечего
exit;
Смотреть также
Получение заголовков запроса
getallheaders
Получение всех заголовков запроса.
Синтаксис:
array GetAllHeaders()
Функция GetAllHeaders() возвращает ассоциативный массив, содержащий данные о HTTP-заголовках запроса клиента, породившего запуск сценария. Ключи массива содержат названия заголовков, а значения - их величины.
$headers = GetAllHeaders();
foreach($headers as $header=>$value)
echo "$header: $value<br>n";
Функция GetAllHeaders() поддерживается PHP только в том случае, если он установлен в виде модуля Apache. В противном случае этой функции просто не будет (да и не может быть, потому что обычный CGI-сценарий не имеет доступа к заголовкам запроса). В частности, в PHP для Windows (который чаще всего реализуют именно в виде сценария) функция GetAllHeaders() недоступна.
Работа с Cookies
Немного теории
Cookie - это именованная порция информации, которая может сохраняться прямо в настройках браузера пользователя между сеансами. Причина, по которой применяются Cookies - большое количество посетителей вашего сервера, а также нежелание иметь нечто подобное базе данных для хранения информации о каждом посетителе. Поиск в такой базе данных может очень и очень затянуться, и, в тоже время, нет никакого смысла централизованно хранить столь отрывочные сведения. Использование Cookies фактически перекладывает задачу на плечи браузера, решая одним махом как проблему быстродействия, так и проблему большого объема базы данных с информацией о пользователе.
Самый распространенный прием применения Cookies - логин и пароль пользователя, использующего некоторые защищенные ресурсы вашего сайта. Эти данные, конечно же, между открытиями страниц хранятся в Cookies, для того чтобы пользователю не пришлось их каждый раз набирать вручную заново.
У каждого Cookies есть определенное время жизни, по истечении которого он автоматически уничтожается. Существуют также Cookies, которые "живут" только в течение текущего сеанса работы с браузером.
Каждый Cookie устанавливается сценарием на сервере. Для этого он должен послать браузеру специальный заголовок вида:
Set-cookie: данные
Сценарии с других серверов, а также расположенные в другом каталоге, не будут извещены о "чужих" Cookies. Для них их словно и нет. И это правильно с точки зрения безопасности - кто знает, насколько секретна может быть информация, сохраненная в Cookies?
Получение Cookie
Предположим, сценарий отработал и установил какой-то Cookie, например, с именем Cook и значением Val. В следующий раз при запуске этого сценария (на самом деле, и всех других сценариев, расположенных на том же сервере в том же каталоге или ниже по дереву) ему предастся пара типа Cook=Val (через специальную переменную окружения). PHP это событие перехватит и автоматически создаст переменную $Cook со значением Val. То есть интерпретатор действует точно так же, как если бы значение нашего Cookie пришло откуда-то из формы. Та переменная, которую мы установили в прошлый раз, будет доступна и сейчас.
setcookie
Установка Cookie.
Синтаксис:
int setcookie(string $name [,string $value] [,int $expire] [,string $path] [,string $domain] [,book $secure])
Так как Cookie фактически представляет собой заголовок, установить его можно только перед первой командой вывода в сценарий.
Вызов setcookie() определяет новый Cookie, который тут же посылается браузеру вместе с остальными заголовками. Все аргументы, кроме имени, необязательны. Если задан только параметр $name (имя Cookie), то Cookie с указанным именем у пользователя удаляется. Вы можете пропускать аргументы, которые не хотите задавать, пустыми строками "". Аргументы $expire и $secure не могут быть представлены строками, а потому вместо пустых строк здесь нужно использовать 0.
Параметр $expire задает timestamp, который, например, может быть сформирован функциями time() или mktime().
Параметр $secure говорит о том, что величина Cookie может передаваться только через безопасное HTTPS-соединение.
Примеры:
// Cookie на одну сессию, т.е. до закрытия браузера
SetCookie("TextCookie","value");
// Эти Cookies уничтожаются браузером через 1 час после установки
SetCookie("TextCookie",$val,time()+3600);
SetCookie("TextCookie",$val,time()+3600,"/~rasmus/",".utoronto.ca",1);
После вызова SetCookie() только что созданный Cookie сразу появляется среди глобальных переменных как переменная с заданным в параметре $name именем. Она появиться и при следующем запуске сценария - даже если SetCookie() в нем и не будет вызвана.
SSI и функция virtual()
Немного теории
Для одного и того же документа в Apache нельзя применять два "обработчика". Иными словами, действует принцип: либо PHP, либо SSI.
Однако в PHP имеются определенные средства для "эмуляции" SSI-конструкции include virtual.
Конструкция include virtual загружает файл, URL которого указан у нее в параметрах, обрабатывает его нужным обработчиком и выводит в браузер. То есть все происходит так, будто указанный URL был затребован виртуальным браузером. Большинство SSI-файлов ограничиваются использованием этой возможности.
virtual
Имитация include virtual.
Синтаксис:
int virtual(string $url)
Функция virtual() представляет собой процедуру, которая может поддерживаться только в случае, если PHP установлен как модуль Apache. Она делает то же самое, что и SSI-инструкция <-- #include virtual=... -->. Иными словами, она генерирует новый запрос серверу, обрабатываемый им обычным образом, а затем выводит данные в стандартный поток вывода.
Чаше всего функция virtual() используется для запуска внешних CGI-сценариев, написанных на другом языке программирования, или же для обработки SSI-файлов более сложной структуры. В случае, если запускается сценарий, он должен генерировать правильные HTTP-заголовки, иначе будет выведено сообщение об ошибке. Для включения обычных PHP-файлов с участками кода функция virtual() неприменима - это выполняет оператор include.
Управление выводом
Данная группа функций позволяет управлять тем, как PHP при выполнении сценария выводит информацию. Это может быть полезно в различных ситуациях, в особенности при посылке браузеру HTML-заголовков (headers) после того, как сценарий начал выводить HTML-текст. (В обычном случае невозможно послать заголовок после того, как был начат вывод текста.)