Переменные из внешних источников
HTTP Cookies
PHP прозрачно поддерживает блоки данных cookies по HTTP-протоколу в соответствии с требованиями стандарта
» RFC 6265. Cookies —
механизм хранения данных в удалённом браузере, по которым сервер отслеживает
или идентифицирует пользователей, которые вернулись на сайт.
Cookies устанавливают функцией setcookie().
Cookies — часть HTTP-заголовка, поэтому функцию SetCookie
требуется вызывать перед отправкой вывода браузеру.
Это же ограничение касается функции header().
Данные, которые хранят cookie, доступны
в массивах данных cookie наподобие суперглобальных переменных $_COOKIE
или $_REQUEST. Подробности и примеры
даёт описание функции setcookie().
Замечание:
Начиная с PHP 7.2.34, 7.3.23 и 7.4.11 по соображениям безопасности
имена входящих cookie больше не декодируются
из URL-кодированной строки.
Когда одной переменной cookie требуется присвоить больше одного значения,
значения присваивают как массив. Например:
Такой вызов создаст два разных блока данных cookie, хотя в скрипте
переменная MyCookie теперь будет одним массивом.
Если требуется установить только один блок данных cookie
с несколькими значениями, сначала обдумывают
вызов для таких значений функции наподобие serialize()
или explode().
Обратите внимание, что блок данных cookie заменит в браузере предыдущий
блок данных cookie с тем же именем, если только путь или домен не отличаются.
Так в приложении с корзиной покупок можно сохранить количество товаров:
Пример #4 Пример использования функции setcookie()
<?php
if (isset($_COOKIE['count'])) {
$count = $_COOKIE['count'] + 1;
} else {
$count = 1;
}
setcookie('count', $count, time() + 3600);
setcookie("Cart[$count]", $item, time() + 3600);
?>
Точки в именах входящих переменных
PHP, как правило, не изменяет имена переменных, которые передали скрипту.
Однако следует отметить, что точка — неправильный символ
в имени переменной PHP. Поэтому рассмотрим такую запись:
<?php
$varname.ext; /* Неправильное имя переменной */
?>
В приведённом примере интерпретатор видит переменную
$varname, после которой идёт оператор
конкатенации, а затем голая строка (то есть строка, которую не заключили
в кавычки, и которая не соответствует ни одному из ключевых или
зарезервированных слов) «ext». Очевидно, что это не даст ожидаемого результата.
Поэтому важно отметить, что PHP будет автоматически
заменять точки в именах входящих переменных на символы
подчёркивания.
Определение типов переменных
Поскольку PHP определяет типы переменных и преобразовывает типы (как правило)
по мере необходимости, не всегда очевидно, какому типу принадлежит переменная
в каждый момент времени. PHP содержит несколько функций, которые умеют
определять тип переменной, например: gettype(),
is_array(), is_float(),
is_int(), is_object()
и is_string(). Подробнее о типах данных, которые
поддерживает PHP, рассказывает раздел
«Типы».
HTTP — текстовый протокол, и большая, если не вся, часть содержимого,
которое попадает в суперглобальные массивы
наподобие $_POST и $_GET, останется в виде строк.
PHP не будет преобразовывать значения в конкретный тип.
В приведённом примере элемент $_GET["var1"]
будет содержать строку «null», а элемент $_GET["var2"] — строку «123».
/index.php?var1=null&var2=123