Почему я не получаю URI сервера от переменной $_SERVER['REQUEST_URI']??? Как отлаживать код с использованием сервера?

Есть простая функция explode(string $separator, string $string, int $limit = PHP_INT_MAX): array. Как я понял из документации она разбивает полученную строку на массив строк разделенных каким-либо знаком.

Также есть переменная $_SERVER которая хранит информацию о сервере и среде исполнения.

Тут я проверил что функция explode() работает:

<?php
    $path = explode('/', 'http://test');
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <h1>
            <?php 
                echo var_dump($path);
            ?>
        </h1>
    </body>
</html>

Вот результат введите сюда описание изображения

Тут я вместо http://test вставляю $_SERVER['REQUEST_URI']:

<?php
    $path = explode('/', $_SERVER['REQUEST_URI']);
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <h1>
            <?php 
                echo var_dump($path);
            ?>
        </h1>
    </body>
</html>

Вот что я получаю: введите сюда описание изображения

Исходя из увиденного я делаю вывод что я просто не получаю ничего от сервера через переменную $_SERVER.

Вопроса два

  1. Как я могу получить значение переменной $_SERVER['REQUEST_URI']? Без этого я не могу понять как на практике реальзовать MVC паттерн.

  2. Есть ли способ отлаживать код используя еще и ресурсы веб-сервера? И если есть - то какой? Проблема в том что когда я запускаю код на отладку через командную строку, то запускается только сам код php. И когда этот же код содержит в себе какие-то аргументы или функции направленные на работу с сервером то в лучшем случае я получаю ошибку - так как сам код никак не работает с сервером. Мне бы иметь какую нибудь возможность проходить пошагово по коду попутно получая результаты работы apache чтобы лучше понимать где конкретно находится ошибка.

Заранее спасибо)

Ответ для комментария Alexey Ten

array(32) { 
["HTTP_HOST"]=> string(4) "test" 
["HTTP_CONNECTION"]=> string(10) "keep-alive" ["HTTP_CACHE_CONTROL"]=> string(9) "max-age=0"
["HTTP_UPGRADE_INSECURE_REQUESTS"]=> string(1) "1" 
["HTTP_USER_AGENT"]=> string(101) "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36" 
["HTTP_ACCEPT"]=> string(135) "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" 
["HTTP_REFERER"]=> string(12) "http://test/" 
["HTTP_ACCEPT_ENCODING"]=> string(13) "gzip, deflate" 
["HTTP_ACCEPT_LANGUAGE"]=> string(65) "ru,ru-RU;q=0.9,ja-JP;q=0.8,ja;q=0.7,en-US;q=0.6,en;q=0.5,la;q=0.4" 
["PATH"]=> string(70) "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" 
["SERVER_SIGNATURE"]=> string(65) "

Apache/2.4.52 (Ubuntu) Server at test Port 80
" 
["SERVER_SOFTWARE"]=> string(22) "Apache/2.4.52 (Ubuntu)" 
["SERVER_NAME"]=> string(4) "test" 
["SERVER_ADDR"]=> string(9) "127.0.0.2" 
["SERVER_PORT"]=> string(2) "80" 
["REMOTE_ADDR"]=> string(9) "127.0.0.1" 
["DOCUMENT_ROOT"]=> string(13) "/var/www/html" 
["REQUEST_SCHEME"]=> string(4) "http" 
["CONTEXT_PREFIX"]=> string(0) "" 
["CONTEXT_DOCUMENT_ROOT"]=> string(13) "/var/www/html" 
["SERVER_ADMIN"]=> string(14) "webmaster@test" 
["SCRIPT_FILENAME"]=> string(23) "/var/www/html/index.php" 
["REMOTE_PORT"]=> string(5) "44508" 
["GATEWAY_INTERFACE"]=> string(7) "CGI/1.1" 
["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1" 
["REQUEST_METHOD"]=> string(3) "GET" 
["QUERY_STRING"]=> string(0) "" 
["REQUEST_URI"]=> string(1) "/" 
["SCRIPT_NAME"]=> string(10) "/index.php" 
["PHP_SELF"]=> string(10) "/index.php" 
["REQUEST_TIME_FLOAT"]=> float(1669272016.449686) 
["REQUEST_TIME"]=> int(1669272016) }

Ответы (1 шт):

Автор решения: newman

Судя по дампу $_SERVER вы открываете корневую страницу сайта. Т.е. у вас ссылка вида http://test/ А REQUEST_URI это грубо говоря часть ссылки после домена. В вашем случае это просто "/"

И ваш скрипт отрабатывает корректно. Если вы укажите ссылку вида "http://test/index.php** то в REQUEST_URI будет "index.php" и тогда ваш скрипт отработает чуть более корректно.

→ Ссылка