2010年4月30日星期五

php中 HTTP_HOST 和 SERVER_NAME 的区别(转)

转:http://www.akii.org/2009-01/php-in-the-difference-between-http_host-and-server_name/

PHP的SERVER保留变量中HTTP_HOST 和 SERVER_NAME经常是一样的,原因是服务器端口是80,
那么HTTP_HOST将省略不显示,而HTTP服务的默认端口就是80,所以大多数情况下,HTTP_HOST都没有显示这个端口号。

而如果使用的是ssl链接,那么端口号将被显示出来。

如果你的程序中有设定端口的功能,则可以考虑使用SERVER_NAME

否则,建议使用HTTP_HOST

PHPBB中有一句很经典的语句:

$server_name = (!empty($_SERVER['HTTP_HOST'])) ? strtolower($_SERVER['HTTP_HOST']) : ((!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : getenv('SERVER_NAME'));

所以HTTP_HOST = SERVER_NAME:SERVER_PORT