Загрузка страницы..
Как получить текущий URL страницы
Часто в PHP программе требуется узнать URL страницы. В этой статье расскажем как это сделать.
2015-07-22T08:07 22 июля 2015 08:07
Просмотров: 3923

Зачем требуется узнать текущий URL страницы

Часто в PHP программе требуется узнать URL страницы. Иными словами, необходимо сформировать адрес, который посетитель видит в адресной строке своего браузера, для каких-то последующих манипуляций с ним. Наиболее частым применением подобного функционала в моей практике было формирование различных служебных ссылок (добавление GET-параметров к текущему URL).

Самый доступный пример — версия страницы для печати. По адресу http://site.com/blog/hello/ выводится обычная страница сайта, а по http://site.com/blog/hello/?print=1 — движок сайта формирует облегченную версию.

Трудности для новичка при получении текущего URL на PHP

Явной функции по этому поводу нет, потому придется писать самому.

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

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

  • протокол соединения: он может быть «https://» — для защищенного соединения;
  • порт: он может отличатся от принятого по-умолчанию значения «80» («443» — для защищенного соединения).

Стоит упомянуть о локальных якорях — ссылках вида http://site.com/blog/hello/#comment_form, которые работают исключительно для браузера и не передаются на сервер, поэтому, к сожалению, их мы учесть не сможем.

Готовая PHP-функция текущего URL страницы

function request_url()
{
  $result = ''; // Пока результат пуст
  $default_port = 80; // Порт по-умолчанию
 
  // А не в защищенном-ли мы соединении?
  if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS']=='on')) {
    // В защищенном! Добавим протокол...
    $result .= 'https://';
    // ...и переназначим значение порта по-умолчанию
    $default_port = 443;
  } else {
    // Обычное соединение, обычный протокол
    $result .= 'http://';
  }
  // Имя сервера, напр. site.com или www.site.com
  $result .= $_SERVER['SERVER_NAME'];
 
  // А порт у нас по-умолчанию?
  if ($_SERVER['SERVER_PORT'] != $default_port) {
    // Если нет, то добавим порт в URL
    $result .= ':'.$_SERVER['SERVER_PORT'];
  }
  // Последняя часть запроса (путь и GET-параметры).
  $result .= $_SERVER['REQUEST_URI'];
  // Уфф, вроде получилось!
  return $result;
}

Внимание! В интернетах пишут, что в некоторых случаях, при криворукости администраторов веб-сервера, параметр $_SERVER['HTTPS'] может не работать. Поэтому проверяйте корректность результатов функции при первых запусках скриптов на новом месте.



Комментарии: 1

комментарий soir one
soir one
2018-02-13T15:3413 февр. 2018 15:34
норм

Добавить комментарий

Яндекс.Метрика Яндекс.Метрик