PHP 没有获取当前页面 url 的内置函数,获取当前页面 url 需要几个函数共同协作才行。网址一般由协议(http/https)、主机名(域名)、端口(http 默认是 80,https 默认是 443)、目录、文件、查询参数等构成,我们只要分别获取这几部分然后再组合起来就可以了。

协议

这个可由 $_SERVER['HTTPS']来判断,该值存在即为 https ,否则就是 http 。

$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://';

主机名

该部分比较简单,不需要判断,由$_SERVER['HTTP_HOST']获取

$host=$_SERVER['HTTP_HOST'];

端口

端口可用$_SERVER['SERVER_PORT']来获取

$port=$_SERVER['SERVER_PORT'];

目录、文件、查询参数

这部分用$_SERVER['REQUEST_URI']获取就可以了,包含请求的完整路径和查询字符串

$request=$_SERVER['REQUEST_URI'];

各部分都搞定后,剩下的就是组合起来了,一个完整的 URL 可以表示为:

$curUrl=$protocol.$host.":".$port.$request;

封装成函数

function getCurrentPageURL() {
    $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://"';
    $host     = $_SERVER['HTTP_HOST'];
    $request  = $_SERVER['REQUEST_URI'];
    return $protocol . $host . $request;
}

一般端口都是默认的,所以在封装函数时没有加端口,如果有需要,自行添加即可。

  • 使用示例
$curURL = getCurrentPageURL();
echo $currentURL;

通过以上方式就可以轻松地获取当前页面的完整 URL,并在需要时使用它了。