- Суперглобальный массив $_SERVER
- Замечание
- $_SERVER[‘DOCUMENT_ROOT‘]
- $_SERVER[‘HTTP_ACCEPT‘]
- Замечание
- Замечание
- Замечание
- $_SERVER[‘HTTP_ACCEPT_LANGUAGE‘]
- $_SERVER[‘HTTP_HOST‘]
- $_SERVER[‘HTTP_REFERER‘]
- Страница index.php
- Страница page.php
- $_SERVER[‘HTTP_USER_AGENT‘]
- Замечание
- Замечание
- $_SERVER[‘REMOTE_ADDR‘]
- Замечание
- Извлечение переменной окружения HTTP_X_FORWARDED_FOR
- $_SERVER[‘SCRIPT_FILENAME‘]
- $_SERVER[‘SERVER_NAME‘]
- Использование элементов массива $_SERVER
- $_SERVER[‘REQUEST_METHOD‘]
- $_SERVER[‘QUERY_STRING‘]
- $_SERVER[‘PHP_SELF‘]
- $_SERVER[‘REQUEST_URI‘]
- Полный адрес к скрипту
Суперглобальный массив $_SERVER
В массив $_SERVER PHP-интерпретатор помещает переменные, полученные от сервера. Без данных переменных сложно организовать полноценную поддержку Web-приложений. Ниже приводится описание наиболее важных элементов суперглобального массива $_SERVER.
Замечание
Array ( [REDIRECT_HTTPS] => on [REDIRECT_STATUS] => 200 [HTTPS] => on [HTTP_HOST] => htmlweb.ru [HTTP_X_FORWARDED_PROTO] => https [HTTP_CONNECTION] => close [HTTP_USER_AGENT] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3 [HTTP_ACCEPT_CHARSET] => windows-1251,utf-8;q=0.7,*;q=0.7 [HTTP_REFERER] => https://htmlweb.ru/ [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin [SERVER_SIGNATURE] => [SERVER_SOFTWARE] => Apache/2.4.25 (Debian) mpm-itk/2.4.7-04 OpenSSL/1.0.2u [SERVER_NAME] => htmlweb.ru [SERVER_ADDR] => 185.12.92.137 [SERVER_PORT] => 80 [REMOTE_ADDR] => 95.143.190.109 [DOCUMENT_ROOT] => /var/www/htmlweb/data/www/htmlweb.ru [REQUEST_SCHEME] => http [CONTEXT_PREFIX] => [CONTEXT_DOCUMENT_ROOT] => /var/www/htmlweb/data/www/htmlweb.ru [SERVER_ADMIN] => webmaster@htmlweb.ru [SCRIPT_FILENAME] => /var/www/htmlweb/data/www/htmlweb.ru/index.php [REMOTE_PORT] => 38908 [REDIRECT_URL] => /php/function/$_server.php [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.0 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /php/function/$_server.php [SCRIPT_NAME] => /index.php [PHP_SELF] => /index.php [REQUEST_TIME_FLOAT] => 1689880738.532 [REQUEST_TIME] => 1689880738 ) 1
$_SERVER[‘DOCUMENT_ROOT‘]
Элемент $_SERVER[‘DOCUMENT_ROOT’] содержит путь к корневой директории сервера, если скрипт выполняется в виртуальном хосте, в данном элементе указывается путь к корневой директории виртуального хоста. Т.е. в конфигурационном файле httpd.conf виртуальный хост имеет директиву DocumentRoot, которой присвоено значение «D:/main», элемент $_SERVER[‘DOCUMENT_ROOT’] будет содержать значение «D:main».
$_SERVER[‘HTTP_ACCEPT‘]
В элементе $_SERVER[‘HTTP_ACCEPT’] описываются предпочтения клиента относительно типа документа. Содержимое этого элемента извлекается из HTTP-заголовка Accept, который присылает клиент серверу. Содержимое данного заголовка может выглядеть следующим образом
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*
Заголовок Accept позволяет уточнить медиа-тип, который предпочитает получить клиент в ответ на свой запрос. Этот заголовок позволяет сообщить серверу, что ответ ограничен небольшим множеством предпочитаемых типов.
Символ * используется для группирования типов в медиа-ряду. К примеру, символом */* задается использование всех типов, а обозначение type/* определяет использование всех подтипов выбранного типа type.
Замечание
Медиа-типы отделяются друг от друга запятыми.
Каждый медиа-ряд характеризуется также дополнительным набором параметров. Одним из них является так называемый относительный коэффициент предпочтения q, который принимает значения от 0 до 1, соответственно, от менее предпочитаемых типов к более предпочитаемым. Использование нескольких параметров q, позволяет клиенту сообщить серверу относительную степень предпочтения для того или иного медиа-типа.
Замечание
По умолчанию параметр q принимает значение 1. Кроме того, от медиа-типа он отделяется точкой с запятой.
Пример заголовка типа Accept:
Accept: audio/*; q=0.2, audio/basic или реальный нынешний:
В данном заголовке первым идёт тип audio/* включающий в себя все музыкальные документы и характеризующийся коэффициентом предпочтения 0.2. Через запятую указан тип audio/basic, для которого коэффициент предпочтения не указан и принимает значение по умолчанию равное единице. Цитируя RFС2616 данный заголовок можно интерпретировать следующим образом: «Я предпочитаю тип audio/basic, но мне можно также слать документы любого другого audio-типа, если они будут доступны, после снижения коэффициента предпочтения более чем на 80 %».
Пример может быть более сложным. Accept: text/plain; q=0.5, text/html,
text/x-dvi; q=0.8, text/x-c
Замечание
Следует учитывать, что элемент $_SERVER[‘HTTP_ACCEPT’] содержит точно такую же информацию, но без начального заголовка Accept.
Этот заголовок интерпретируется следующим образом: Типы документов text/html и text/x-c являются предпочтительными, но если они недоступны, тогда клиент отсылающий данный запрос, предпочтёт text/x-dvi, а, если и его нет, то он может принять тип text/plain.
$_SERVER[‘HTTP_ACCEPT_LANGUAGE‘]
В элементе $_SERVER[‘HTTP_ACCEPT_LANGUAGE’] описываются предпочтения клиента относительно языка. Данная информация извлекается из HTTP-заголовка Accept-Language, который присылает клиент серверу. Можно привести следующий пример:
Который можно интерпретировать следующим образом: клиент предпочитает русский язык, но в случае его отсутствия согласен принимать документы на английском. Элемент $_SERVER[‘HTTP_ACCEPT_LANGUAGE’] будет содержать точно такую же информацию, но без заголовка Accept-Language:
Содержимое элемента $_SERVER[‘HTTP_ACCEPT_LANGUAGE’] можно использовать для определения национальной принадлежность посетителей. Однако результаты будут приблизительными, так как многие пользователи используют английские варианты браузеров, которые будут извещать сервер о том, что посетитель предпочитает лишь один язык — английский.
$_SERVER[‘HTTP_HOST‘]
В элементе $_SERVER[‘HTTP_HOST’] содержится имя сервера, которое, как правило, совпадает с доменным именем сайта, расположенного на сервере. Как правило, имя, указанное в данном параметре совпадает с именем $_SERVER[‘SERVER_NAME’]. В параметре приводится лишь доменное имя без названия протокола (http://), т.е.
$_SERVER[‘HTTP_REFERER‘]
В элементе $_SERVER[‘HTTP_REFERER’] приводится адрес страницы, с которой посетитель пришёл на данную страницу. Переход должен осуществляться по ссылке. Создадим две страницы index.php и page.php.
Страница index.php
echo "Ссылка на страницу PHP
"; echo "Содержимое $_SERVER['HTTP_REFERER'] - ". $_SERVER['HTTP_REFERER']
Страница page.php будет аналогичного содержания, но ссылка будет указывать на страницу index.php.
Страница page.php
echo "Ссылка на страницу PHP
"; echo "Содержимое $_SERVER['HTTP_REFERER'] - ". $_SERVER['HTTP_REFERER']
При переходе с одной страницы на другую, под ссылкой будет выводится адрес страницы, с которой был осуществлён переход.
А на эту страницу вы перешли с:
$_SERVER[‘HTTP_USER_AGENT‘]
Элемент $_SERVER[‘HTTP_USER_AGENT’] содержит информацию о типе и версии браузера и операционной системы посетителя.
Вот типичное содержание этой строки: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Наличие подстроки «MSIE 6.0» говорит о том, что посетитель просматривает страницу при помощи Internet Explorer версии 6.0. Строка «Windows NT 5.1» сообщает, что в качестве операционной системы используется Windows XP.
Замечание
Для Windows 2000 элемент $_SERVER[‘HTTP_USER_AGENT’] выглядит следующим образом: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)’) , в то время как для Windows XP — Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Если посетитель воспользуется браузером Opera, то содержание $_SERVER[‘HTTP_USER_AGENT’] может выглядеть следующим образом: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 6.04 [ru] Подстрока «MSIE 6.0» здесь так же присутствует, сообщая, что браузер Opera является совместимым с браузером Internet Explorer и использует те же динамические библиотеки Windows. Поэтому, при анализе строки, возвращаемой браузером, следует иметь в виду, что к Internet Explorer относится строка, содержащая подстроку «MSIE 6.0» и не содержащая подстроки «Opera». Кроме того, из данной строки можно заключить, что пользователь использует операционную систему Windows 98.
Замечание
Пользовательский агент браузера Firefox может выглядеть следующим образом Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5
При использовании браузера Netscape, содержание элемент $_SERVER[‘HTTP_USER_AGENT’] может выглядеть следующим образом: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 Принадлежность к этому браузеру можно определить по наличию подстроки «Netscape». Кроме того, можно узнать, что посетитель выходит в Интернет, используя операционную версию Linux, с ядром, оптимизированным под Pentium IV, находясь в графической оболочке X-Window. Этот механизм удобно использовать для сбора статистической информации, которая позволяет дизайнерам оптимизировать страницы под наиболее распространенные браузеры.
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36
$_SERVER[‘REMOTE_ADDR‘]
В элемент $_SERVER[‘REMOTE_ADDR’] помещается IP-адрес клиента. При тестировании на локальной машине — этот адрес будет равен 127.0.0.1. Однако при тестировании в сети переменная вернёт IP-адрес клиента или последнего прокси-сервера через который клиент попал на сервер. Если клиент использует прокси-сервер узнать его IP-адрес можно при помощи переменной окружения HTTP_X_FORWARDED_FOR, значение которой можно получить при помощи функции getenv().
Замечание
Прокси-сервера являются специальными промежуточными серверами, предоставляющими специальный вид услуг: сжатие трафика, кодирование данных, адаптация под мобильные устройства и т.п. Среди множества прокси-серверов различают так называемые анонимные прокси-сервера, которые позволяют скрывать истинный IP-адрес клиента, такие сервера не возвращают переменной окружения HTTP_X_FORWARDED_FOR.
Извлечение переменной окружения HTTP_X_FORWARDED_FOR
$_SERVER[‘SCRIPT_FILENAME‘]
В элемент $_SERVER[‘SCRIPT_FILENAME’] помещается абсолютный путь к файлу от корня диска. Так, если сервер работает под управлением операционной системы Windows, то такой путь может выглядеть следующим образом «d:main estindex.php», т.е. путь указывается от диска, в UNIX-подобной операционной системы путь указывается от корневой директории /, например «/var/share/www/test/index.php».
$_SERVER[‘SERVER_NAME‘]
В элемент $_SERVER[‘SERVER_NAME’] помещается имя сервера, как правило, совпадающее с доменным именем сайта, расположенного на нём. Например,
Содержимое элемента $_SERVER[‘SERVER_NAME’] часто совпадает с содержимым элемента $_SERVER[‘HTTP_HOST’]. Помимо имени сервера суперглобальный массив $_SERVER позволяет выяснить ещё ряд параметров сервера, например IP-адрес сервера, прослушиваемый порт, какой Web-сервер установлен и версию HTTP протокола. Эта информация помещается в элементы $_SERVER[‘SERVER_ADDR’], $_SERVER[‘SERVER_PORT’], $_SERVER[‘SERVER_SOFTWARE’] и $_SERVER[‘SERVER_PROTOCOL’], соответственно. Ниже приводится пример с использованием данных элементов.
Использование элементов массива $_SERVER
echo "Имя сервера - ".$_SERVER['SERVER_NAME']."
"; echo "IP-адрес сервера - ".$_SERVER['SERVER_ADDR']."
"; echo "Порт сервера - ".$_SERVER['SERVER_PORT']."
"; echo "Web-сервер - ".$_SERVER['SERVER_SOFTWARE']."
"; echo "Версия HTTP-протокола - ".$_SERVER['SERVER_PROTOCOL']."
";
Имя сервера — htmlweb.ru
IP-адрес сервера — 185.12.92.137
Порт сервера — 80
Web-сервер — Apache/2.4.25 (Debian) mpm-itk/2.4.7-04 OpenSSL/1.0.2u
Версия HTTP-протокола — HTTP/1.0
$_SERVER[‘REQUEST_METHOD‘]
В элемент $_SERVER[‘REQUEST_METHOD’] помещается метод запроса, который применяется для вызова скрипта: GET или POST.
echo $_SERVER['REQUEST_METHOD'];
$_SERVER[‘QUERY_STRING‘]
В элемент $_SERVER[‘QUERY_STRING’] заносятся параметры, переданные скрипту, если строка запроса представляет собой адрес
Например при обращении к:
http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 в элемент $_SERVER[‘QUERY_STRING’] попадёт весь текст после знака «?»:
$_SERVER[‘PHP_SELF‘]
В элемент $_SERVER[‘PHP_SELF’] помещается имя скрипта, начиная от корневой директории виртуального хоста, т.е. если строка запроса представляет собой адрес http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 то элемент $_SERVER[‘PHP_SELF’] будет содержать фрагмент «/test/index.php». Как правило, этот же фрагмент помещается в элемент $_SERVER[‘SCRIPT_NAME’].
$_SERVER[‘REQUEST_URI‘]
В элемент $_SERVER[‘REQUEST_URI’] содержит имя скрипта, начиная от корневой директории виртуального хоста и параметры, т.е. если строка запроса представляет собой адрес: http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 то элемент $_SERVER[‘REQUEST_URI’] будет содержать фрагмент «/test/index.php?id=1&test=wet&id_theme=512». Для того, чтобы восстановить в скрипте полный адрес, который помещён в строке запроса, достаточно использовать комбинацию элементов массива $_SERVER, представленную ниже
Полный адрес к скрипту
echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];