- Суперглобальная переменная $_SERVER
- Пример
- Параметры сервера
- Параметры соединения
- Пути на сервере
- Авторизация на .htpasswd
- HTTPS
- URL
- Заголовки браузера
- Дамп переменной $_SERVER
- Using the HTTP_REFERER variable with PHP
- Overview of http referers
- Appearance in log files
- Using HTTP_REFERER in PHP
- Conclusion
- Follow up posts
- Check Out These Related posts:
- Массив $_SERVER
- Параметры сервера
- Параметры соединения
- Пути на сервере
- Авторизация на .htpasswd
- HTTPS
- URL
- Заголовки браузера
- Дамп переменной $ _SERVER
Суперглобальная переменная $_SERVER
Переменная $_SERVER — это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером.
Рассмотрим на примере как использовать суперглобальную переменную $_SERVER:
Пример
"; echo $_SERVER['SERVER_NAME']; echo "
"; echo $_SERVER['HTTP_HOST']; echo "
"; echo $_SERVER['HTTP_REFERER']; echo "
"; echo $_SERVER['HTTP_USER_AGENT']; echo "
"; echo $_SERVER['SCRIPT_NAME']; ?>
В приведенном выше коде мы использовали элементы $_SERVER для получения некоторой информации. Получаем имя текущего файла, над которым мы работаем с помощью элемента PHP_SELF . Затем получаем имя сервера, используемое в настоящее время с использованием элемента SERVER_NAME . А затем получаем имя хоста через HTTP_HOST . HTTP_REFERER — адрес страницы (если есть), с которой браузер пользователя перешёл на эту страницу.
Рассмотрим описание значений глобального массива $_SERVER с примерами.
Параметры сервера
Элемент | Описание |
---|---|
$_SERVER[‘SERVER_NAME’] | Имя хоста, обычно совпадает с доменом (например, wm-school.ru) |
$_SERVER[‘GATEWAY_INTERFACE’] | Версия Common Gateway Interface (CGI), которую использует сервер (CGI/1.1) |
$_SERVER[‘SERVER_SOFTWARE’] | Название и версия сервера (Apache/2.4.7) |
$_SERVER[‘SERVER_SIGNATURE’] | Версия сервера и имя виртуального хоста, обычно пуста |
$_SERVER[‘SERVER_PROTOCOL’] | Имя и версия используемого HTTP протокола (HTTP/1.1) |
$_SERVER[‘SERVER_ADDR’] | IP-адрес сервера (127.0.0.1) |
$_SERVER[‘SERVER_PORT’] | Порт сервера (80) |
$_SERVER[‘SERVER_ADMIN’] | Значение из директивы конфигурационного файла Apache. На хостингах указывают контактный e-mail. |
Параметры соединения
Элемент | Описание |
---|---|
$_SERVER[‘HTTP_HOST’] | Имя сервера, как правило, совпадает с доменом (например, wm-school.ru) |
$_SERVER[‘HTTP_PORT’] | Порт подключения (80) |
$_SERVER[‘REMOTE_ADDR’] | IP-адрес, с которого пользователь просматривает текущую страницу (64.246.37.238) |
$_SERVER[‘REMOTE_HOST’] | Удаленный хост, с которого пользователь просматривает текущую страницу |
$_SERVER[‘REMOTE_PORT’] | Порт на удаленной машине, который используется для связи с веб-сервером |
$_SERVER[‘REQUEST_SCHEME’] | Схема запроса (http) |
$_SERVER[‘REQUEST_METHOD’] | Метод запроса к странице (GET, POST, PUT) |
$_SERVER[‘REQUEST_TIME’] | Время запроса к серверу в Unix timestamp (1537962596) |
$_SERVER[‘REQUEST_TIME_FLOAT’] | Время запроса к серверу с точностью до микросекунд (1537962596.892) |
Пути на сервере
Элемент | Описание |
---|---|
$_SERVER[‘DOCUMENT_ROOT’] | Директория корня сайта, в которой выполняется текущий скрипт (например, /wm-school.ru/scripts) |
$_SERVER[‘CONTEXT_DOCUMENT_ROOT’] | Появился в Apache2, то же самое что и DOCUMENT_ROOT |
$_SERVER[‘PATH_INFO’] | Содержит путь, содержащийся после имени скрипта (Например для адреса https://wm-school.ru/index.php/123 значение будет следующим: /123) |
$_SERVER[‘ORIG_PATH_INFO’] | Исходное значение переменной PATH_INFO перед обработкой PHP |
$_SERVER[‘SCRIPT_NAME’] | Путь и имя выполняемого скрипта (/index.php) |
$_SERVER[‘PHP_SELF’] | Путь к исполняемому скрипту относительно корня сайта, обычно равен SCRIPT_NAME (/index.php) |
$_SERVER[‘SCRIPT_FILENAME’] | Абсолютный путь к исполняемому скрипту (/wm-school.ru/public_html/index.php) |
$_SERVER[‘PATH’] | /usr/local/bin:/usr/bin:/bin |
Авторизация на .htpasswd
Элемент | Описание |
---|---|
$_SERVER[‘AUTH_TYPE’] | Метод HTTP аутентификации (например, Basic) |
$_SERVER[‘REMOTE_USER’] и $_SERVER[‘PHP_AUTH_USER’] | Логин пользователя |
$_SERVER[‘PHP_AUTH_PW’] | Пароль |
HTTPS
Данные переменные появляются при HTTPS соединении:
$_SERVER[‘HTTPS’], $_SERVER[‘HTTP_X_HTTPS’], $_SERVER[‘REDIRECT_HTTPS’]
URL
Значения в примерах приведены для адреса https://wm-school.ru/index.php?page=1&exercise=2
Заголовки браузера
Элемент | Описание |
---|---|
$_SERVER[‘HTTP_USER_AGENT’] | Браузер и операционную система, открышие данную страницу (например, Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36) |
$_SERVER[‘HTTP_COOKIE’] | Куки браузера в виде строки: ключ=значение; ключ=значение;. Данные доступны в переменной $_COOKIE (_ym_uid=xxx; _ym_d=xxx; PHPSESSID=xxx;) |
$_SERVER[‘HTTP_REFERER’] | Адрес страницы, с которой браузер пользователя перешёл на текущую страницу (https://wm-school.ru/index.php) |
$_SERVER[‘HTTP_ACCEPT’] | Содержимое заголовка Accept из текущего запроса (text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, image/apng, */*; q=0.8) |
$_SERVER[‘HTTP_ACCEPT_ENCODING’] | HTTP заголовок переданный клиентом, говорящий о том какие алгоритмы сжатия он может понять (gzip, deflate) |
$_SERVER[‘HTTP_ACCEPT_LANGUAGE’] | Содержимое заголовка Accept-Language (ru-RU,ru; q=0.9,en-US; q=0.8,en; q=0.7) |
$_SERVER[‘HTTP_ACCEPT_CHARSET’] | Предпочтения клиента относительно кодировки (utf-8, iso-8859-1) |
$_SERVER[‘HTTP_CACHE_CONTROL’] | max-age=0 |
$_SERVER[‘HTTP_UPGRADE_ INSECURE_REQUESTS’] | Браузер отправляет этот заголовок со значением 1, выражающий предпочтение клиента для зашифрованного ответа |
Дамп переменной $_SERVER
Для тестирования, значения массива $_SERVER для разных клиентов можно скидывать в лог-файл:
file_put_contents(__DIR__ . '/server.log', print_r($_SERVER, true) . PHP_EOL, FILE_APPEND);
Using the HTTP_REFERER variable with PHP
When a web browser moves from one website to another and between pages of a website, it can optionally pass the URL it came from. This is called the HTTP_REFERER, and this post looks at how to use this variable with PHP.
Overview of http referers
Most web browsers pass the HTTP_REFERER variable by default, but in many this behaviour can be changed to not show it or to pass something else instead. There is also 3rd party anti-spyware etc software that can be installed on a user’s computer which also prevents the referrer information from being passed to the web server. Because it can also be changed to something else, the HTTP_REFERER cannot be trusted, but it is still useful for working out where people have come from.
Appearance in log files
The following examples are from an Apache web server’s log files.
The first example shows what a log entry looks like from someone coming from this website’s homepage to this particular post. I have made the HTTP REFERER part of the log line bold (you’ll need to scroll to the right to see it).
192.168.1.10 - - [16/Apr/2008:16:12:36 +1200] "GET /php-http-referer-variable/ HTTP/1.1" 200 2014 "https://www.electrictoolbox.com/" Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.8 (like Gecko)"
The second example shows the same thing, but because it is represented by a – only it tells us the user has either gone directly to that page by typing the address in or using a bookmark etc, or is masking the HTTP REFERER with a browser option or a 3rd party tool.
192.168.1.10 - - [16/Apr/2008:16:12:36 +1200] "GET /php-http-referer-variable/ HTTP/1.1" 200 2014 "-" Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.8 (like Gecko)"
Using HTTP_REFERER in PHP
The HTTP REFERER in PHP is stored in the $_SERVER super global, and can be referenced from anywhere in your PHP code like in the following example, which would simply write it out to the browser:
If the HTTP_REFERER has been set then it will be displayed. If it is not then you won’t see anything. If it’s not set and you have error reporting set to show notices, you’ll see an error like this instead:
Notice: Undefined index: HTTP_REFERER in /path/to/filename.php on line 3
To prevent this error when notices are on (I always develop with notices on), you can do this:
if(isset($_SERVER[‘HTTP_REFERER’]))
echo isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
The use of the ? operator will return the first value after the ? if the condition is true and the second value if the condition is false. It can be useful to use when you are wanting to assign the value of the HTTP_REFERER to a variable. e.g.:
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
Conclusion
It can be useful to use the HTTP_REFERER variable for logging etc purposes using the $_SERVER[‘HTTP_REFERER’] superglobal variable. However it is important to know it’s not always set so if you program with notices on then you’ll need to allow for this in your code. The above examples show one way of doing this.
Follow up posts
Have a read of my post titled «PHP: get keywords from search engine referer url» to find out how to use the HTTP_REFERER value to see what query string visitors have entered into a search engine.
Check Out These Related posts:
Массив $_SERVER
Описание значений глобального массива $_SERVER с примерами.
Параметры сервера
Имя хоста, обычно совпадает с доменом.
Название и версия сервера.
Версия сервера и имя виртуального хоста, обычно пуста.
Имя и версия используемого HTTP протокола.
Значение из директивы конфигурационного файла Apache.
На хостингах указывают контактный e-mail.
Параметры соединения
Имя сервера, как правило, совпадает с доменом.
IP-адрес, с которого пользователь просматривает текущую страницу.
64.246.37.238 fe80:0:0:0:200:f8ff:fe21:67cf
Удаленный хост, с которого пользователь просматривает текущую страницу.
Порт на удаленной машине, который используется для связи с веб-сервером.
Время запроса к серверу в Unix timestamp.
Время запроса к серверу с точностью до микросекунд.
Пути на сервере
Директория корня сайта, в которой выполняется текущий скрипт.
/home/example.com/public_html
Появился в Apache2, то же самое что и DOCUMENT_ROOT .
Содержит путь, содержащийся после имени скрипта.
Например для адреса http://site.ru/index.php/123 значение будет следующим:
Исходное значение переменной PATH_INFO перед обработкой PHP.
Путь и имя выполняемого скрипта.
Путь к исполняемому скрипту относительно корня сайта, обычно равен SCRIPT_NAME .
Абсолютный путь к исполняемому скрипту.
/home/example.com/public_html/index.php
Авторизация на .htpasswd
Метод HTTP аутентификации.
$_SERVER[‘REMOTE_USER’] и $_SERVER[‘PHP_AUTH_USER’]
HTTPS
$_SERVER[‘HTTPS’] , $_SERVER[‘HTTP_X_HTTPS’] , $_SERVER[‘REDIRECT_HTTPS’]
URL
Значения в примерах приведены для адреса http://site.ru/index.php?page=1&sort=2
URI страницы с GET-параметрами, без домена.
Количество элементов массива $_SERVER[‘argv’] .
Содержит URL страницы без GET-параметров и домена.
Заголовки браузера
Строка, обозначающая браузер и операционную систему, который открыл данную страницу.
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Куки браузера в виде строки: ключ=значение; ключ=значение;.
Данные доступны в переменной $_COOKIE .
_ym_uid=xxx; _ym_d=xxx; PHPSESSID=xxx;
Адрес страницы, с которой браузер пользователя перешёл на текущую страницу.
Содержимое заголовка Accept из текущего запроса.
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
HTTP заголовок переданный клиентом, говорящий о том какие алгоритмы сжатия он может понять.
Содержимое заголовка Accept-Language .
Предпочтения клиента относительно кодировки.
Значение заголовка Connection .
Браузер отправляет этот заголовок со значением 1 , выражающий предпочтение клиента для зашифрованного ответа.
Дамп переменной $ _SERVER
Для тестирования, значения массива $ _SERVER для разных клиентов можно скидывать в лог-файл:
file_put_contents(__DIR__ . '/server.log', print_r($_SERVER, true) . PHP_EOL, FILE_APPEND);