`

[转]php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别

    博客分类:
  • PHP
 
阅读更多

关于这个问题,搜索引擎上搜到一大片的文章,有很多问题,在这找到一篇正确的说法: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用法

    $_SERVER['HTTP_HOST']; localhost:80 $_SERVER['SERVER_NAME'] — 返回当前主机名。 localhost $_SERVER['QUERY_STRING']-URL中第一个问号之后的所有内容 action=du&id=9 $_SERVER['REQUEST_URI'];--这里是i而...

    PHP $_SERVER详解

    $_SERVER[‘REMOTE_HOST’] //当前用户主机名 $_SERVER[‘REQUEST_URI’] //URL$_SERVER[‘REMOTE_PORT’] //端口。 $_SERVER[‘SERVER_NAME’] //服务器主机的名称。 $_SERVER[‘PHP_SELF’]//正在执行脚本的...

    php getsiteurl()函数

    复制代码 代码如下:function getsiteurl() { global $_SCONFIG; if(empty($_SCONFIG[‘siteallurl’])) { $uri = $_... return shtmlspecialchars(‘http://’.$_SERVER[‘HTTP_HOST’].substr($uri, 0, strrpos($uri,

    DX1.5 手机正式版

    $_G['siteurl'] = htmlspecialchars(‘http://’.$_SERVER['HTTP_HOST'].preg_replace(“/\/+(api)?\/*$/i”, ”, substr($_G['PHP_SELF'], 0, strrpos($_G['PHP_SELF'], ‘/’))).’/'); //站点目录 $_G['siteroot'...

    解析PHP获取当前网址及域名的实现代码

    //获取当前的域名:echo $_SERVER[‘SERVER_NAME’];//获取来源网址,即点击来到本页的上页网址echo $_SERVER[“HTTP_REFERER”];$_SERVER[‘REQUEST_URI’];//获取当前域名的后缀$_SERVER[‘HTTP_HOST’];//获取当前...

    php连接数据库代码应用分析

    php $db_host=’hostname is database server ‘; $db_database=’database name’; $db_username=’username’; $db_password=’password’; $connection=mysql_connect($db_host,$db_username,$db_password);//...

    PHP图片上传程序 CF Image Hosting Script 1.0.2v 汉化版.rar

    文件夹目录$imgurl = 'http://'.$_SERVER['HTTP_HOST'].preg_replace('/\/([^\/] ?)$/', '/', $_SERVER['PHP_SELF']).'u/'.$newname;里面的u/ 换成你修改后的即可Google广告/统计代码自行修改下...

    connect-db.rar_connect

    &lt;?php $Host="local host" $User="username" //... // Link to mySQL database server $Link_ID=mysql_connect($Host, $User, $Password) if (!$Link_ID) { halt("cannot use database: ".$User) }

    CF图片上传程序 TIGER修改版 v1.0.2.rar

    基于CF Image Hosting ...$imgurl = 'http://'.$_SERVER['HTTP_HOST'].preg_replace('/\/([^\/] ?)$/', '/', $_SERVER['PHP_SELF']).'u/'.$newname; 里面的u/ 换成你修改后的即可 Google广告/统计代码自行修改下...

    PHP网页游戏学习之Xnova(ogame)源码解读(五)

    $XNova_Host = $_SERVER['HTTP_HOST']; $XNova_Script = $_SERVER['SCRIPT_NAME']; $Uri_Array = explode ('/', $XNova_Script); // On vire le script array_pop($Uri_Array); $XNova_URI = implode ('/', $Uri_...

    PHP授权验证系统V2.1完整版 带补丁包.rar

    $db_name='host'; //数据库名 $db_charset='UTF8'; $safe = '123456';//此处为安全码,不走数据库 配置根目录下update.php $file_dir = 'http://你的域名/update'; //远程升级补丁存放目录 update为补丁存放目录 ...

    PHP授权验证系统V2.1完整版 带补丁包.zip

    $db_name=\\\\’host\\\\’; //数据库名 $db_charset=\\\\’UTF8\\\\’; $safe = \\\\’123456\\\\’;//此处为安全码,不走数据库 配置根目录下update.php $file_dir = \\\\’http://你的域名/update\\\\’; //...

    域名授权系统PHP源码 V2.7.0 支持盗版追踪

    php源码 最新漂亮简洁大气的域名授权系统PHP...$db_name=\’host\’; //数据库名 $db_charset=\’UTF8\’; $safe = \’123456\’;//此处为安全码,不走数据库 4、配置根目录下update.php $file_dir = \’http://你的域

    域名授权系统 自助授权系统 网络在线验证系统 在线升级源码

    $db_name=’host’; //数据库名 $db_charset=’UTF8′; $safe = ‘123456’;//此处为安全码,不走数据库 配置根目录下update.php $file_dir = ’http://www.sq.top/upgrade’; //远程升级补丁存放目录 upgrade...

    Thinkphp3和SqlServer2005完美整合

    Thinkphp3.0 + SqlServer 2005 本人由于最近项目中使用的数据库是Sql 2005的,经过测算官方的无法正常使用,所以,我就重新写了 底层的数据库抽象层。 php 5.2.6版本以下,可以用php官方的接口连接数据库,无需...

    PHP简洁函数(PHP简单明了函数语法)

    mysql_connect 建立一个与MySQL服务器的连接 语法 resource mysql_connect(string server[,string usingname[,string password[, bool new_link[,int client_flags]]]]) eg: 复制代码 代码如下: $DB_HOST =”...

    绝对好用的BI商务系统

    //define('__WEBCOMMON_ROOT', $_SERVER["DOCUMENT_ROOT"] .'/../web_common5.8'); //web_common在网站目录外 该语句需要设定正确的路径来调用ArthurXF框架底层。如果您的服务器为虚拟主机,您不需要进行任何设置; ...

    proxy-php:解决 CORS 限制的简单 HTTP 代理

    代理脚本获取 "/$PROXYNAME/" 之后的所有内容并将其附加到 $CMS_SERVERHOST 代理脚本向后端服务器上的结果 URL $CMS_SERVERHOST/xx 发出请求 响应被定向回浏览器 要求 PHP Apache mod_rewrite 模块 Apache mod_...

    反向代理Nginx

    Nginx反向代理 server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; root E:\yuehou\git\web-h5\dist; location / { try_files $uri $uri/ /index....

    Small HTTP server

    Mail server, DNS server, FTP server, Proxy server... All in one! This program will help you to open all the possibilities Internet can offer for your company - public site, provide Internet access ...

Global site tag (gtag.js) - Google Analytics