使用$_SERVER['HTTP_HOST']时需注意的

在php中,我们一般通过$_SERVER[‘HTTP_HOST‘]来活得URL中网站的域名或者ip地址。

$_SERVER[‘HTTP_HOST‘]在客户的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。

究其原因,是因为,客户的公司通过一台服务器连接至因特网,而我们的程序所在的服务器,是通过域名映射出来的,也就是中间有个“代理”的过程。因此$_SERVER[‘HTTP_HOST‘]在这样的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。

有时项目移交到某些服务器时会出错这时将$_SERVER[‘HTTP_HOST‘]替换成:

$host = isset($_SERVER[‘HTTP_X_FORWARDED_HOST‘]) ? $_SERVER[‘HTTP_X_FORWARDED_HOST‘] : (isset($_SERVER[‘HTTP_HOST‘]) ? $_SERVER[‘HTTP_HOST‘] : ‘‘);

即可。

使用$_SERVER['HTTP_HOST']时需注意的

时间: 2024-10-10 02:34:20

使用$_SERVER['HTTP_HOST']时需注意的的相关文章

$_SERVER["HTTP_HOST"]和$_SERVER["SERVER_NAME"]

开发站群软件,用到了根据访问域名判断子站点的相关问题,PHP获取当前域名有两个变量 $_SERVER['HTTP_HOST'] 和 $_SERVER['SERVER_NAME'],两者的区别以及哪个更加可靠? 相同点: 当满足以下三个条件时,两者会输出相同信息. 1.服务器为80端口 2.apache的conf中ServerName设置正确 3.HTTP/1.1协议规范 不同点: 1.通常情况: $_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的H

PHP获取当前域名$_SERVER['HTTP_HOST']和$_SERVER['SERVER_NAME']的区别

开发站群软件,用到了根据访问域名判断子站点的相关问题,PHP获取当前域名有两个变量 $_SERVER['HTTP_HOST'] 和 $_SERVER['SERVER_NAME'],两者的区别以及哪个更加可靠? 相同点: 当满足以下三个条件时,两者会输出相同信息. 1.服务器为80端口 2.apache的conf中ServerName设置正确 3.HTTP/1.1协议规范 不同点: 1.通常情况: $_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的H

$_SERVER[‘HTTP_HOST‘]和$_SERVER[‘SERVER_NAME‘]

PHP获取当前域名有两个变量 $_SERVER['HTTP_HOST'] 和 $_SERVER['SERVER_NAME'],两者的区别以及哪个更加可靠? 相同点: 当满足以下三个条件时,两者会输出相同信息. 1. 服务器为80端口 2. apache的conf中ServerName设置正确 3. HTTP/1.1协议规范 不同点: 1. 通常情况: $_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息. $_SERVER[&qu

程序开发使用地图API时需注意的问题(转)

最近在做一个基于地点提醒的移动应用,当初考虑大家都心知肚明的原因,谨慎的选择了百度地图,现在想想其实完全没有必要,好的应用本来就不分国界的,最后可能还是得换回Google地图.毕竟Google地图在技术和成熟度上完胜百度地图,当然百度也在慢慢追赶,希望有一天大家都能用上咱们自己的好用的地图服务. 现在把碰到的问题和解决方案罗列一下: 版权:如果是大量商用的话,还是得事先注意一下版权意识,不然到时候就很被动了.两者的免费版都不允许商业应用,具体可以看这里Google Maps API,百度API常

服务器配置,负载均衡时需配置MachineKey

服务器配置,负载均衡时需配置MachineKey https://blog.csdn.net/liuqiao0327/article/details/54018922 Asp.Net应用程序中为什么要MachineKey?如何生成MachineKey? 如果你的Asp.Net程序执行时碰到这种错误:"验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate."那么说明你没有

Java编程提高性能时需注意的地方

最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源和总结一些在java编程中尽可能做到的一些地方 1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资源的并发访问 第二,控制实例的产生,以达到节约资源的目的 第三,控制

Effective C++ 条款51 编写new和delete时需固守常规

1. 实现定制的operator new和operator delete需要满足一定的要求. 以operator new而言:实现一致性operator new必须返回正确的值;内存不足时必得调用new-handling函数;必须有对付零内存需求的准备;需避免不慎掩盖正常形式的new;如果有能力供应客户申请的内存,就返回一个指针指向该内存,反之就遵循条款49的规则并抛出bad_alloc异常;应该内含一个无限循环,知道成功分配内存或new-handling完成其功能...... 以上的要求中"必

《Effective C++》:条款51:编写new和delete时需固守常规

条款 50已经说明为什么要写自己的operator new和operator delete,本条款解释在编写时遵循什么守则. 从operator new开始.operator new必须返回正确的值,内存不足时必须调用new-handling函数,要有对付零内存需求的准备,避免不慎掩盖正常形式的new–这比较偏近class接口的要求而非实现要求.正常形式的new描述与条款 52. operator new如果申请内存成功,就返回指向那块内存的指针,失败则遵循条款 49描述,抛出bad_alloc

Boost.deadline_timer实现定时器功能时需注意的时区问题

利用boost.deadline_timer() 可以很方便的实现定时器功能,详情参考:http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/reference/deadline_timer.html 比如等待指定的时间数: boost::asio::io_service ioservice; boost::asio::deadline_timer tm(ioservice, boost::posix_time::seconds(5))