我正在开发一个mvc web应用程序,为了让它的路由器正常工作,我需要解析查询字符串,首先我需要将url加载到一个变量中。如何使用php的内置服务器实现这一点?
目前我使用的是php 7.3.9,但据我所知,这个问题在内置服务器的所有版本中都是持久的。
如果我使用apache运行这个应用程序,一切都很简单,我需要做的就是
$uri = $_SERVER['QUERY_STRING'];
我很乐意去,一切都很好。
但是,如果我使用php的内置web服务器,我会收到一个错误消息:
Undefined index: QUERY_STRING in /path_to_my_project/public/index.php on line 22
我在google上搜索了一下,发现this pull request表明php内置的web服务器中确实不存在这样的变量。
所以我的问题是:如果我运行的是不存在$_SERVER['QUERY_STRING']的内置服务器,如何获取路由器的查询字符串?

最佳答案

$_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 = '';
}

或者(最简单)通过空合并运算符:
$uri = $_SERVER['QUERY_STRING'] ?? '';

注意,您可能在apache上也遇到了这个错误,只是没有注意到它,因为它通常不会被转储到控制台。

09-10 10:43
查看更多