Php как получить http

Как в PHP получить URL? Получение текущей ссылки в PHP. Переменная $_SERVER

В этой статье будет рассказано о том, как в языке программирования PHP получить адрес текущей страницы. Также вы узнаете о работе переменной $_SERVER.

Первое, о чём следует сказать, — зачем вообще получать ссылки (urls) в PHP? На практике варианты могут различаться. Представьте, что у нас для разных разделов применяется один и тот же шаблон. И возникает потребность в том, чтобы вывести (либо не вывести — зависит от ситуации) какой-нибудь специальный блок, причём в других разделах вывод этого блока не нужен.

В большинстве случаев мы пожелаем выполнить поставленную задачу по условию. То есть сделаем условие, в котором будем выполнять проверку того либо иного раздела. Можно сказать, что с точки зрения архитектуры данное решение не является оптимальным. Но на практике нам нередко достаются уже реализованные проекты, с которыми необходимо что-то решать с учётом уже имеющейся архитектуры.

Но давайте не будем много говорить, а лучше приступим к решению поставленной задачи — получению ссылки в PHP.

Получение ссылки текущей страницы в PHP

Для получения данных нужно обратиться к глобальной переменной в PHP, которая называется $_SERVER. Переменная $_SERVER представляет собой массив, содержащий много полезной информации. На практике $_SERVER может получать любые данные о текущем URL: — доменное имя; — название скрипта; — параметры URL.

Читайте также:  Установить виртуальную среду python ubuntu

По сути, в глобальном массиве $_SERVER хранятся и заголовки, и пути, и местоположения скриптов. Если вас интересует сразу вся информация, хранимая в массиве $_SERVER, воспользуйтесь следующим кодом на PHP. Он выведет всё, что хранится, сделав это в читабельном виде:

Идём дальше. Представьте, что у вас есть web-страница, имеющая следующий вид: http://localhost/php-lessons/url/?name=anna&city=Valencia. Тестирование в данном примере осуществляется на локальном сервере. Если надо тестировать код на реальном веб-сайте, доступном в интернете, достаточно вместо localhost прописать имя сайта (домен) — тот же otus.ru.

Что же мы увидим в подопытном url? Нас могут интересовать следующие данные: — адрес веб-страницы без GET-параметров; — URL с GET-параметрами; — непосредственно GET-параметры без текущей ссылки (адреса веб-страницы).

Лучше всего разобраться с каждым из случаев по отдельности — так будет гораздо понятнее.

Получение полного URL в PHP

Для получения полного URL вместе с имеющимися GET-параметрами, пригодится следующий код:

 
$url = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; echo $url;

Что здесь что? В первую очередь, осуществляется проверка, какой именно протокол передачи данных задействуется: https или http. В случае, если значение $_SERVER[‘HTTPS’] не является пустым, речь идёт о протоколе https, в обратном случае — http.

На втором этапе выполняется присоединение двоеточия и двух слэшев, имени домена и остальной части URL.

Итог выполнения кода будет следующим:

Screenshot_1-1801-0dd7a2.png

Если протокол получать не требуется, код на PHP можно немного сократить:

Screenshot_2-1801-d9667c.png

Смотрим на результат и видим, что протокол отсутствует:

Screenshot_3-1801-8cafa5.png

Получение URL в PHP без GET-параметров

Иногда эти параметры, передаваемые в качестве части ссылки, нас не интересуют, то есть требуется получить адрес без них. Мы говорим о следующих параметрах: name=anna&city=Valencia.

В действительности их можно отсечь, используя функцию explode в PHP, разбивающую строку по разделителю. Не стоит объяснять, что ссылка представляет собой строку, а параметры GET начинают прописываться после «?». В результате вопросительный знак и станет разделителем, а функция explode сделает из строки массив с 2-мя элементами. Первый элемент станет содержать искомую ссылку без GET-параметров, так как эти самые параметры останутся во втором элементе.

Код на PHP с использованием переменной $_SERVER будет выглядеть так:

Screenshot_4-1801-24d62c.png

Screenshot_5-1801-7fbe83.png

Получение только параметров GET

Эта операция тем более не вызывает сложностей. В данном случае код с использованием переменной $_SERVER будет выглядеть следующим образом:

Screenshot_6-1801-41b5aa.png

С помощью этого кода получим:

Screenshot_7-1801-1863fc.png

Это всё. Надеемся, что теперь вы знаете, как происходит получение PHP ссылки и как работает глобальная переменная $_SERVER. Если же интересуют более продвинутые знания, записывайтесь на курсы OTUS!

Источник

Как получить HTTP код ответа удаленного веб-сервера из PHP?

Когда требуется получить HTTP код для заданной URL, то вы наверняка воспользуетесь PHP функцией get_headers($url). Дальше я расскажу о разных подводных камнях и возникающих попутных проблемах.

В первом приближении задача решается элементарно. У вас есть URL, вы запрашиваете только заголовки, т.к. вам не нужен сам документ. В заголовках можно найти и пропарсить стандартный ответ сервера, чтобы извлечь код ответа.

Скорее всего, вы действительно получите желаемое, но не всегда. Потому перейдем к рассмотрению наиболее частых коллизий.

Домен не существует

Да такое бывает, когда введенный адрес не существует. Вернее не адрес, а доменное имя сайта. Запрос посылать некуда, а вы увидите (если не отключили вывод php warnings) что то вроде следующего:

PHP вернет пустые заголовки, из которых ничего не извлечь. Как можно обработать эту ситуацию?

Тут вы уже не увидите сообщений от PHP, а в случае невозможности определить адрес сервера — будет установлено какое то кастомное значение вместо HTTP кода, чтобы иметь возможность его обработать дальше.

Доменные имена с использованием национальных наборов символов.

Функция get_headers не настолько умна, чтобы переводить ваш http://россия.рф в http://xn--h1alffa9f.xn--p1ai200.

Если вы попытаетесь запросить заголовки без перевода в нужный вид, то прошлый пример выдаст вам загадочное ‘no response’. В то время как браузер без проблем откроет сайт, т.к. умеет переводить доменные имена, в которых используются местные национальные наборы символов, отличные от латиницы.

Для конвертации используем свободно распространяемую библиотеку idna_convert. Качайте архив, распаковывайте и подключайте в ваш код.

Теперь пример выглядит следующим образом:

Источник

Оцените статью