аватар Автор: Сергей Касаткин | 21 апреля 2014 15:20

Статьи / PHP /

Переменные окружения в PHP или как узнать всё о посетителе сайта и сервере

Какие данные можно получить о посетителе сайта при помощи php (браузер, ip, url и другое) или сервере (имя, почта и другое)?

<?php
echo ("REDIRECT_UNIQUE_ID==");echo (getenv (REDIRECT_UNIQUE_ID));echo ("< br >");
echo ("QUERY_STRING==");echo (getenv (QUERY_STRING));echo ("< br >");
echo ("DBENTRY==");echo (getenv (DBENTRY));echo ("< br >");
echo ("REDIRECT_SCRIPT_URI==");echo (getenv (REDIRECT_SCRIPT_URI));echo ("< br >");
echo ("HTTP_ACCEPT_LANGUAGE==");echo (getenv (HTTP_ACCEPT_LANGUAGE));echo ("< br >");
echo ("HTTP_REFERER==");echo (getenv (HTTP_REFERER));echo ("< br >");
echo ("REDIRECT_SCRIPT_URL==");echo (getenv (REDIRECT_SCRIPT_URL));echo ("< br >");
echo ("REMOTE_PORT==");echo (getenv (REMOTE_PORT));echo ("< br >");
echo ("HTTP_ACCEPT==");echo (getenv (HTTP_ACCEPT));echo ("< br >");
echo ("HTTP_USER_AGENT==");echo (getenv (HTTP_USER_AGENT));echo ("< br >");
echo ("GATEWAY_INTERFACE==");echo (getenv (GATEWAY_INTERFACE));echo ("< br >");
echo ("HTTP_HOST==");echo (getenv (HTTP_HOST));echo ("< br >");
echo ("SCRIPT_URI==");echo (getenv (SCRIPT_URI));echo ("< br >");
echo ("SCRIPT_NAME==");echo (getenv (SCRIPT_NAME));echo ("< br >");
echo ("SCRIPT_URL==");echo (getenv (SCRIPT_URL));echo ("< br >");
echo ("SERVER_NAME==");echo (getenv (SERVER_NAME));echo ("< br >");
echo ("REDIRECT_STATUS==");echo (getenv (REDIRECT_STATUS));echo ("< br >");
echo ("UNIQUE_ID==");echo (getenv (UNIQUE_ID));echo ("< br >");
echo ("HTTP_VIA==");echo (getenv (HTTP_VIA));echo ("< br >");
echo ("SCRIPT_FILENAME==");echo (getenv (SCRIPT_FILENAME));echo ("< br >");
echo ("PATH==");echo (getenv (PATH));echo ("< br >");
echo ("STATUS==");echo (getenv (STATUS));echo ("< br >");
echo ("SERVER_ADDR==");echo (getenv (SERVER_ADDR));echo ("< br >");
echo ("SERVER_PROTOCOL==");echo (getenv (SERVER_PROTOCOL));echo ("< br >");
echo ("HTTP_CONNECTION==");echo (getenv (HTTP_CONNECTION));echo ("< br >");
echo ("REDIRECT_DBENTRY==");echo (getenv (REDIRECT_DBENTRY));echo ("< br >");
echo ("SERVER_SIGNATURE==");echo (getenv (SERVER_SIGNATURE));echo ("< br >");
echo ("PATH_TRANSLATED==");echo (getenv (PATH_TRANSLATED));echo ("< br >");
echo ("PATH_INFO==");echo (getenv (PATH_INFO));echo ("< br >");
echo ("SERVER_ADMIN==");echo (getenv (SERVER_ADMIN));echo ("< br >");
echo ("SERVER_SOFTWARE==");echo (getenv (SERVER_SOFTWARE));echo ("< br >");
echo ("REMOTE_ADDR==");echo (getenv (REMOTE_ADDR));echo ("< br >");
echo ("DOCUMENT_ROOT==");echo (getenv (DOCUMENT_ROOT));echo ("< br >");
echo ("REQUEST_URI==");echo (getenv (REQUEST_URI));echo ("< br >");
echo ("REDIRECT_URL==");echo (getenv (REDIRECT_URL));echo ("< br >");
echo ("REQUEST_METHOD==");echo (getenv (REQUEST_METHOD));echo ("< br >");
echo ("SERVER_PORT==");echo (getenv (SERVER_PORT));echo ("< br >");
echo ("HTTP_REFERER==");echo (getenv (HTTP_REFERER));echo ("< br >");
?>


Как расшифровываются переменные окружения в PHP (SERVER, REDIRECT и др) и что они передают?


DOCUMENT_ROOT Путь к корневой папке сайта. Для локального веб-сервера значение может принимать вид z:/home/htmlbook.ru/www, а в других случаях зависит от операционной системы сервера и используемого программного обеспечения.
GATEWAY_INTERFACE Версия CGI (Common Gateway Interface, общий шлюзовый интерфейс). Значение обычно равно CGI/1.1.
HTTP_ACCEPT Типы файлов, которые способен принять браузер. В качестве значения возвращается список поддерживаемых MIME-типов разделенных между собой запятой, например: text/html, application/xhtml+xml.
HTTP_CONNECTION Тип соединения браузера с веб-сервером. Так, значение keep-alive означает, что браузер поддерживает постоянное соединение с сервером. При этом в течение одного сеанса соединения разрешено делать несколько запросов. Повторного соединения в таком случае уже не происходит.
HTTP_HOST Доменное имя сайта. Обычно различают имена с префиксом www (www.tradebenefit.ru) и без него (tradebenefit.ru). Переменная вернёт тот адрес сайта, который указан в адресной строке браузера.
HTTP_REFERER Адрес страницы, с которой пользователь перешел на данный сайт, он еще называется реферер.
HTTP_USER_AGENT
Идентификатор используемого браузера и операционной системы. В качестве значения возвращается строка, содержащая ключевые слова. Например, следующая строка

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2

говорит, что пользователь использует браузер Firefox 6.0.2 под операционной системой Windows 7.

QUERY_STRING Запрос, который указан в адресной строке после вопросительного знака (?). Обычно пишется в форме «переменная=значение», где переменные разделяются между собой амперсантом. Рассмотрим пример.

& - амперсант. Разделитель передаваемых в URL переменных
http://tradebenefit.ru/?id=5&art=34
Будет возвращено значение id=5&art=34

REMOTE_ADDR IP-адрес посетителя сайта.
REQUEST_METHOD Метод отправки данных на сервер. По умолчанию применяется метод GET.
REQUEST_URI Адрес запрашиваемого документа. Отсчёт ведётся от корня сайта, т.е. для полного адреса http://tradebemnefit.ru/1.html вернется значение 1.html.
SERVER_ADDR IP-адрес компьютера, на котором размещается сайт.
SERVER_ADMIN Адрес электронной почты администратора сайта.
SERVER_NAME Имя сервера.
SERVER_PORT Порт, по которому ожидается получение данных.
SERVER_PROTOCOL Протокол для получения и отправки данных. Значение обычно равно HTTP/1.1.
SERVER_SOFTWARE Программное обеспечение установленное на сервере. Для веб-сервера Apache возвращается номер версии (Apache/2.2.4), а также версия PHP (PHP/5.3.3).


Пример вывода переменной окружения в php


Вывод одной переменной делается так:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>SSI</title>
 </head>
 <body>
  <p>Ваш IP-адрес: <?php echo $_SERVER['REMOTE_ADDR']; ?></p>
 </body>
</html>

А для вывода всех данных создаём цикл:

<?php
 print "<!DOCTYPE html>\n<html>\n<head><title></title></head>\n<body>\n";
 print "<table border=1>\n";
 foreach ($_SERVER as $a => $b) print "<tr><td>$a</td><td>$b</td></tr>\n";
 print "</table>\n";
 print "</body>\n</html>\n";
?>


Можно создать массив с набором данных

<?php 
 $indicesServer = array('PHP_SELF', 
'argv', 
'argc', 
'GATEWAY_INTERFACE', 
'SERVER_ADDR', 
'SERVER_NAME', 
'SERVER_SOFTWARE', 
'SERVER_PROTOCOL', 
'REQUEST_METHOD', 
'REQUEST_TIME', 
'REQUEST_TIME_FLOAT', 
'QUERY_STRING', 
'DOCUMENT_ROOT', 
'HTTP_ACCEPT', 
'HTTP_ACCEPT_CHARSET', 
'HTTP_ACCEPT_ENCODING', 
'HTTP_ACCEPT_LANGUAGE', 
'HTTP_CONNECTION', 
'HTTP_HOST', 
'HTTP_REFERER', 
'HTTP_USER_AGENT', 
'HTTPS', 
'REMOTE_ADDR', 
'REMOTE_HOST', 
'REMOTE_PORT', 
'REMOTE_USER', 
'REDIRECT_REMOTE_USER', 
'SCRIPT_FILENAME', 
'SERVER_ADMIN', 
'SERVER_PORT', 
'SERVER_SIGNATURE', 
'PATH_TRANSLATED', 
'SCRIPT_NAME', 
'REQUEST_URI', 
'PHP_AUTH_DIGEST', 
'PHP_AUTH_USER', 
'PHP_AUTH_PW', 
'AUTH_TYPE', 
'PATH_INFO', 
'ORIG_PATH_INFO') ; 

echo '<table cellpadding="10">' ; 
foreach ($indicesServer as $arg) { 
    if (isset($_SERVER[$arg])) { 
        echo '<tr><td>'.$arg.'</td><td>' . $_SERVER[$arg] . '</td></tr>' ; 
    } 
    else { 
        echo '<tr><td>'.$arg.'</td><td>-</td></tr>' ; 
    } 
echo '</table>' ; 

?>


Спасибо за внимание!
 



Похожие статьи


Комментарии к статье (vk.com)