Дублирование query параметров в массиве $_SERVER является нормальным и ожидаемым поведением в PHP. Это происходит потому, что веб-сервер, обрабатывая запросы, переносит информацию о query строке в разные переменные окружения, включая $_GET и $_SERVER.
Давайте рассмотрим пример для более подробного объяснения. Предположим, что у вас есть следующий URL: http://example.com?page=home&lang=en
. В этом URL у нас есть два query параметра: page
с значением home
и lang
с значением en
.
Когда вы отправляете запрос по этому URL, веб-сервер анализирует его и создает массив $_GET, в котором сохраняются значения query параметров. В нашем примере, $_GET будет выглядеть так: ['page' => 'home', 'lang' => 'en']
.
Однако, веб-сервер также передает информацию о query строке через массив $_SERVER. Для каждого параметра он создает свою переменную окружения, добавляя префикс "QUERY_" и преобразуя символы "-" (тире) в символы "_" (подчеркивания). Таким образом, в нашем примере, $_SERVER будет выглядеть примерно так:
[ 'QUERY_STRING' => 'page=home&lang=en', 'HTTP_REFERER' => 'http://example.com', 'REQUEST_URI' => '/', 'REQUEST_METHOD' => 'GET', // другие переменные окружения ]
Вы можете получить доступ к значениям query параметров через $_SERVER['QUERY_STRING']. Например, в нашем примере $_SERVER['QUERY_STRING'] вернет строку 'page=home&lang=en'
.
Таким образом, дублирование query параметров в массиве $_SERVER является результатом передачи информации о query строке из веб-сервера в PHP-скрипт через переменные окружения.