Глобальный массив $_SERVER в PHP
Те, кто более-менее серьёзно изучал PHP знают, что существует один очень полезный глобальный массив в PHP, который называется $_SERVER. И вот хотелось бы в этой статье разобрать самые популярные ключи и их значения в этом массиве, так как их знание просто обязательно даже для начинающего PHP-программиста.
Прежде чем приступить к глобальному массиву $_SERVER в PHP, сразу сделаю небольшую подсказку. Есть замечательная функция, встроенная в PHP, которая называется phpinfo(). Давайте сразу приведу пример её использования:
<?php
phpinfo();
?>
В результате выполнения этого просто скрипта Вы увидите огромную таблицу с различными настройками интерпритатора PHP, в том числе, ближе к концу будет таблица значений глобального массива $_SERVER. Там будут перечислены все ключи и все соответствующие им значения. Чем это может Вам помочь? А тем, что если Вам потребуется то или иное значение, и Вы забудете, как называется ключ, то с помощью функции phpinfo() Вы можете всегда вспомнить его название. В общем, Вы выполните этот скрипт и сразу меня поймёте.
А теперь давайте перейдём к самым популярным ключам массива $_SERVER:
- HTTP_USER_AGENT - этот ключ позволяет узнать характеристику клиента. В большинстве случаев, это, безусловно, браузер, однако, не всегда. И опять же, если браузер, то какой, вот в этой переменной об этом можно и узнать.
- HTTP_REFERER - содержит абсолютный путь к тому файлу (PHP-скрипт, HTML-страница), с которого перешли на данный скрипт. Грубо говоря, откуда пришёл клиент.
- SERVER_ADDR - IP-адрес сервера.
- REMOTE_ADDR - IP-адрес клиента.
- DOCUMENT_ROOT - физический путь к корневой директории сайта. Это опция задаётся через конфигурационный файл сервера Apache.
- SCRIPT_FILENAME - физический путь к вызванному скрипту.
- QUERY_STRING - весьма полезное значение, которое позволяет получить строку с запросом, а дальше можно заниматься парсингом этой строки.
- REQUEST_URI - ещё более полезное значение, которое содержит не только сам запрос, но и вместе с ним относительный путь к вызываемому скрипту от корня. Это очень часто используется для удаления дублирования с index.php, то есть когда у нас такой URL: "http://mysite.ru/index.php" и "http://mysite.ru/" ведут на одну страницу, а URLы разные, следовательно, дублирование, что плохо скажется на поисковой оптимизации. И вот с помощью REQUEST_URI мы можем определить: с index.php или нет был вызван скрипт. И можем сделать редирект с index.php (если он присутствовал в REQUEST_URI) на без index.php. В результате, при передаче такого запроса: "http://mysite.ru/index.php?id=5", у нас будет происходить редирект на URL: "http://mysite.ru/?id=5". То есть мы избавились от дублирования, удалив из URL этот index.php.
- SCRIPT_NAME - относительный путь к вызываемому скрипту.
Пожалуй, это все элементы глобального массива $_SERVER в PHP, которые используются регулярно. Их надо знать и уметь использовать, когда это необходимо.
-
- Михаил Русаков
Комментарии (13):
Если ввести в поисковое поле $_SERVER то он не ищет статью про глобальный массив, напишите статью как делать поиск с такими запросами
Ответить
Также, как и со всеми, только надо очень аккуратно использовать функцию quotemeta(), которую использовать только для запросов, но саму поисковую строку не модифицировать через неё.
Ответить
Михаил, не могли бы Вы поподробней описать про избавление от index.php? А еще лучше готовый код выложить?
Ответить
Хорошо, напишу статью. Выйдет она примерно 24-го апреля.
Ответить
Спасибо. Буду ждать.
Ответить
$query2 = "SELECT ".TB_PREFIX."wdata.id AS map_id, ".TB_PREFIX."wdata.fieldtype AS map_fieldtype, ".TB_PREFIX."wdata.oasistype AS map_oasis, ".TB_PREFIX."wdata.x AS map_x, ".TB_PREFIX."wdata.y AS map_y, ".TB_PREFIX."wdata.occupied AS map_occupied, ".TB_PREFIX."wdata.image AS map_image, ".TB_PREFIX."odata.conqured AS oasis_conqured, info_user_oasis.username AS oasis_user, info_user_oasis.tribe AS oasis_tribe, info_alliance_oasis.tag AS oasis_alli_name, ".TB_PREFIX."vdata.wref AS ville_id, ".TB_PREFIX."vdata.owner AS ville_user, ".TB_PREFIX."vdata.name AS ville_name, ".TB_PREFIX."vdata.capital AS ville_capital, ".TB_PREFIX."vdata.pop AS ville_pop, ".TB_PREFIX."users.id AS user_id, ".TB_PREFIX."users.username AS user_username, ".TB_PREFIX."users.tribe AS user_tribe, ".TB_PREFIX."users.alliance AS user_alliance, ".TB_PREFIX."alidata.id AS aliance_id, ".TB_PREFIX."alidata.tag AS aliance_name FROM ((((((".TB_PREFIX."wdata LEFT JOIN ".TB_PREFIX."vdata ON ".TB_PREFIX."vdata.wref = ".TB_PREFIX."wdata.id ) LEFT JOIN ".TB_PREFIX."odata ON ".TB_PREFIX."odata.wref = ".TB_PREFIX."wdata.id ) LEFT JOIN ".TB_PREFIX."users AS info_user_oasis ON info_user_oasis.id = ".TB_PREFIX."odata.owner ) LEFT JOIN ".TB_PREFIX."alidata AS info_alliance_oasis ON info_alliance_oasis.id = info_user_oasis.alliance ) LEFT JOIN ".TB_PREFIX."users ON ".TB_PREFIX."users.id = ".TB_PREFIX."vdata.owner ) LEFT JOIN ".TB_PREFIX."alidata ON ".TB_PREFIX."alidata.id = ".TB_PREFIX."users.alliance ) where ".TB_PREFIX."wdata.id IN ($maparray) ORDER BY FIND_IN_SET(".TB_PREFIX."wdata.id,'$maparray2')"; нашел вот такой запрос и голова закружилась)) подскажите пожалуйста, что сдесь к чему - имею ввиду join - где о нем хорошо, понятно написано? и почему там написано AS сначала? (с основами SQL знаком, несложнblе запросbl составлять умею) спасибо!
Ответить
http://myrusakov.ru/sql-join.html А as - это объявление переменной: слева её значение, а справа её имя.
Ответить
как с помощью php подгрузить контент ЧЕРЕЗ НЕКОТОРОЕ ВРЕМЯ? Мне нужно спрятать баннер от поисковиков!
Ответить
Задержку можно сделать только на javascript. Либо делать автообновления, а время смотреть по сессии или кукам.
Ответить
Здравствуйте, Михаил! Подскажите пожалуйста как узнать текущий адрес страницы. Читал что можно через REQUEST_URI, только ничего не получается. Пишу админку к сайту, и мне нужно в зависимости от адреса страницы выводить блок с формой добавления материала (он разный для каждого раздела). Форма у меня выводится, если хотя бы один материал добавлен в раздел (непосредственно через phpMyAdmin). Если материала нет, то не выводится, а надо бы. Спасибо заранее!
Ответить
В $_SERVER["REQUEST_URI"] действительно содержатся адрес страницы на сайте, причём вместе с GET-запросом к этой странице, если он есть.
Ответить
Здравствуйте Михаил, хотел бы узнать по подробнее на счет ключа массива $_SERVER['QUERY_STRING'];. Не могли бы вы поподробнее расписать как ею пользоваться
Ответить
Какие факторы влияют на HTTP_REFERER? А то у меня всегда он выводит ссылку на главную страницу, а не предыдущую (переход по ссылке, естественно, делаю). Что может влиять на HTTP_REFERER?
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.