我正在开发一个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上也遇到了这个错误,只是没有注意到它,因为它通常不会被转储到控制台。