Суперглобальний масив $ _SERVER

Одним з найважливіших зумовлених масивів є масив $ _SERVER - в нього PHP-інтерпретатор поміщає змінні, отримані від сервера. Без даних змінних складно організувати повноцінну підтримку Web-додатків. Нижче наводиться опис найбільш важливих елементів суперглобального масиву $ _SERVER.

зауваження

Переглянути повний список елементів масиву $ _SERVER можна або за допомогою функції print_r (), яка роздруковує дамп масиву або за допомогою функції phpinfo (), яка виводить інформацію про PHP-інтерпретатор.

Елемент $ _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/xc

зауваження

Слід враховувати, що елемент $ _SERVER [ 'HTTP_ACCEPT'] містить таку саму інформацію, але без початкового заголовка Accept.

Цей заголовок інтерпретується наступним чином: Типи документів text / html і text / xc є переважними, але якщо вони недоступні, тоді клієнт відсилає даний запит, віддасть перевагу text / x-dvi, а, якщо і його немає, то він може прийняти тип text / plain.

Елемент $ _SERVER [ 'HTTP_ACCEPT_LANGUAGE']

В елементі $ _SERVER [ 'HTTP_ACCEPT_LANGUAGE'] описуються переваги клієнта щодо мови. Дана інформація витягується з HTTP-заголовка Accept-Language, який надсилає клієнт серверу. Можна навести такий приклад:

Accept-Language: ru, en; q=0.7

Який можна інтерпретувати в такий спосіб: клієнт надає перевагу російську мову, але в разі його відсутності згоден приймати документи англійською. Елемент $ _SERVER [ 'HTTP_ACCEPT_LANGUAGE'] буде містити таку саму інформацію, але без заголовка Accept-Language:

ru, en; q=0.7

Вміст елемента $ _SERVER [ 'HTTP_ACCEPT_LANGUAGE'] можна використовувати для визначення національної приналежність відвідувачів. Однак результати будуть приблизними, так як багато користувачів використовують англійські варіанти браузерів, які будуть сповіщати сервер про те, що відвідувач воліє лише одну мову - англійську.

Елемент $ _SERVER [ 'HTTP_HOST']

В елементі $ _SERVER [ 'HTTP_HOST'] міститься ім'я сервера, яке, як правило, збігається з доменним ім'ям сайту, розташованого на сервері. Як правило, ім'я, вказане в даному параметрі збігається з ім'ям $ _SERVER [ 'SERVER_NAME']. У параметрі наводиться лише доменне ім'я без назви протоколу (http: //), тобто

www.sofftime.ru

Елемент $ _SERVER [ 'HTTP_REFERER']

В елементі $ _SERVER [ 'HTTP_REFERER'] наводиться адреса сторінки, з якої відвідувач прийшов на цю сторінку. Перехід повинен здійснюватися за посиланням. Створимо дві сторінки index.php і page.php.

сторінка index.php

<?php
echo "<a href=page.php>Ссылка на страницу PHP</a><br />" ;
echo
"Содержимое $_SERVER['HTTP_REFERER'] - " .
$_SERVER [ 'HTTP_REFERER' ]
?>

Сторінка page.php буде аналогічного змісту, але посилання буде вказувати на сторінку index.php.

сторінка page.php

<?php
echo "<a href=index.php>Ссылка на страницу PHP</a><br />" ;
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. Цей механізм зручно використовувати для збору статистичної інформації, яка дозволяє дизайнерам оптимізувати сторінки під найбільш поширені браузери.

Елемент $ _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

<?php
echo getenv ( 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'] поміщається ім'я сервера, як правило, збігається з доменним ім'ям сайту, розташованого на ньому. наприклад,

www.softtime.ru

Вміст елемента $ _SERVER [ 'SERVER_NAME'] часто збігається з вмістом елемента $ _SERVER [ 'HTTP_HOST']. Крім імені сервера суперглобальний масив $ _SERVER дозволяє з'ясувати ще ряд параметрів сервера, наприклад IP-адреса сервера, прослуховується порт, який Web-сервер встановлений і версію HTTP протоколу. Ця інформація міститься в елементи $ _SERVER [ 'SERVER_ADDR'], $ _SERVER [ 'SERVER_PORT'], $ _SERVER [ 'SERVER_SOFTWARE'] і $ _SERVER [ 'SERVER_PROTOCOL'], відповідно. Нижче наводиться приклад з використанням даних елементів.

Використання елементів масиву $ _SERVER

<?php
echo "Имя сервера - " . $_SERVER [ 'SERVER_NAME' ]. "<br />" ;
echo
"IP-адрес сервера - " . $_SERVER [ 'SERVER_ADDR' ]. "<br />" ;
echo
"Порт сервера - " . $_SERVER [ 'SERVER_PORT' ]. "<br />" ;
echo
"Web-сервер - " . $_SERVER [ 'SERVER_SOFTWARE' ]. "<br />" ;
echo
"Версия HTTP-протокола - " . $_SERVER [ 'SERVER_PROTOCOL' ]. "<br />" ;
?>

Елемент $ _SERVER [ 'REQUEST_METHOD']

В елемент $ _SERVER [ 'REQUEST_METHOD'] поміщається метод запиту, який застосовується для виклику скрипта: GET або POST.

<?php
echo $_SERVER [ 'REQUEST_METHOD' ]; // GET
?>

Елемент $ _SERVER [ 'QUERY_STRING']

В елемент $ _SERVER [ 'QUERY_STRING'] заносяться параметри, передані скрипту, якщо рядок запиту представляє собою адресу

http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512

то в елемент $ _SERVER [ 'QUERY_STRING'] потрапить весь текст після знаку "?". Наприклад, при зверненні до скрипту, представленому нижче, поміщаючи в рядку запиту довільний текст після знаку "?" отримаємо сторінку з введеним текстом.

<?php
echo $_SERVER [ 'QUERY_STRING' ]; // id=1&test=wet&id_theme=512
?>

Елемент $ _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, представлену нижче

Повна адреса до скрипту

<?php
echo "http://" . $_SERVER [ 'SERVER_NAME' ]. $_SERVER [ 'REQUEST_URI' ];
?>


1
178.20.156.230, 178.20.156.230, 66.249.93.38www.shram.kiev.uawww.shram.kiev.uahttp: //www.shram.kiev.ua/site/server.shtml
array (36) {[ "REDIRECT_gzip-only-text / html"] => string (1) "1" [ "REDIRECT_RF"] => string (39) "/home/admin/data/www/shram.kiev. ua / site "[" REDIRECT_STATUS "] => string (3)" 200 "[" gzip-only-text / html "] => string (1)" 1 "[" HTTP_HOST "] => string (17)" www.shram.kiev.ua "[" HTTP_X_FORWARDED_FOR "] => string (44)" 178.20.156.230, 178.20.156.230, 66.249.93.38 "[" HTTP_X_FORWARDED_PROTO "] => string (4)" http "[" HTTP_X_REAL_IP " ] => string (12) "66.249.93.38" [ "HTTP_CONNECTION"] => string (5) "close" [ "HTTP_ACCEPT"] => string (3) "* / *" [ "HTTP_ACCEPT_CHARSET"] => string (7) "utf-8, *" [ "HTTP_VIA"] => string (34) "1.0 translate.google.com TWSFE / 0.9" [ "HTTP_USER_AGENT"] => string (60) "Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.1), gzip (gfe) "[" HTTP_ACCEPT_ENCODING "] => string (15)" gzip, deflate, br "[" PATH "] => string (29)" / sbin: / bin: / usr / sbin: / usr / bin "[" SERVER_SIGNATURE "] => string (120)"
Apache / 2.2.24 (FreeBSD) mod_python / 3.3.1 Python / 2.7.5 PHP / 5.4.15 Server at www.shram.kiev.ua Port 80
"[" SERVER_SOFTWARE "] => string (64)" Apache / 2.2.24 (FreeBSD) mod_python / 3.3.1 Python / 2.7.5 PHP / 5.4.15 "[" SERVER_NAME "] => string (17)" www .shram.kiev.ua "[" SERVER_ADDR "] => string (14)" 178.20.156.230 "[" SERVER_PORT "] => string (2)" 80 "[" REMOTE_ADDR "] => string (12)" 66.249 .93.38 "[" DOCUMENT_ROOT "] => string (34)" /home/admin/data/www/shram.kiev.ua "[" SERVER_ADMIN "] => string (23)" [email protected] " [ "SCRIPT_FILENAME"] => string (44) "/home/admin/data/www/shram.kiev.ua/index.php" [ "REMOTE_PORT"] => string (5) "22837" [ "REDIRECT_QUERY_STRING"] => string (34) "& MY_REQUEST_URI = / site / server.shtml" [ "REDIRECT_URL"] => string (18) "/site/server.shtml" [ "GATEWAY_INTERFACE"] => string (7) "CGI / 1.1 "[" SERVER_PROTOCOL "] => string (8)" HTTP / 1.0 "[" REQUEST_METHOD "] => string (3)" GET "[" QUERY_STRING "] => string (34)" & MY_REQUEST_URI = / site / server. shtml "[" REQUEST_URI "] => string (18)" /site/server.shtml "[" SCRIPT_NAME "] => string (10)" /index.php "[" PHP_SELF "] => string (10)" /index.php "[" REQUEST_TIME_FLOAT "] => float (1489129396.379) [" REQUEST_TIME "] => int (1489129396)}
1.0 translate.google.com TWSFE / 0.9


NO