php get request url
Website-create.ru
Сегодня поговорим о том, как получить адрес страницы в php.
Зачем это может быть нужно?
Сценарии могут быть разными. Например, у нас используется один и тот же шаблон для разных разделов. Но в одном из разделов нам необходимо вывести (или не вывести) какой-то специфичный блок, которого в других разделах быть не должно.
Вероятно мы захотим сделать это по условию. И именно в условии мы и будем проверять тот ли это раздел.
Возможно с архитектурной точки зрения — это не самое лучшее решение. Однако, очень часто нам достаются уже готовые проекты, с которыми нужно что-то делать.
Получаем URL текущей страницы
Если вы хотите посмотреть всё, что хранит этот массив, то можете воспользоваться следующим кодом, который в читабельном виде выведет все значения:
Итак, давайте представим, что у нас есть веб страница следующего вида: http://localhost/php-lessons/url/?name=anna&city=Valencia.
Я тестирую на локальном сервере. Когда вы будете работать с реальным сайтом, который лежит в сети, то вместо localhost у вас будет имя вашего сайта (например exmple.ru).
Что мы видим в нашем подопытном url?
Давайте разберемся с каждой ситуацией.
Получаем полный URL страницы в php
Чтобы получить полный URL страницы вместе с GET-параметрами, воспользуемся следующим кодом:
Сначала мы проверяем, какой протокол используется: https или http.
Далее мы присоединяем двоеточие и 2 слэша, имя домена (хоста) и остальную часть нашего URL.
Результат будет вот таким:
Если протокол нам получать не нужно, то можно сократить код до такого:
Результат тогда будет следующим:
Получаем URL страницы без GET-параметров в php
Иногда нас не интересуют GET-параметры, которые передаются как часть URL, и нам нужно получить адрес без них.
GET-параметры в нашем случает — это name=anna&city=Valencia
Чтобы отсечь их мы можем использовать php-функцию explode, которая разбивает строку по разделителю.
Наш URL — это ни что иное, как строка. GET-параметры всегда начинают передаваться после знака «?». Следовательно разделителем будет вопросительный знак.
Функция explode превратит строку в массив с двумя элементами. В первом будет содержаться наш искомый url без GET-параметров, а во втором останутся GET-параметры.
Результат будет таким: http://localhost/php-lessons/url/
Получаем GET-параметры из URL
Здесь совсем все просто. Чтобы получить только GET-параметры будем использовать следующий код:
Дальше мы можете разобрать это строку, например, с помощью функции explode или сделать с ними что-либо еще (в зависимости от стоящей перед вами задачи).
А у меня на сегодня всё!
Ставьте лайки, оставляйте комментарии, подписывайтесь на обновления!
В этой статье будет рассказано о том, как в языке программирования PHP получить адрес текущей страницы. Также вы узнаете о работе переменной $_SERVER.
Первое, о чём следует сказать, — зачем вообще получать ссылки (urls) в PHP? На практике варианты могут различаться. Представьте, что у нас для разных разделов применяется один и тот же шаблон. И возникает потребность в том, чтобы вывести (либо не вывести — зависит от ситуации) какой-нибудь специальный блок, причём в других разделах вывод этого блока не нужен.
В большинстве случаев мы пожелаем выполнить поставленную задачу по условию. То есть сделаем условие, в котором будем выполнять проверку того либо иного раздела. Можно сказать, что с точки зрения архитектуры данное решение не является оптимальным. Но на практике нам нередко достаются уже реализованные проекты, с которыми необходимо что-то решать с учётом уже имеющейся архитектуры.
Но давайте не будем много говорить, а лучше приступим к решению поставленной задачи — получению ссылки в PHP.
Получение ссылки текущей страницы в PHP
Идём дальше. Представьте, что у вас есть web-страница, имеющая следующий вид: http://localhost/php-lessons/url/?name=anna&city=Valencia. Тестирование в данном примере осуществляется на локальном сервере. Если надо тестировать код на реальном веб-сайте, доступном в интернете, достаточно вместо localhost прописать имя сайта (домен) — тот же otus.ru.
Что же мы увидим в подопытном url? Нас могут интересовать следующие данные: — адрес веб-страницы без GET-параметров; — URL с GET-параметрами; — непосредственно GET-параметры без текущей ссылки (адреса веб-страницы).
Лучше всего разобраться с каждым из случаев по отдельности — так будет гораздо понятнее.
Получение полного URL в PHP
Для получения полного URL вместе с имеющимися GET-параметрами, пригодится следующий код:
На втором этапе выполняется присоединение двоеточия и двух слэшев, имени домена и остальной части URL.
Итог выполнения кода будет следующим:
Если протокол получать не требуется, код на PHP можно немного сократить:
Смотрим на результат и видим, что протокол отсутствует:
Получение URL в PHP без GET-параметров
Иногда эти параметры, передаваемые в качестве части ссылки, нас не интересуют, то есть требуется получить адрес без них. Мы говорим о следующих параметрах: name=anna&city=Valencia.
В действительности их можно отсечь, используя функцию explode в PHP, разбивающую строку по разделителю. Не стоит объяснять, что ссылка представляет собой строку, а параметры GET начинают прописываться после «?». В результате вопросительный знак и станет разделителем, а функция explode сделает из строки массив с 2-мя элементами. Первый элемент станет содержать искомую ссылку без GET-параметров, так как эти самые параметры останутся во втором элементе.
Получение только параметров GET
С помощью этого кода получим:
GET-запросы в PHP
Итак, пришло время нам начать взаимодействовать с пользователем.
Как мы говорили ранее, PHP работает на сервере. Отсюда следует вопрос, а как же нам из браузера начать с ним взаимодействовать? Например, заполнить форму логина на сайте и отправить данные на сервер, чтобы наш код с ним что-нибудь сделал.
Именно об этом мы и поговорим в этом уроке.
Итак, давайте удалим все наши файлы в проекте и создадим новый пустой файл с именем index.php. Запишем в него следующий код:
Давайте выполним этот скрипт, открыв в браузере адрес:
http://myproject.loc/index.php
Как мы помним из этого урока, мы отправляем запрос веб-серверу, он понимает, что мы запрашиваем PHP-скрипт, выполняет его с помощью интерпретатора и возвращает нам ответ в виде результата выполнения этого скрипта.
Возникает вопрос: «А как можно передать от пользователя внутрь скрипта какие-либо данные?». Ответов на него у нас сразу несколько, и все мы их рассмотрим в этом уроке.
Метод GET
Когда мы вбиваем адрес скрипта и нажимаем Enter, выполняется GET-запрос по протоколу HTTP. В этом типе запроса к основному адресу мы можем прикрепить дополнительные параметры. Для того чтобы передать их, в конце основного адреса ставится знак вопроса, и мы можем перечислять эти параметры — вот так:
параметр1=значение1.
При этом если нам нужно указать несколько параметров, то мы разделяем их с помощью знака амперсанда:
арг1=знач1&арг2=знач2.
Если сейчас перейти по этой ссылке в браузере, то на сервер передадутся 2 параметра:
Давайте изменим код нашего index.php, чтобы узнать, что именно хранится в этой переменной.
Мы увидим следующее:
Как мы можем видеть, это действительно наши переданные аргументы, представленные в виде ассоциативного массива.
Учимся обрабатывать параметры
Разумеется, мы можем обращаться к этим элементам как к элементам обычного массива. Например, так:
Давайте создадим простую страничку, на которой мы будем выводить переданные с помощью GET-запроса логин и пароль.
Обновим нашу страничку в браузере и увидим результат.
Отлично, мы успешно обработали данные, которые нам пришли от пользователя.
Учимся работать с формами
Давайте теперь вспомним уроки про формы из курса по HTML и сделаем простейшую форму для отправки GET-запроса на страничку.
Давайте запишем в наш index.php следующий код:
И давайте теперь откроем его в браузере: http://myproject.loc/index.php
Как мы видим по исходному коду, форма отправит аргументы login и password с введенными значениями на адрес /login.php.
Давайте введем в поля значения admin и Pa$$w0rd соответственно и нажмем на кнопку «Войти».
Где сервер нам скажет о том, что такой странички не найдено.
Отлично! Так давайте же её создадим! Создаём рядом с нашим index.php файл с именем login.php. И пишем в него следующий код:
Вернёмся на нашу форму и повторно отправим пароль. Теперь мы увидим информацию о том, что мы успешно авторизовались. Это простейший прототип формы авторизации. Разумеется, он сильно упрощён, не всё сразу. А пока – делаем домашнее задание.
Обработка GET-запроса в строке URL средствами PHP
Нередко возникает задача обработки GET-запроса, содержащегося в строке URL: например, получение подстроки, отвечающей за этот запрос, замена параметров запроса, удаление его из URL и др. В данной статье читателю предлагаются простые функции, решающие некоторые из таких задач.
Вообще говоря, любая строка URL в терминах PCRE 1 может быть нестрого описана вот таким регулярным выражением:
Приведенное выше регулярное выражение описывает GET-параметры как фрагмент строки адреса, начинающийся со знака вопроса и продолжающийся до конца строки или до первой решётки (#), если таковая имеется 2 ; про якоря (anchors) в адресах часто забывают — именно они объявляются с помощью решётки.
Вооружившись функциями для работы с регулярными выражениями, несложно проводить с GET-параметрами различные манипуляции.
Получение строки GET-запроса.
Для начала поставим самую простую задачу — получить часть URL, содержащую GET-параметры.
Исключение GET-запроса из URL.
Иногда нужно получить URL без GET-параметров (например, при перенаправлении запросов с помощью mod_rewrite зачастую требуется проводить анализ URL, чтобы сформировать ответ клиенту; нередко для анализа нужна только статическая часть URL, а часть, где передается GET-запрос, не нужна и даже мешает). Эта операция занимает фактически одну строку, но, чтобы не писать каждый раз однотипный код, удобно вынести его в функцию 4 :
Замена содержимого GET-параметров.
Еще более сложная ситуация возникает в случае, когда в URL уже может находиться нужный к передаче GET-параметр (т.е. с тем же именем) — в этом случае нужно даже не просто корректно дописать адрес, а найти там нужную переменную и переписать её значение. Например, было
Все эти задачи может решить функция sgp ( ) :
За один вызов функции можно менять и несколько переменных:
В примерах для краткости изложения приведены относительные имена. Функция, разумеется, может работать и с абсолютными адресами, подчиняющимися стандарту URI. Код функции достаточно прост:
Для начала получаем GET-параметры адреса (код, аналогичный функции ggp ( ) ):
Если GET-параметры отсутствуют — заменять негде, переданный адрес заведомо останется неизменным и его можно сразу вернуть, завершив работу функции:
Далее окончательно формируем обновленную строку GET-запроса:
Обрабатываем возможное наличие якоря:
И, наконец, конструируем конечный адрес полностью, дописывая статическую часть адреса страницы и якорь, после чего возвращаем полученный результат:
Следует отметить, что эту задачу можно решить и без интенсивного использования регулярных выражений:
// Версия функции «substitue get parameter» без регулярных выражений
Версия без регулярных выражений работает где-то на треть быстрее, однако эта разница не чувствуется, поскольку общее время работы очень мало (1000 итераций выполняются за сотые доли секунды).
1. Работа с PCRE-совместимыми регулярными выражениями описана на соответствующей странице руководства по PHP.
В случае статического адреса с якорем обязана совпасть третья подмаска, поэтому вторая будет обязательно пронумерована, хотя и будет содежать пустую строку.
4. Вообще говоря, если положиться на корректность URL (т.е. допустить в т.ч., что знак вопроса встречается в адресе только один раз и решётка, если присутствует, следует за ним, а не перед ним), то можно использовать более простой код:
Получение полного URL-адреса в PHP
Я использую этот код для получения полного URL:
Мне нужно узнать его таким же, как он отображается на панели навигации в веб-браузере, а не реальный путь к файлу на сервере.
Ответ 1
Если же вы хотите поддерживать как HTTP, так и HTTPS, вы можете использовать:
Ответ 2
Краткая версия для вывода ссылки на веб-страницу:
Полная версия:
Структура URL:
схема: // имя пользователя: пароль @ домен: порт / путь? query_string # fragment_id
Части, выделенные жирным шрифтом, не будут включены в функцию.
Заметки:
Эта функция не включает username:password полный URL или фрагмент (хэш).
Она не будет показывать порт 80 по умолчанию для HTTP и порт 443 для HTTPS.
Проверено только со схемами http и https.
#fragment_id н е отправляется на сервер клиента (браузера) и не будут добавлены к полному URL.
Удалите HTTP_X_FORWARDED_HOST, если не планируете использовать прокси или балансировщики.
В спецификации сказано, что Host заголовок должен содержать номер порта, если он не является портом по умолчанию.
Переменные, контролируемые клиентом (браузером):
Переменные, контролируемые сервером:
Ответ 3
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.