如何使用PHP内置服务器获取PHP中的查询字符串?
How to get the query string in PHP with the PHP built-in server?
我正在开发一个 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
我试着用谷歌搜索,发现 this pull request 表明 PHP 的内置网络服务器中确实不存在这样的变量。
所以我的问题是:如果 运行 内置服务器 $_SERVER['QUERY_STRING']
不存在,我如何获取路由器的查询字符串?
您可以使用 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
$_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 上遇到此错误,只是您没有注意到它,因为它通常不会转储到控制台。
我正在开发一个 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
我试着用谷歌搜索,发现 this pull request 表明 PHP 的内置网络服务器中确实不存在这样的变量。
所以我的问题是:如果 运行 内置服务器 $_SERVER['QUERY_STRING']
不存在,我如何获取路由器的查询字符串?
您可以使用 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
$_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 上遇到此错误,只是您没有注意到它,因为它通常不会转储到控制台。