2012-12-08 7 views

答えて

21

$_SERVER['SERVER_NAME']ホスト構成(アパッチアパッチの.confファイルのすなわち)で定義されているサーバー名の値を与えます。

$_SERVER['HTTP_HOST']は、現在のリクエストが実行され、より直接的にリクエストに関連するドメイン名を提供します。

HTTP_HOSTは通常、リクエストに直接関係するという点で、ほとんどのアプリケーションでより便利ですが、SERVER_NAMEは、confファイル内の値を返すことができ、リクエストについて何も教えてくれません。

HTTP_HOSTSERVER_NAMEと異なる場合があります。 ServerNameがdomain.com、IPアドレスが1.2.3.4のApacheでホストが定義されているとします。

は、の2つの着信要求のURLを見て、これらの変数の違いをお見せしましょう:SERVER_NAMEはサーバの設定によって決定されるのに対し、

http://www.domain.com 
HTTP_HOST = www.domain.com 
SERVER_NAME = domain.com 

http://1.2.3.4 
HTTP_HOST = 1.2.3.4 
SERVER_NAME = domain.com 

だから、もう一度、HTTP_HOSTは、より多くのリクエストに結びついています。

+0

$ _SERVER ['HTTP_HOST'] "は、現在の要求が実行されているドメイン名を提供し、要求にもっと関連しています。 +1 感謝!!!! 公式の文書にリンクしてくれた人に感謝しますが、私にとっては複雑すぎる;) – Eman

+0

@Mike、それは単にサーバ設定に依存する 'SERVER_NAME'だけではありません。 ['HTTP_HOST'もそれに依存します。](http://stackoverflow.com/a/28889208/632951) – Pacerier

1

HTTP_HOSTは、クライアントによって送信されたHost:ヘッダーです。結果として、それは少し信頼性の低い可能性があります。 SERVER_NAMEは、ユーザーの入力に関係なく、サーバーの構成 によって決定されます。

動作の違いは微妙です。いくつかの良い例がここに示されてい:http://shiflett.org/blog/2006/mar/server-name-versus-http-host

The docs explain this well

「SERVER_NAME」は現在のスクリプトが実行されているサーバのホスト名。スクリプトが仮想ホスト上で実行されている場合、これはその仮想ホストに定義された値になります。

'HTTP_HOST'現在の要求のHost:ヘッダーの内容(存在する場合)。ホストの

+0

あなたの結論は間違っています。 'SERVER_NAME'はあなたのサーバの設定によって決まります。(実際には*これは*デフォルトの動作です)依存するようにしてください(http://stackoverflow.com/a/28889208/632951)。 – Pacerier

+0

ここでは、HTTP_HOSTとSERVER_NAMEの関係の例を紹介します。http://shiflett.org/blog/2006/mar/server-name-versus-http-host –

+0

はい、http:// stackoverflowと同じです.com/a/1459794/632951 'SERVER_NAME'はサーバの設定によって決定され、ユーザの入力に依存するようにすることができます。 – Pacerier

0

HTTP_HOST

内容:一つが存在する場合、現在の要求からヘッダ。

SERVER_NAME

現在のスクリプトが実行されているサーバのホスト名。スクリプトが仮想ホスト上で実行されている場合、これはその仮想ホストに定義された値になります。

http://php.net/manual/en/reserved.variables.server.php

+0

もちろん、出力は同じではありません。 – Pacerier

関連する問題