Получить адрес https php

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

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

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

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

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

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

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

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

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

Читайте также:  Link to port html

Что же мы увидим в подопытном 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!

Источник

Как получить текущий URL в PHP?

Сформировать текущий адрес страницы можно с помощью элементов массива $_SERVER. Рассмотрим на примере URL:

Полный URL

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

Результат:

https://example.com/category/page?sort=asc

URL без GET-параметров

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

Результат:

https://example.com/category/page

Основной путь и GET-параметры

$url = $_SERVER['REQUEST_URI']; echo $url;

Результат:

Только основной путь

$url = $_SERVER['REQUEST_URI']; $url = explode('?', $url); $url = $url[0]; echo $url;

Результат:

Только GET-параметры

Результат:

Для преобразования строки с GET-параметрами в ассоциативный массив можно применить функцию parse_str() .

parse_str('sort=asc&page=2&brand=rich', $get); print_r($get);

Результат:

Array ( [sort] => asc [page] => 2 [brand] => rich )

Комментарии 2

Авторизуйтесь, чтобы добавить комментарий.

Другие публикации

Чтение Google таблиц в PHP

Как получить данные из Google spreadsheets в виде массива PHP? Очень просто, Google docs позволяет экспортировать лист в формате CSV, главное чтобы файл был в общем доступе.

Сортировка массивов

В продолжении темы работы с массивами поговорим о типичной задаче – их сортировке. Для ее выполнения в PHP существует множество функций, их подробное описание можно посмотреть на php.net, рассмотрим.

Источник

Как получить текущий URL адрес в PHP

Не пропусти свежие посты, подпишись:

Для работы с текущим URL страницы в основном используется глобальный массив $_SERVER. Этот массив содержит информацию о сервере и среде исполнения скриптов. Из него можно достать некоторые заголовки, адреса скриптов и другое. Однако, т.к. этот массив формируется сервером, его содержание может несколько разниться.

  • HTTPS - Принимает непустое значение, если запрос был произведён через протокол HTTPS.
  • HTTP_HOST - Содержимое заголовка Host: из текущего запроса, если он есть.
  • REQUEST_URI - URI, который был передан для того, чтобы получить доступ к этой странице. Например, '/index.html'.
  • QUERY_STRING - Строка запросов, если есть, с помощью которой была получена страница.

Полный URL

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

Результат: https://site.com/category/page?sort=asc

URL без GET параметров

 $url = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; //Разбиваем полный URL по символу «?», после которого перечисляются //GET параметры, т.е. получаем массив с 2 строками 0 - путь, 1 - GET параметры $url = explode('?', $url); $url = $url[0]; 

Результат: https://site.com/category/page

Адрес страницы с GET параметрами

 $url = $_SERVER['REQUEST_URI']; echo $url; 

Результат: /category/page?sort=asc

Только адрес страницы

 $url = $_SERVER['REQUEST_URI']; //Разбиваем строку по тому же правило, что было описано выше $url = explode('?', $url); $url = $url[0]; echo $url; 

Результат: /category/page

Только GET параметры

Однако с такой строкой не очень то удобно работать, но её можно преобразовать в ассоциативный массив. Для этого существует функция parse_str() она разбирает строку GET запроса на переменные.

 $output = []; parse_str($_SERVER['QUERY_STRING'], $output); 

Не пропусти свежие посты, подпишись:

Источник

PHP Получить протокол URL сайта – http vs https

В SSL, не сервер автоматически конвертирует URL-адрес в https, даже если URL-адрес привязки использует http? Нужно ли проверять протокол?

Это не автоматическое. Ваша верхняя функция выглядит нормально.

Я знаю, что уже поздно, хотя есть гораздо более удобный способ решить эту проблему! решения, показанные выше, довольно беспорядочны, и если кто-то должен когда-либо проверять это, я бы это сделал:

$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === true ? 'https://' : 'http://'; 

или даже без каких-либо условий, если вы не любите

$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos( $_SERVER["SERVER_PROTOCOL"],'/'))).'://'; 

Посмотрите на $_SERVER["SERVER_PROTOCOL"]

if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') < $protocol = 'https://'; >else < $protocol = 'http://'; > 
$scheme = $_SERVER['REQUEST_SCHEME'] . '://'; 

Для любой системы, кроме IIS, этого достаточно для определения собственного URL-адреса сайта:

$siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['HTTP_HOST'].'/'; 
$siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].'/'; 

зависит от того, что вы точно хотите: HTTP_HOST и SERVER_NAME

Поскольку номер порта тестирования не является хорошей практикой по моему мнению, мое решение:

define('HTTPS', isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN)); 

Константа HTTPS возвращает TRUE если $_SERVER['HTTPS'] установлен и равен «1», «true», «on» или «yes». Возвращает FALSE в противном случае.

Используйте эту переменную сервера для получения сведений о протоколе:

 $scheme = $_SERVER['REQUEST_SCHEME'] . '://'; echo $scheme; //it gives http:// or https:// 

Обратите внимание, что эта переменная сервера ненадежна. Для получения дополнительной информации посмотрите: надежна ли функция $ _SERVER ['REQUEST_SCHEME']?

$protocal = 'http'; if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || $_SERVER['HTTPS'] == 'on') echo $protocal; 

В случае прокси-сервера SERVER_PORT может не дать правильное значение, так что это то, что сработало для меня –

$protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTP_X_FORWARDED_PORT'] == 443) ? "https://" : "http://" 

сделал функцию, используя ответ Rid Iculous , который работал в моей системе.

Я протестировал большинство проголосовавших answe r, и это не сработало для меня , я закончил использование:

$protocol = isset($_SERVER['HTTPS']) ? 'https://' : 'http://'; 

это лучшее решение для https или http:

Но не может отображать https или http, поэтому он используется только для ссылки на ваш контент сайта, например изображение и т. Д.

если вы хотите перенаправить свой сайт в https, добавьте этот код в файл .htaccess:

 RewriteCond % '"scheme":"http"' RewriteRule ^(.*)$ https://www.your-domain.com$1 [L]  

Измените http://www.your-domain.com своим именем dowmain.

Вот как я это делаю … это короткая версия, if else версия ответа Рида Икулеса

$protocol = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] === 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ? 'https' : 'http'; 

Источник

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