Как получить строку запроса в PHP с помощью встроенного сервера PHP? - PullRequest
3 голосов
/ 19 сентября 2019

Я разрабатываю веб-приложение MVC, и для его работы маршрутизатор должен проанализировать строку запроса, для чего мне нужно сначала загрузить URL-адрес в переменную.Как мне добиться этого с помощью встроенного сервера PHP?

В настоящее время я использую PHP 7.3.9, но, насколько я могу судить, проблема сохраняется во всех версиях встроенного сервера.

Если я использую Apache для запуска этого приложения, все просто, все, что мне нужно сделать, это

$uri = $_SERVER['QUERY_STRING'];, и я готов идти, все работает просто отлично.

Однако, если я использую встроенный веб-сервер PHP, я получаю сообщение об ошибке:

Undefined index: QUERY_STRING in /path_to_my_project/public/index.php on line 22

Я попытался поискать в Google и нашел этот запрос на извлечение предполагает, что такой переменной действительно не существует на встроенном веб-сервере PHP.

Поэтому мой вопрос: как мне получить строку запроса для моего маршрутизатора, если я запускаю встроенный сервергде $_SERVER['QUERY_STRING'] не существует?

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

$_SERVER['QUERY_STRING'] присутствует только в том случае, если в запросе есть строка запроса.Вы можете избежать этой проблемы, используя array_key_exists ():

if (array_key_exists('QUERY_STRING', $_SERVER)) {
    $uri = $_SERVER['QUERY_STRING'];
} else {
    $uri = '';
}

Или isset ():

if (isset('QUERY_STRING', $_SERVER)) {
    $uri = $_SERVER['QUERY_STRING'];
} else {
    $uri = '';
}

Или (самое простое) с помощью оператора NULL:

$uri = $_SERVER['QUERY_STRING'] ?? '';

Обратите внимание, что вы, вероятно, получаете эту ошибку и на Apache, просто не замечаете ее, потому что она обычно не выводится на консоль.

1 голос
/ 19 сентября 2019

Вы можете получить тот же результат, используя REQUEST_URI, если это возможно:

function getServerQueryString()
{
    if(isset($_SERVER['QUERY_STRING']))
    {
        return $_SERVER['QUERY_STRING'];
    }
    elseif(isset($_SERVER['REQUEST_URI']))
    {
        $xpl = explode('/', $_SERVER['REQUEST_URI']);

        $baseName = $xpl[array_key_last($xpl)];

        if(strpos($baseName, '?') !== false)
        {
             return substr($baseName, strpos($baseName, '?')+1);
        }
    }

    return null;
}

echo $uri = getServerQueryString();

Некоторые примеры:

pageName.php?par1=val1&par2=val2...
// Output:
par1=val1&par2=val2...

pageName.php?
// Output:
     // empty

/some/path
// Output:
     // empty
...