如何在php-cli中获取当前系统FQDN?

时间:2014-09-02 10:20:31

标签: php command-line-interface fqdn

有没有办法使用 php-cli 检索当前系统完全限定的域名

我正在寻找的是php函数来检索主机名-f正在做的事情:

$ hostname -f  #returns needed: system01.dev.lan

我试过以下:

php_uname('n') // returns: system01
gethostname() // returns: system01
gethostbyname(gethostname()) // returns ip address
gethostbyname(gethostname() . '.') // returns system01

$ _ SERVER剂量不存在(因为只有cli env)

同样,我知道我可以做到这一点

php -r "var_dump(shell_exec('hostname -f'));"

但是对于这个微不足道的任务,我认为php应该内置功能来检索fqdn。

3 个答案:

答案 0 :(得分:3)

您可以使用以下内容......

echo gethostbyaddr("127.0.0.1");

这可能会为您提供FQDN或localhost(请参阅下面的原因)。

...

即使这样可行,也不能保证,并且根本不可移植。

为什么?

您想要的基本上是IP地址127.0.0.1反向DNS查找。如果您使用hostname -f(如果在主机名实现中可用)或gethostbyaddr("127.0.0.1"),则无关紧要,系统必须始终占用解析程序以查找IP地址的FQDN

现在,如果您的/etc/hosts中有IP地址的FQDN条目,则解析程序可以在本地查找FQDN,否则必须进行反向DNS查找。

这是设计,你无能为力。完全合格的域名是DNS的业务,本地主机从未应该知道它们。即使/etc/hosts条目更像是一个黑客。 (虽然很常见,许多邮件服务器也需要它。)

这就是解决方案无法移植的原因:如果您的应用程序部署在127.0.0.1文件中没有/etc/hosts的FQDN的服务器上,那么它将只返回简单的主机名。

显然,DNS服务器无法为您提供127.0.0.1查找的域名。

PHP gethostbyaddr('127.0.0.1')hostname -f之间有一点区别:PHP实现将第一个名称分配给127.0.0.1,无论是否为FQDN; hostname -f尝试在名称中查找FQDN并使用它找到的第一个。

shell_exec方法似乎有效,但如果您需要避免使用shell命令,可以尝试直接在PHP中读取和解析/etc/hosts;因为语法很简单。

答案 1 :(得分:3)

gethostbyaddr(gethostbyname(gethostname()));

这会为我返回FQDN,而其他所有内容只返回localhost或hostname。

答案 2 :(得分:1)

对于debian默认配置,可以使用以下命令检索fqdn:

gethostbyaddr('127.0.1.1');