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

时间:2009-09-11 04:39:08

标签: php

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

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

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

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

您怎么看?

6 个答案:

答案 0 :(得分:39)

gethostname()怎么办?

编辑:根据您的环境,我认为这可能不是一个选项。它是PHP 5.3中的新功能。 php_uname('n')可以作为替代方案。

答案 1 :(得分:35)

PHP >= 5.3.0 use this

$hostname = gethostname();

PHP < 5.3.0 but >= 4.2.0 use this

$hostname = php_uname('n');

对于PHP&lt; 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')); 

答案 2 :(得分:2)

你也可以使用......

$hostname = getenv('HTTP_HOST');

答案 3 :(得分:1)

接受的答案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)

答案 4 :(得分:0)

php_uname但我不确定您希望客户端或服务器的主机名是什么主机名。

另外你应该使用基于cookie的方法

答案 5 :(得分:0)

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

php_uname('n');

gethostname();