有没有办法使用 php-cli 检索当前系统的完全限定域名?
我正在寻找的是 php 函数来检索 hostname -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。
最佳答案
您可以使用以下...
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
;因为语法很简单。关于php - 如何在 php-cli 中获取当前系统 FQDN?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25621068/