$_SERVER['SERVER_NAME'] gives the value of the server name as defined in host configuration (i.e for Apache the Apache .conf file).
$_SERVER['HTTP_HOST'] gives you the domain name through which the current request is being fulfilled and is more directly related to the request.
HTTP_HOST is typically more useful in most applications in that it relates directly to the request, whereas
SERVER_NAME could return whatever value is in the conf file and doesn't tell you anything about the request at all.
I will give you an example of how
HTTP_HOST might differ from
SERVER_NAME. Say you have an host defined in Apache with ServerName of
domain.com and an IP address of
Let's look at two incoming request URL's and show the difference between these variables:
http://www.domain.com HTTP_HOST = www.domain.com SERVER_NAME = domain.com http://220.127.116.11 HTTP_HOST = 18.104.22.168 SERVER_NAME = domain.com
So again, HTTP_HOST is tied more to the request, whereas SERVER_NAME is determined by server configuration.