簡體   English   中英

如何在php-cli中獲取當前系統FQDN?

[英]How to get current system FQDN in php-cli?

有沒有辦法使用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。

gethostbyaddr(gethostbyname(gethostname()));

這會為我返回FQDN,而其他所有內容只返回localhost或hostname。

你可以使用以下......

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條目也更像是一個hack。 (雖然是常見的,但許多郵件服務器也需要它。)

這就是解決方案不可移植的原因:如果您的應用程序部署在/etc/hosts文件中沒有127.0.0.1 FQDN的服務器上,那么它將只返回簡單的主機名。

顯然,DNS服務器無法為您提供127.0.0.1查找的域名。

PHP的gethostbyaddr('127.0.0.1')hostname -f之間有一點區別:PHP實現將第一個名稱分配給127.0.0.1,無論是否為FQDN; hostname -f嘗試在名稱中查找FQDN並使用它找到的第一個FQDN。

shell_exec方法似乎有效,但是如果你需要避免shell命令,你可以嘗試直接在PHP中讀取和解析/etc/hosts ; 因為語法很簡單。

對於debian默認配置,可以使用以下命令檢索fqdn:

gethostbyaddr('127.0.1.1');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM