[英]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.