关于这个问题,搜索引擎上搜到一大片的文章,有很多问题,在这找到一篇正确的说法:http://mimiz.cn/index.php/php/php-http_host-server_name-difference/
转载一下
最近在开发站群软件,用到了根据访问域名判断子站点的相关问题。PHP获取当前域名有两个变量 HTTP_HOST 和 SERVER_NAME,我想知道两者的区别以及哪个更加可靠。
首先我想说,百度上那些转来转去的文章都是扯淡!
有说相同的,有说不同的,都没说明原因,没经过验证就互相转来转去的,浪费观众时间。
下面说说本人经过亲自验证 + 查阅官方文档 + 官方BUG列表 + 官方邮件列表 + sitepoint + webmasterworld + google的总结:
相同点:
当满足以下三个条件时,两者会输出相同信息。
1. 服务器为80端口
2. apache的conf中ServerName设置正确
3. HTTP/1.1协议规范
不同点:
1. 通常情况:
_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。
_SERVER["SERVER_NAME"] 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值。
2. 当服务器为非80端口时:
_SERVER["HTTP_HOST"] 会输出端口号,例如:mimiz.cn:8080
_SERVER["SERVER_NAME"] 会直接输出ServerName值
因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT
3. 当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时:
httpd.conf配置如下:
<virtualhost *>
ServerName mimiz.cn
ServerAlias www.mimiz.cn
</virtualhost>
客户端访问域名www.mimiz.cn
_SERVER["HTTP_HOST"] 输出 www.mimiz.cn
_SERVER["SERVER_NAME"] 输出 mimiz.cn
所以,在实际程序中,应尽量使用_SERVER["HTTP_HOST"] ,比较保险和可靠。
原文网址:http://it.oyksoft.com/post/3158/
相关推荐
在PHP开发中,`$_SERVER`是一个预定义的全局变量,它包含了服务器和执行环境的信息。这些信息对理解客户端请求、服务器配置以及处理HTTP头部非常重要。以下将详细介绍`$_SERVER`中的一些常用元素及其应用场景。 ###...
$_SERVER['HTTP_HOST']; localhost:80 $_SERVER['SERVER_NAME'] — 返回当前主机名。 localhost $_SERVER['QUERY_STRING']-URL中第一个问号之后的所有内容 action=du&id=9 $_SERVER['REQUEST_URI'];--这里是i而...
5. `$_SERVER["HTTP_HOST"]`:包含HTTP请求头中的Host字段,可能包含端口号。在本例中,它同样是`www.phppx.com`。 6. `$_SERVER["HTTP_REFERER"]`:表示用户是从哪个页面链接过来的,但请注意,这个字段可能被...
掌握`$_SERVER`中的各种参数及其含义对于理解和调试Web应用至关重要。 #### 常用参数详解 1. **`PHP_SELF`** - **描述**:当前正在执行脚本的文件名,与文档根目录(`DOCUMENT_ROOT`)相关。 - **示例**:假设...
在 PHP 编程语言中,`$_SERVER` 是一个预定义的全局数组变量,用于存储有关 HTTP 服务器和执行环境的信息。通过 `$_SERVER` 数组,开发人员可以访问到各种有用的服务器变量,这些变量对于理解客户端请求以及服务器...
在PHP编程中,$_SERVER是一个关联数组,它包含了诸如头信息、路径和脚本位置等服务器和执行环境的信息。这个超全局变量能够提供有关服务器和执行环境的丰富信息,对于开发Web应用和服务至关重要。在本文中,我们将...
`$_REQUEST`是一个全局数组,包含`$_GET`、`$_POST`和`$_COOKIE`中的所有变量,使得可以轻松地获取请求中的参数。在这里,`$_REQUEST['name']`指的是名为`name`的请求参数的值。 以上就是`$_SERVER`预定义数组中几...
`$_SERVER`是PHP中的一个超全局数组,它包含了服务器环境和HTTP请求的相关信息,是开发者获取服务器状态、用户信息和请求详情的重要工具。本文将详细介绍`$_SERVER`数组中的各个键及其对应的值。 1. `$_SERVER['...
$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']; ``` ### 解析: - **`$_SERVER['HTTP_HOST']`**:表示客户端通过HTTP协议发送请求时提供的主机名或IP地址与端口号...
在PHP编程中,$_SERVER是一个超全局变量,它包含了诸如头信息(header)、路径(path)和脚本位置(script locations)等信息。了解$_SERVER提供的参数可以帮助开发人员获取关于当前执行环境的有用数据,例如客户端信息、...
例如,`$_SERVER['PHP_SELF']`返回当前执行脚本的文件名,而`$_SERVER['SERVER_NAME']`则给出服务器的主机名。`$_SERVER['HTTP_HOST']`通常用于识别通过哪个域名访问的脚本,这在处理虚拟主机环境时尤为重要。`$_...
$currentUrl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; ``` 2. **处理REQUEST_URI**: 在某些情况下,可能需要对`REQUEST_URI`进行额外的处理。例如,在UCHome系统中,可以通过以下代码片段来...
服务器变量 $_SERVER 是 PHP 中的一个超全局数组,用于存储关于 headers、路径、脚本位置等服务器和执行环境的信息。该变量在每个脚本执行时自动被创建,无需开发者手动初始化。$_SERVER 数组中包含的元素很多,下面...
- `$_SERVER['HTTP_HOST']`:包含了服务器的主机名和端口,如`"localhost"`或`"www.example.com:8080"`。 - `$_SERVER['HTTP_REFERER']`:记录了用户的上一个页面地址,但这个信息可以被浏览器禁用或者修改,所以不...
这个示例中,`$_SERVER['HTTP_HOST']`获取服务器的主机名,而`$_SERVER['REQUEST_URI']`则获取请求的资源URI。通过将这两个值拼接起来,就可以得到完整的请求URL。 以上内容详细介绍了`$_SERVER`超全局变量中的一些...
- `$_SERVER['SERVER_NAME']`: 获取当前服务器的主机名。 - `$_SERVER['SERVER_SOFTWARE']`: 获取服务器标识字符串。 - `$_SERVER['REQUEST_METHOD']`: 获取请求方法(GET、POST 等)。 - `$_SERVER['QUERY_...
$_SERVER['SERVER_NAME'] - **作用**:返回当前主机名。 - **应用场景**:用于确定脚本运行在哪个服务器上。 - **示例**: ```php echo "当前主机名为: " . $_SERVER['SERVER_NAME']; ``` ##### 6. $_SERVER['...