php实现pathinfo
获取当前请求的 PathInfo
在PHP中,可以通过$_SERVER['PATH_INFO']获取当前请求的PathInfo部分。PathInfo是指URL中脚本名称之后的部分,通常用于路由或参数解析。
if (isset($_SERVER['PATH_INFO'])) {
$pathInfo = $_SERVER['PATH_INFO'];
echo "PathInfo: " . $pathInfo;
} else {
echo "No PathInfo detected.";
}
手动解析 PathInfo
如果服务器未自动设置$_SERVER['PATH_INFO'],可以通过解析$_SERVER['REQUEST_URI']手动获取PathInfo。

$requestUri = $_SERVER['REQUEST_URI'];
$scriptName = $_SERVER['SCRIPT_NAME'];
// 移除查询字符串
$requestUri = strtok($requestUri, '?');
// 获取PathInfo
if (strpos($requestUri, $scriptName) === 0) {
$pathInfo = substr($requestUri, strlen($scriptName));
} else {
$pathInfo = $requestUri;
}
echo "PathInfo: " . $pathInfo;
使用 parse_url 解析 URL
parse_url函数可以解析URL的各个部分,结合$_SERVER变量可以提取PathInfo。

$requestUri = $_SERVER['REQUEST_URI'];
$parsedUrl = parse_url($requestUri);
if (isset($parsedUrl['path'])) {
$pathInfo = str_replace($_SERVER['SCRIPT_NAME'], '', $parsedUrl['path']);
echo "PathInfo: " . $pathInfo;
}
处理带子目录的 PathInfo
如果应用部署在子目录下,需要调整脚本路径的匹配逻辑。
$basePath = dirname($_SERVER['SCRIPT_NAME']);
$requestUri = $_SERVER['REQUEST_URI'];
if (strpos($requestUri, $basePath) === 0) {
$pathInfo = substr($requestUri, strlen($basePath));
echo "PathInfo: " . $pathInfo;
}
框架中的 PathInfo 处理
许多PHP框架(如Laravel、Symfony)内置了PathInfo解析功能。以Laravel为例,可以通过请求对象获取PathInfo。
use Illuminate\Http\Request;
$request = Request::capture();
$pathInfo = $request->getPathInfo();
echo "PathInfo: " . $pathInfo;
注意事项
- PathInfo的可用性取决于服务器配置(如Apache的
AcceptPathInfo设置)。 - 在Nginx等服务器中可能需要额外配置才能支持PathInfo。
- 手动解析时需考虑URL编码和特殊字符处理。






