Почему я не получаю 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.
Вопроса два
Как я могу получить значение переменной
$_SERVER['REQUEST_URI']? Без этого я не могу понять как на практике реальзовать MVC паттерн.Есть ли способ отлаживать код используя еще и ресурсы веб-сервера? И если есть - то какой? Проблема в том что когда я запускаю код на отладку через командную строку, то запускается только сам код
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 шт):
Судя по дампу $_SERVER вы открываете корневую страницу сайта. Т.е. у вас ссылка вида http://test/ А REQUEST_URI это грубо говоря часть ссылки после домена. В вашем случае это просто "/"
И ваш скрипт отрабатывает корректно. Если вы укажите ссылку вида "http://test/index.php** то в REQUEST_URI будет "index.php" и тогда ваш скрипт отработает чуть более корректно.

