有没有办法使用 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。
答案 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');