Php what url was requested

Как в 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.

Что же мы увидим в подопытном 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, рассмотрим.

Источник

Get The Full Requested URL in PHP

While there is no function to obtain the full request URL in PHP, we can still make our own using a combination of server variables to get what we need.

d

Full request URL, PHP

Oddly, the full request URL is not directly accessible from PHP, since there seem to be no variable or function to reveal it; but, you can just make your own function to obtain it — to do that, you will need to use a combination of $_SERVER variables:

To get the full requested URL you can use a combination of $_SERVER variables to "guess" the URL—a quick example of how to do this is included below:

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

If the short if statement above is too hard to read, you can also code it like this:

$full_request_url = ''; if ((!empty($_SERVER['HTTPS'])) && ($_SERVER['HTTPS'] !== 'off'))  $full_request_url .= 'https://'; > else  $full_request_url .= 'http://'; > $full_request_url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 

Note. You will not be able to return the part after the hash "#" character, also known as the fragment part of the URL, since it is not sent to the server as part of the request by the client. The hash is primarily used for client-side navigation on subsections, and corresponds to a unique ID in the HTML on a web page. So, if the fragment part is important, you will need to use JavaScript to obtain it.

Function to get full request url

The HTTPS variable will be set to a non-empty value if the request was performed over the HTTPS protocol, knowing this, you can then use the empty function to check that the variable was not empty.

Since ISS on Windows might set the variable to "off" when HTTPS is not used, you will also need to check that the variable was not set to "off".

Normally HTTP requests on the web will go through port 80 (or 443 for HTTPS), so in most cases there is no need to include the port number; if for some reason you still need it, you can obtain it through the SERVER_PORT variable:

$full_request_url = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://'. $_SERVER['HTTP_HOST'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI']; 

You can easily create a function to return the full request URL whenever it is needed:

function full_request_url()  return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://'. $_SERVER['HTTP_HOST'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI']; > 

If you are in an object orientated context, you may want to consider avoiding the use of super globals directly: Avoid Direct Use of PHP Superglobals

Sanitizing client-controlled variables

Some of the server variables are controlled by the client, and can be manipulated by malicious users. However, this should not matter—for the most part—unless you use it in a sensitive place, such as in a database, or even just to generate absolute paths for links on your page!. Please do not use absolute paths—it is much easier to maintain your site with root-relative URLs, and you will avoid the issue of cache poisoning of your links. See also: Absolute and Relative Paths

For example, if the REQUEST_URI contains invalid characters, it probably results in a 404 error response being sent to the user/client. Only if you insert/use the data in a sensitive place should validation be necessary.

Likewise, the HTTP_HOST variable may be manipulated, but doing so will probably just result in your web server returning the wrong website (if you use virtual hosting). However, you should still be careful, because some servers will simply serve a "default" virtual host, and it might fall back to your PHP application!

While it does not usually cause any problems if someone manipulates the host variable, it might still be a problem due to cache poisoning attacks. If a cache server is storing copies of your HTML pages, and an attacker somehow manages to inject a different host into your links, the attacker could successfully redirect all- or parts of your traffic to their own malicious website.

As a result of the complexity involved, it is probably best if developers always validate these variables. You can not expect that others who might be working on the code has the same overview of the application as yourself.

To validate the HTTP_HOST variable in your PHP application, you should maintain an array of known hosts, and simply use the value from the array rather than from the HTTP_HOST directly. This is a small inconvenience for achieving a bit of extra security.

Validating the REQUEST_URI is a bit more complex, and will also depend on your site's structure. You may opt to use a regular expression and then only allow certain valid patterns.

Источник

Как получить текущий 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); 

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

Источник

Читайте также:  Hover and hover out css
Оцените статью