Содержание
Уроки PHP – Как получить URL текущей страницы
Довольно часто вам придется узнавать URL текущей страницы в своем PHP приложении. Например, если вам нужно сделать какое-то конкретное действие в зависимости от фактического URL адреса.
В языке программирования PHP есть некоторые встроенные глобальные переменные, которые делают процесс получения текущего URL-адреса довольно простым. Вы можете получить любую информацию о текущем URL с помощью суперглобального массива $_SERVER
.
С помощью этого массива вы можете получить название доменного имени, название скрипта, параметры URL или их варианты.
Теперь давайте посмотрим, как это работает. Для примера давайте возьмем следующую сложную структуру URL адреса:
http://www.sebweo.com/test/some-script.php?city=Kyiv&start=482
Давайте разберем этот URL на составные части:
http
– это протоколsebweo.com
– это имя хоста (доменное имя).test
– это каталог, в котором размещен PHP скриптsome-script.php
– это фактическое имя PHP скриптаcity=Kyiv
– это первый параметр URL (город) и его значение (Kyiv)start=482
– это второй параметр URL (start) и его значение (482)
А теперь давайте попробуем создать тот же URL с помощью PHP.
- Получаем протокол ссылки
Протокол URL ссылки может быть получен из переменной $_SERVER['SERVER_PROTOCOL']
.
<?php echo $_SERVER['SERVER_PROTOCOL']; ?>
Однако, если вы запустите этот код, вы получите значение не просто http или https, а такую строку: HTTP/1.1
Чтобы получить чистую строку протокола, нам нужно провести определенные манипуляции с этим значением:
<?php $protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']), 'https') === FALSE ? 'http' : 'https'; echo $protocol; ?>
- Получаем имя хоста (домен)
На следующем шаге мы выясним имя хоста. Для этого используется значение массива $_SERVER['HTTP_HOST']
. Вы можете использовать это так:
<?php $hostame = $_SERVER['HTTP_HOST']; echo $hostame; ?>
- Получаем каталог и имя текущего PHP скрипта
Значение $_SERVER['SCRIPT_NAME']
содержит полный путь с именем фактического PHP сценария. Вы можете это использовать так:
<?php $script = $_SERVER['SCRIPT_NAME']; echo $script; ?>
- Получаем параметры текущего URL
Последняя часть текущего URL-адреса содержится в значении $_SERVER['QUERY_STRING']
и вы можете его использовать так:
<?php $params = $_SERVER['QUERY_STRING']; echo $params; ?>
- Получаем фактический URI (
/test/some-script.php?city=Kyiv&start=482
)
Если для вас не важны протокол и имя хоста (домен), а только путь, имя скрипта и параметры URL, вы можете просто использовать конструкцию $_SERVER['REQUEST_URI']
следующим образом:
<?php $uri = $_SERVER['REQUEST_URI']; echo $uri; ?>
Таким образом, чтобы получить полный URL текущей страницы с помощью PHP, это можно сделать так:
<?php $protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']), 'https') === FALSE ? 'http' : 'https'; $hostame = $_SERVER['HTTP_HOST']; $script = $_SERVER['SCRIPT_NAME']; $params = $_SERVER['QUERY_STRING']; $currentUrl = $protocol . '://' . $hostame . $script . '?' . $params; echo $currentUrl; ?>
ВАЖНО. Записи в суперглобальном массиве $_SERVER
создаются веб-сервером. Нет гарантии, что все веб-серверы предоставят любую из этих записей; сервер может опустить некоторые из них или предоставить другие, не указанные здесь. Однако, многие из этих переменных присутствуют в спецификации CGI/1.1, поэтому вы можете ожидать их поддержку сервером.
Теги:
php
6231
-
Опубликовано -
PHP, Уроки программирования
-
прокомментируйте статью
-
расскажите друзьям
какое количество считается правильным и как просканировать сайт
64307 2
How-to | – Читать 6 минут |
Прочитать позже
АУДИТ САЙТА — ССЫЛКИ
Инструкцию одобрила
SEO-специалист в CF. Digital
Елена Жгутова
Передача нескольких параметров GET выполняется почти при каждом запросе к серверу. Таких параметров не должно быть слишком много, чтобы их легче было контролировать со стороны браузера и сервера. Иначе поисковая система будет воспринимать разные страницы за дубли.
Содержание:
- Что такое GET-параметры
- Какое количество параметров GET считается правильным
- Как просканировать сайт и определить количество GET-параметров
- Заключение
Что такое GET-параметры
GET-запрос — метод передачи данных от клиента к серверу с целью получения информации, указанной с помощью конкретных GET-параметров.
Это публичные данные, доступные при повторном просмотре ссылки в истории. Такой запрос актуально использовать при неизменных данных в адресной строке. То есть при каждом обращении к странице с заданными параметрами ее адрес остается постоянным.
GET-запрос состоит из домена, адреса страницы и параметров, которые следуют после знака «?». Формат одного параметра выглядит так: «ключ=объяснение». Такой вид имеет весь запрос:
http://site.ru/index.php?name=Катя&surname=Иванова
где name — первый параметр, а surname — второй параметр.
Этот же запрос в формате РНР:
<?php echo ‘Имя: ‘ . $_GET[‘name’] . ‘<br />’; echo ‘Фамилия: ‘ . $_GET[‘surname’] . ‘<br />’; ?>,
Или так:
<?php if(isset($_GET['name'])) { echo $_GET['surname']; } ?>,
где параметр if определяет условие: если существует параметр name, пусть он выведется на экран.
В результате браузер выдаст такую информацию:
Имя: Катя Фамилия: Иванова
При передаче личной информации нет надобности использовать GET запрос и параметры по причине отсутствия конфиденциальности. Информация с адресной строки открыта для пользователей.
Применение такого запроса имеет смысл в случае потребности сохранить, отправить ссылку. Для передачи секретной информации лучше использовать запрос типа POST. Страницы, запросы на которые передаются параметром GET, всегда имеют статичный вид.
Какое количество параметров GET считается правильным
Один запрос включает несколько параметров GET. Их количество не ограничено протоколом http. Лимиты в размере запроса есть со стороны сервера и браузера. У каждого из них есть свой максимальный размер для приема/передачи данных. Если длина превысит этот лимит, запрос будет урезан.
Не существует конкретной максимальной величины GET-запроса. Один сервер может принимать максимум 8 Кб, а другой — 16 Кб. Средний размер запроса колеблется в пределах 512-1024 Кб.
Фактически в одном таком запросе должно быть не больше 5 параметров, иначе каждый из них будет сложно контролировать со стороны сервера и браузера. Если нужно передать большое количество информации, рекомендуется использовать метод POST.
При использовании человекопонятных URL (ЧПУ) передача нескольких параметров GET выполняется в скрытом формате. Чтобы увидеть запрос полностью, необходимо на время отключить ЧПУ.
Как просканировать сайт и определить количество GET-параметров
С помощью Аудита сайта Serpstat можно проверить, на каких URL вашего сайта много GET-параметров.
Создайте проект для сайта в сервисе:
В настройках перед началом сканирования выберите количество страниц, которые робот должен проверить:
После окончания сканирования перейдите на вкладку Все проверки. Если робот обнаружит такую ошибку, то вы увидите это в отчете:
Хотите узнать, как с помощью Serpstat найти и исправить технические ошибки на сайте?
Заказывайте бесплатную персональную демонстрацию сервиса, и наши специалисты вам все расскажут! 😉
Оставить заявку! |
Заключение
Количество параметров GET не должно быть слишком большим, чтобы не возникло путаницы в их определении со стороны браузера и сервера. Такой способ передачи информации лучше использовать для создания статических страниц без использования секретных данных.
Протокол http не ограничивает размер GET-запросов, но у каждого браузера и сервера существует лимит передачи данных. Рекомендуется использовать в среднем 512-1024 Кб или максимум 5 параметров для создания одного запроса.
Задавайте вопросы в комментариях или пишите в техподдержку.:) А также вступайте в чат любителей Серпстатить и подписывайтесь на наш канал в Telegram.
Serpstat — набор инструментов для поискового маркетинга!
Находите ключевые фразы и площадки для обратных ссылок, анализируйте SEO-стратегии конкурентов, ежедневно отслеживайте позиции в выдаче, исправляйте SEO-ошибки и управляйте SEO-командами.
Набор инструментов для экономии времени на выполнение SEO-задач.
7 дней бесплатно
Оцените статью по 5-бальной шкале
4.64 из 5 на основе 11 оценок
Нашли ошибку? Выделите её и нажмите Ctrl + Enter, чтобы сообщить нам.
Рекомендуемые статьи
How-to
Анастасия Сотула
Как найти и исправить 404 ошибку на сайте
How-to
Denys Kondak
Как продлить срок действия сертификата SSL
How-to
Denys Kondak
Как быстро найти битые изображения на сайте
Кейсы, лайфхаки, исследования и полезные статьи
Не успеваешь следить за новостями? Не беда! Наш любимый редактор подберет материалы, которые точно помогут в работе. Только полезные статьи, реальные кейсы и новости Serpstat раз в неделю. Присоединяйся к уютному комьюнити 🙂
Нажимая кнопку, ты соглашаешься с нашей политикой конфиденциальности.
Поделитесь статьей с вашими друзьями
Вы уверены?
Спасибо, мы сохранили ваши новые настройки рассылок.
Сообщить об ошибке
Отменить
Как получить параметры URL в PHP.
В этом руководстве по PHP для начинающих мы покажем вам, как получить параметры строки запроса из URL-адреса. Мы также расскажем вам о некоторых наиболее распространенных подводных камнях.
Возьмем в качестве примера следующий URL-адрес, который содержит два параметра GET:
page.php?id=23&page=34
В приведенном выше URL-адресе есть два параметра GET. id , который содержит значение 23, и page , который содержит значение 34.
Допустим, мы хотим получить эти значения, чтобы использовать их в нашем PHP-скрипте.
Если мы хотим получить значения этих двух параметров, мы можем получить доступ к суперглобальному массиву $_GET следующим образом:
//Получить два наших параметра GET. $id = $_GET['id']; $страница = $_GET['страница'];
Хотя код PHP будет работать, он ошибочно предполагает, что рассматриваемые параметры GET всегда будут существовать.
В результате существует вероятность того, что наш скрипт выдаст уродливое уведомление о неопределенном индексе, если пользователь удалит один из параметров из URL-адреса.
Это приведет к тому, что PHP выдаст следующее сообщение:
Примечание: Undefined index: id in /path/to/file.php в строке 4
чтобы увидеть, существует ли переменная GET, прежде чем пытаться ее использовать:
$id = false; если(isset($_GET['id'])){ $id = $_GET['id']; } $страница = ложь; если(isset($_GET['страница'])){ $страница = $_GET['страница']; }
В приведенном выше примере мы используем PHP isset , чтобы проверить, действительно ли существует рассматриваемый параметр.
Если он существует, мы присваиваем его одной из наших переменных. Если это не так, то наши переменные сохранят свои значения FALSE по умолчанию.
Никогда не доверяйте параметрам GET. Всегда подтверждайте их.
К параметрам GET всегда следует относиться с особой осторожностью.
- Нельзя предполагать, что они будут существовать всегда.
- Если они существуют, нельзя сбрасывать со счетов возможность того, что пользователь их подделал.
Другими словами, если вы ожидаете, что id будет целочисленным значением, и пользователь решит вручную изменить его на «blahblahblah», ваш PHP-скрипт должен справиться с этим сценарием.
Параметры URL являются внешними переменными, а внешним переменным никогда нельзя доверять.
Никогда не печатайте параметры GET непосредственно на странице.
Распечатка параметров GET без их очистки — прямой путь к катастрофе, поскольку это сделает ваше веб-приложение широко открытым для XSS-атак.
Возьмем следующий пример:
$page = false; если(isset($_GET['страница'])){ $страница = $_GET['страница']; } если($страница !== ложь){ echo 'Страница: ' . $ страница . '
'; }
Здесь мы все сделали правильно, за исключением последнего шага:
- Мы проверяем, существует ли параметр GET, прежде чем обращаться к его значению.
- Мы не печатаем номер страницы, если он не существует.
Однако мы не очищали переменную перед ее печатью. Это означает, что злоумышленник может легко заменить нашу переменную GET на HTML или JavaScript и выполнить ее при загрузке страницы.
Затем они могут перенаправить других пользователей на эту «испорченную» ссылку.
Чтобы защитить себя от XSS, мы можем использовать функцию PHP htmlentities :
// Защита от XSS если($страница !== ложь){ echo 'Страница: ' . htmlсущности($страница) . '
'; }
Функция htmlentities защищает от XSS, преобразовывая все специальные символы в соответствующие объекты HTML. Например,