用php获取主机名的最佳方法

我有一个PHP应用程序安装在几台服务器和我们所有的开发人员笔记本电脑上。 我需要一个快速和可靠的方式来获得服务器的主机名或其他一些独特和可靠的系统标识符。 以下是我们到目前为止的想法:

<? $hostname = (!empty($_ENV["HOSTNAME"])) ? $_ENV["HOSTNAME"] : env('HOSTNAME'); ?>

<? $hostname = gethostbyaddr($_SERVER['SERVER_ADDR']); ?>

<? $hostname = exec('hostname'); ?>

你怎么看?

什么gethostname() ?

编辑:这可能不是我想的一个选项,取决于你的环境。 这是PHP 5.3中的新function。 php_uname('n')可能会作为替代。

对于PHP> = 5.3.0使用这个 :

$hostname = gethostname();

对于PHP <5.3.0但是> = 4.2.0使用这个 :

$hostname = php_uname('n');

对于PHP <4.2.0使用这个:

 $hostname = getenv('HOSTNAME'); if(!$hostname) $hostname = trim(`hostname`); if(!$hostname) $hostname = exec('echo $HOSTNAME'); if(!$hostname) $hostname = preg_replace('#^\w+\s+(\w+).*$#', '$1', exec('uname -a')); 

你也可以使用…

 $hostname = getenv('HTTP_HOST'); 

接受的答案gethostname()可能实际上给你不准确的价值,在我的情况

 gethostname() = my-bacbook-pro (incorrect) $_SERVER['host_name'] = mysite.git (correct) 

来自gethostname()的值是错误的。 小心一点。

更新通过评论纠正

主机名给你的电脑名称,而不是网站名称,我的坏。 我在本地机器上的结果是

 gethostname() = my-bacbook-pro (which is my machine name) $_SERVER['host_name'] = mysite.git (which is my website name) 

php_uname,但我不知道你想要什么主机名的客户端或服务器的主机名。

再加上你应该使用基于cookie的方法

我在共享主机上运行PHP版本5.4,这两个都成功返回相同的结果:

 php_uname('n'); gethostname();