PHP如何获取当前访问域名

来源:程序开发作者:上海SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《PHP如何获取当前访问域名》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《PHP如何获取当前访问域名》有用,将其分享出去将是对创作者最好的鼓励。

在PHP开发中,获取当前访问域名是构建动态链接、判断访问环境、配置资源路径等场景下的基础需求,我们可以通过全局数组中的相关参数快速实现这个功能。

PHP如何获取当前访问域名

常用获取域名的方法

1. 使用$_SERVER['HTTP_HOST']

$_SERVER['HTTP_HOST']是获取当前访问域名最常用的方式,它的值来自HTTP请求头中的Host字段,会包含用户实际访问的域名和端口(如果端口不是默认的80或443)。

<?php
// 获取当前访问域名
$domain = $_SERVER['HTTP_HOST'];
echo $domain;
// 如果访问地址是http://www.ipipp.com:8080/index.php
// 输出结果为 www.ipipp.com:8080
?>

2. 使用$_SERVER['SERVER_NAME']

$_SERVER['SERVER_NAME']的值来自服务器配置文件,通常是Web服务器中配置的服务器名称,默认情况下不包含端口信息,且不受用户请求头的影响。

<?php
$serverName = $_SERVER['SERVER_NAME'];
echo $serverName;
// 如果服务器配置的主机名是www.ipipp.com
// 输出结果为 www.ipipp.com
?>

两种方法的差异对比

对比项$_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME']
数据来源HTTP请求头的Host字段Web服务器配置文件
是否包含端口非默认端口时会包含默认不包含
是否可被用户修改是(请求头可被伪造)否(由服务器配置决定)
适用场景需要获取用户实际访问的域名需要固定的服务器配置域名

获取完整访问地址的方法

如果需要获取包含协议头的完整访问地址,可以结合$_SERVER['REQUEST_SCHEME']或者$_SERVER['HTTPS']来判断当前访问协议,再拼接域名。

<?php
// 判断当前访问协议
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
    $scheme = 'https';
} else {
    $scheme = $_SERVER['REQUEST_SCHEME'] ?? 'http';
}
// 获取域名
$domain = $_SERVER['HTTP_HOST'] ?? '';
// 拼接完整访问地址
$fullUrl = $scheme . '://' . $domain;
echo $fullUrl;
// 如果访问的是https://www.ipipp.com/test.php
// 输出结果为 https://www.ipipp.com
?>

注意事项

  • 在CLI模式下运行时,$_SERVER数组中通常没有HTTP_HOST和SERVER_NAME等参数,需要提前做好兼容处理。
  • 如果服务器配置了多个虚拟主机,SERVER_NAME的值可能和实际访问的域名不一致,此时优先使用HTTP_HOST。
  • 因为HTTP_HOST来自请求头,存在被伪造的可能,如果用于安全校验场景,需要额外做合法性验证。
  • 部分代理服务器环境下,HTTP_HOST可能被修改,需要确认代理配置是否透传了原始的Host头。

通用封装示例

我们可以把获取域名的逻辑封装成一个通用函数,适配不同的使用场景。

<?php
/**
 * 获取当前访问域名
 * @param bool $withScheme 是否包含协议头
 * @return string
 */
function getCurrentDomain($withScheme = false) {
    // CLI模式下返回空字符串
    if (PHP_SAPI === 'cli') {
        return '';
    }
    $domain = $_SERVER['HTTP_HOST'] ?? $_SERVER['SERVER_NAME'] ?? '';
    if ($withScheme) {
        $scheme = 'http';
        if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
            $scheme = 'https';
        } elseif (isset($_SERVER['REQUEST_SCHEME'])) {
            $scheme = $_SERVER['REQUEST_SCHEME'];
        }
        $domain = $scheme . '://' . $domain;
    }
    return $domain;
}

// 调用示例
echo getCurrentDomain(); // 输出域名
echo getCurrentDomain(true); // 输出带协议的完整域名
?>

PHP获取域名HTTP_HOSTSERVER_NAMEREQUEST_SCHEME修改时间:2026-06-30 16:27:15

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。