📜  在 php 中获取完整的 url(1)

📅  最后修改于: 2023-12-03 15:07:45.795000             🧑  作者: Mango

在 PHP 中获取完整的 URL

在 Web 开发中,获取当前页面的 URL 是常见需求,在 PHP 中实现也很简单。本篇文章将介绍如何在 PHP 中获取完整的 URL。

方法 1: 使用 $_SERVER['REQUEST_URI']

PHP 中内置了一个名为 $_SERVER 的超全局数组,它包含了服务器运行环境的各种信息,包括当前页面的 URL。我们可以使用 $_SERVER['REQUEST_URI'] 来获取当前页面的 URI,然后再获取当前页面的协议、主机名等信息,从而拼接成完整的 URL。

代码如下:

// 获取协议
$protocol = empty($_SERVER['HTTPS']) ? 'http://' : 'https://';

// 获取主机名
$host = $_SERVER['HTTP_HOST'];

// 获取当前页面的 URI
$uri = $_SERVER['REQUEST_URI'];

// 拼接成完整的 URL
$url = $protocol . $host . $uri;

以上代码中,我们首先通过判断 $_SERVER['HTTPS'] 是否为空来确定请求的协议是 HTTP 还是 HTTPS。接着,通过 $_SERVER['HTTP_HOST'] 获取主机名,再通过 $_SERVER['REQUEST_URI'] 获取当前页面的 URI,最后将它们拼接起来即可得到完整的 URL。

方法 2: 使用 parse_url() 函数

除了方法 1,我们还可以使用 PHP 内置的 parse_url() 函数来解析当前页面的 URL,并获取其中的各个部分,最终拼接成完整的 URL。

代码如下:

// 获取当前页面的 URL
$url_parts = parse_url($_SERVER['REQUEST_URI']);

// 获取协议
$protocol = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http';

// 获取主机名
$host = $_SERVER['HTTP_HOST'];

// 拼接成完整的 URL
$url = $protocol . '://' . $host . $url_parts['path'];
if (!empty($url_parts['query'])) {
    $url .= '?' . $url_parts['query'];
}

以上代码中,我们首先通过 parse_url() 函数解析当前页面的 URL,然后分别获取其中的协议、主机名和路径等信息。最后根据这些信息将它们拼接起来即可得到完整的 URL。需要注意的是,如果 URL 中包含查询参数,还需要特殊处理。

方法 3: 使用 $_SERVER['HTTP_REFERER']

还有一种获取完整 URL 的方法是使用 $_SERVER['HTTP_REFERER'],该超全局变量会包含该页面被访问前的 URL。

代码如下:

$url = $_SERVER['HTTP_REFERER'];

以上代码中,我们直接使用 $_SERVER['HTTP_REFERER'] 即可获取完整的 URL。需要注意的是,该方法有时会受到浏览器设置的 Referrer-Policy 而不起作用。

总结

以上介绍了三种获取完整 URL 的方法,分别是使用 $_SERVER['REQUEST_URI']parse_url() 函数和 $_SERVER['HTTP_REFERER']。其中,方法 1 和方法 2 可以较好地兼容不同的环境和浏览器设置,而方法 3 则有时不太可靠。

建议根据实际业务需求选择相应的方法来获取完整的 URL。