Главные новости

Как получить текущий URL страницы

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

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

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

Зачем требуется узнать текущий 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'] может не работать. Поэтому проверяйте корректность результатов функции при первых запусках скриптов на новом месте.