2011-03-23 101 views
69

可能重複:
HTTP_HOST vs. SERVER_NAMEPHP獲取域名

你好,

我想要得到的域名腳本運行的位置。這怎麼可以用PHP來完成? 我看到$_SERVER['HTTP_HOST']以及$_SERVER['SERVER_NAME']包含此信息。 該變量是否總能正常工作,我應該使用一個嗎?

謝謝。

+0

這確實回答了我有關使用SERVER_NAME而不是其他的問題的一部分,但這是在PHP中執行此操作的正確方法嗎? (是另一部分)謝謝。 – Francisc 2011-03-23 11:57:55

回答

74

以前在stackoverflow中已經提出了類似的問題。

在這裏看到:PHP $_SERVER['HTTP_HOST'] vs. $_SERVER['SERVER_NAME'], am I understanding the man pages correctly?

也看到這篇文章:http://shiflett.org/blog/2006/mar/server-name-versus-http-host

使用HTTP_HOST推薦,並 回落僅如果沒有設置 HTTP_HOST SERVER_NAME。他說, SERVER_NAME可能是 服務器,適用於各種原因不可靠的, 包括:

  • 沒有DNS支持
  • 配置錯誤
  • 背後負載均衡軟件

來源http://discussion.dreamhost.com/thread-4388.html

+0

HTTP_HOST對我來說似乎是對的。 SERVER_NAME運行良好,直到我們開始使用Docker,然後給我們「localhost」。請注意,HTTP_HOST也會爲您提供子域名。 – 2017-02-15 20:13:18

7

要回答你的問題,這應該工作,只要:

  • 你的HTTP服務器一起PHP通過這些值(我不知道任何不)
  • 你」再通過命令行(CLI)

但是,如果我沒有記錯,這些數值可以僞造的程度,所以最好不要依靠他們訪問腳本。

我個人的偏好是在apache2的虛擬主機set the domain name as an environment variable

# Virtual host 
setEnv DOMAIN_NAME example.com 

而且read it in PHP

// PHP 
echo getenv(DOMAIN_NAME); 

然而,這並不適用於所有情況。