Получение URL сайта в PHP простыми способами

Как получить url сайта php

Как получить url сайта php

В PHP существует несколько надежных методов для извлечения полного URL текущей страницы. Основной способ – использование суперглобального массива $_SERVER, который хранит информацию о протоколе, хосте и пути запроса. Комбинация $_SERVER[‘HTTPS’], $_SERVER[‘HTTP_HOST’] и $_SERVER[‘REQUEST_URI’] позволяет собрать точный адрес без сторонних библиотек.

Для динамических проектов важно учитывать наличие прокси и корректно определять протокол. Если сайт работает через HTTPS или перенаправляется через прокси, рекомендуется проверять $_SERVER[‘HTTP_X_FORWARDED_PROTO’] или $_SERVER[‘HTTP_X_FORWARDED_SSL’], чтобы избежать ошибок при формировании URL. Это особенно критично для сайтов с несколькими поддоменами.

Для упрощения повторного использования URL удобно создавать небольшую функцию, которая автоматически собирает протокол, домен и путь запроса. Такая функция позволяет не дублировать код в разных частях проекта и уменьшает вероятность ошибок при генерации ссылок в API или при редиректах.

Определение полного URL текущей страницы через $_SERVER

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

$_SERVER['HTTPS'] – проверяет протокол HTTPS. Если значение равно ‘on’, протокол будет ‘https’, иначе ‘http’.

$_SERVER['HTTP_HOST'] – содержит доменное имя сервера с портом, если он нестандартный.

$_SERVER['REQUEST_URI'] – включает путь и строку запроса после домена, например /folder/page.php?param=value.

Пример корректного формирования полного URL:

$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://';

$full_url = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

Этот способ учитывает как протокол, так и любые параметры запроса, включая GET-параметры. Он подходит для динамических и статических страниц.

Важно: если сайт использует нестандартный порт (например, 8080), убедитесь, что $_SERVER['HTTP_HOST'] содержит порт. В противном случае его нужно добавить вручную через $_SERVER['SERVER_PORT'].

Для дополнительной безопасности при генерации URL следует фильтровать значения через filter_var($full_url, FILTER_SANITIZE_URL), чтобы избежать внедрения вредоносных данных в адрес.

Получение домена сайта без протокола в PHP

Получение домена сайта без протокола в PHP

Для извлечения домена без протокола в PHP чаще всего используют глобальный массив $_SERVER. Наиболее точный способ – опираться на HTTP_HOST:

Пример:

$domain = $_SERVER['HTTP_HOST'];
echo $domain; // example.com

Если требуется удалить поддомены или получить только основной домен второго уровня с зоной, можно использовать функцию parse_url вместе с preg_replace:

$url = 'https://sub.example.com/path';
$host = parse_url($url, PHP_URL_HOST);
$domain = preg_replace('/^www\./', '', $host);
echo $domain; // sub.example.com

Для универсального решения без учета протокола и поддоменов удобно использовать explode и array_slice:

$host = $_SERVER['HTTP_HOST'];
$parts = explode('.', $host);
$domain = implode('.', array_slice($parts, -2));
echo $domain; // example.com

Этот метод работает с доменами второго уровня и доменами с расширенными зонами, например example.co.uk, если правильно настроить array_slice для нужной глубины.

Для проектов с динамическими поддоменами рекомендуется проверять наличие www и корректно обрабатывать разные структуры URL, чтобы избежать ошибок при генерации ссылок или редиректах.

Формирование URL с учетом порта и протокола

Формирование URL с учетом порта и протокола

При формировании полного URL в PHP важно учитывать не только домен и путь, но и протокол (HTTP или HTTPS) и порт сервера. Некорректная комбинация этих элементов может привести к недоступности ресурсов или ошибкам перенаправления.

Основные шаги для точного формирования URL:

  1. Определение протокола:

    Используйте проверку переменной $_SERVER['HTTPS'] для выявления защищенного соединения:

    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
    
  2. Получение хоста:

    Используйте $_SERVER['HTTP_HOST'], чтобы автоматически учесть поддомены и текущий домен:

    $host = $_SERVER['HTTP_HOST'];
    
  3. Учет порта:

    Если сервер использует нестандартный порт, его необходимо добавить вручную. Стандартные порты 80 для HTTP и 443 для HTTPS можно опускать:

    $port = $_SERVER['SERVER_PORT'];
    if (($protocol === 'http' && $port != 80) || ($protocol === 'https' && $port != 443)) {
    $host .= ':' . $port;
    }
    
  4. Формирование полного URL:

    Объедините протокол, хост с портом и путь к скрипту:

    $url = $protocol . '://' . $host . $_SERVER['REQUEST_URI'];
    

Рекомендации:

  • Используйте $_SERVER['REQUEST_URI'] вместо $_SERVER['PHP_SELF'], чтобы включить GET-параметры.
  • При работе за прокси проверяйте $_SERVER['HTTP_X_FORWARDED_PROTO'], чтобы корректно определить протокол HTTPS.
  • Для генерации URL в CLI или при тестировании используйте переменные окружения или конфигурационные значения вместо $_SERVER.

Извлечение запроса (query string) из URL

Извлечение запроса (query string) из URL

Для получения query string в PHP используется глобальная переменная $_SERVER['QUERY_STRING']. Она возвращает строку запроса без символа ?, содержащую все параметры URL после пути.

Пример извлечения строки запроса:

<?php
$query = $_SERVER['QUERY_STRING'];
echo $query;
?>

Для удобной работы с отдельными параметрами используется функция parse_str(). Она преобразует строку запроса в массив ключ-значение.

<?php
$query = $_SERVER['QUERY_STRING'];
parse_str($query, $params);
print_r($params);
?>

Результат выполнения кода для URL https://example.com/page.php?id=10&category=books:

Ключ Значение
id 10
category books

Если требуется получить значение конкретного параметра без обработки всех остальных, можно использовать $_GET:

<?php
$id = $_GET['id']; // вернет 10
$category = $_GET['category']; // вернет 'books'
?>

Для безопасности рекомендуется использовать filter_input() для валидации и фильтрации данных из строки запроса:

<?php
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$category = filter_input(INPUT_GET, 'category', FILTER_SANITIZE_STRING);
?>

Этот подход предотвращает внедрение нежелательных символов и обеспечивает корректное использование параметров в приложении.

Сбор URL для редиректа внутри PHP

Сбор URL для редиректа внутри PHP

Для формирования корректного URL редиректа используйте протокол, хост и путь запроса. Определение протокола выполняется через проверку $_SERVER[‘HTTPS’]:

$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://';

Домен и путь запроса собираются из $_SERVER[‘HTTP_HOST’] и $_SERVER[‘REQUEST_URI’]:

$host = $_SERVER['HTTP_HOST'];
$uri = $_SERVER['REQUEST_URI'];
$currentUrl = $protocol . $host . $uri;

Для редиректа с параметрами GET формируйте строку запроса через http_build_query():

$params = ['page' => 3, 'sort' => 'asc'];
$query = http_build_query($params);
$redirectUrl = $protocol . $host . '/destination.php?' . $query;

Редирект выполняется функцией header() с завершением скрипта через exit:

header('Location: ' . $redirectUrl);
exit;

Для безопасности используйте filter_var() или urlencode() для экранирования домена и параметров:

$safeHost = filter_var($host, FILTER_SANITIZE_URL);
$safeRedirect = $protocol . $safeHost . '/destination.php?' . http_build_query($params);

Такой метод обеспечивает точное формирование URL и корректное выполнение редиректа внутри PHP.

Использование функции parse_url для разбора URL

Использование функции parse_url для разбора URL

Функция parse_url позволяет извлечь отдельные компоненты URL: схему, хост, порт, путь, строку запроса и фрагмент. Это особенно удобно, когда требуется обработка адресов динамически или проверка их корректности.

Синтаксис функции:

  • parse_url(string $url, int $component = -1): array|string|false
  • $url – строка с URL.
  • $component – необязательный параметр, позволяет сразу получить конкретную часть URL (например, PHP_URL_HOST, PHP_URL_PATH).

Пример извлечения всех компонентов URL:

$url = "https://example.com:8080/path/page.php?user=1#section";
$parts = parse_url($url);
print_r($parts);

Результат:

Array
(
[scheme] => https
[host] => example.com
[port] => 8080
[path] => /path/page.php
[query] => user=1
[fragment] => section
)

Если нужно получить только хост или путь, можно использовать второй параметр:

$host = parse_url($url, PHP_URL_HOST); // "example.com"
$path = parse_url($url, PHP_URL_PATH);     // "/path/page.php"

Рекомендации по использованию:

  • Всегда проверяйте результат на false, чтобы избежать ошибок при некорректных URL.
  • Для обработки GET-параметров после извлечения query используйте parse_str.
  • Для построения URL после изменений компонентов применяйте конкатенацию или специализированные функции, так как parse_url возвращает только разбор, а не сборку URL.

Пример совместного использования parse_url и parse_str:

$url = "https://example.com/page.php?user=1&action=edit";
$parts = parse_url($url);
parse_str($parts['query'], $queryParams);
print_r($queryParams);

Результат:

Array
(
[user] => 1
[action] => edit
)

Функция parse_url подходит для быстрого анализа URL и безопасного извлечения отдельных компонентов без использования регулярных выражений.

Вопрос-ответ:

Ссылка на основную публикацию