Как получить текущий URL страницы
- Зачем требуется узнать текущий URL страницы
- Трудности для новичка при получении текущего URL на PHP
- Готовая PHP-функция текущего URL страницы
Зачем требуется узнать текущий URL страницы
Часто в PHP программе требуется узнать URL страницы. Иными словами, необходимо сформировать адрес, который посетитель видит в адресной строке своего браузера, для каких-то последующих манипуляций с ним. Наиболее частым применением подобного функционала в моей практике было формирование различных служебных ссылок (добавление GET-параметров к текущему URL).
Самый доступный пример — версия страницы для печати. По адресу
Трудности для новичка при получении текущего URL на PHP
Явной функции по этому поводу нет, потому придется писать самому.
Оставим в покое вероятность того, что начинающий PHP-кодер может еще и не знать о существовании глобального массива $_SERVER — об этой великой тайне ему поведают в нецензурной форме на первом же форуме, куда он встрянет с вопросом.
Начнем с того, что этот самый URL страницы раскидан по частям внутри $_SERVER, и надо его, в буквальном смысле, собирать заново. Далее, новичок, по неопытности, может упустить пару важных моментов:
- протокол соединения: он может быть «https://» — для защищенного соединения;
- порт: он может отличатся от принятого по-умолчанию значения «80» («443» — для защищенного соединения).
Стоит упомянуть о локальных якорях — ссылках вида
Готовая 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'] может не работать. Поэтому проверяйте корректность результатов функции при первых запусках скриптов на новом месте.
29.05.2011 | 10:53
