• ベストアンサー

$_SERVER["HTTP_HOST"]と、$_SEVER["DOCUMENT_ROOT"]の違いは?

PHP初心者で勉強中です。 書籍にて勉強をすすめていますが、 そもそも・・・と思い質問させていただきます。 $_SERVER["HTTP_HOST"]と,$SERVER["DOCUMENT_ROOT"]の違いは? といいますか、 どういった場合にどう使いわけてらいいのでしょうか? HTTP_HOSTのほうは、その使用例として 例えば $url = "http://" . $_SERVER["HTTP_HOST"] . dirname($_SERVER["SCRIPT_NAME"]) . "/******.php"; といった場合につうかうそうですが、 DOCUMENT_ROOTの方は、以下のようなSmartyのテンプレート格納ディレクトリの変更の際に使うようです。(書籍の一部を抜粋しました。) define("ROOT_DIR",$_SERVER['DOCUMENT_ROOT']."/.."); require_once("Smarty.class.php"); class MySmarty extends Smarty { function MySmarty (){ $this->template_dir = ROOT_DIR."/templates"; $this->compile_dir = ROOT_DIR."/templates_c";          ・          ・          ・ とても基本的な質問になっていると思いますが、 二つの違いだけでもご教授くださいませ。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.4

ANo.2です。 $_SERVER["DOCUMENT_ROOT"]の方、ちゃんと出力しましたか? 末尾に..がついてるのは定数ROOT_DIRの方だと思いますが。 ドキュメントルートはWeb上でのルートディレクトリを指します。これ以下のディレクトリやファイルはWeb上に公開することができます。 ところで、ROOT_DIRを..を連結して定義しているのは単にtemplatesディレクトリやtemplates_cディレクトリをC:\xampp直下に置きたかっただけでしょう。前述したようにドキュメントルート以下にあると普通にブラウザからアクセスできてしまいますからそれを避ける目的があるのだと思われます。 $_SERVER["HTTP_HOST"]はくどいようですがホスト名です。 http://www.weblio.jp/content/%E3%83%9B%E3%82%B9%E3%83%88%E5%90%8D どうもサーバ内部のパスとURLを混同しているように見受けられるのでそれを理解するのが近道かと思います。

n-yuuki
質問者

お礼

お礼が大変遅くなってしまい、申し訳御座いませんでした。 もう、ごちゃごちゃになってるのが自分でもわかります。。。 いちから出直す気持ちでがんばります。 たぶん理解したようなきもしますので、 これからどんどん進めると、さらにふかまるかと・・・。 とにかく、! 有難うございました。!!!

その他の回答 (3)

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.3

ANo.2です。 とりあえず実際に出力して内容を確かめてみましょう。 その結果を比較して何がわからないのか教えてください。

n-yuuki
質問者

補足

ご丁寧に有難うございます。 はい、 両方とも出力してパスを確認しました。 $SERVER["DOCUMENT_ROOT"] の方は、 C:/xampp/htdocs/.. となり、 $_SERVER["HTTP_HOST"] の方は、 localhost となりました。 ん~出力してみるとわかったような気もするんですが、 ・・・。 HTTP_HOSTの場合は、絶対パス的なパスが欲しいときに http://と絡めて使用したらいいんだなとわかりました。 つまり、サーバーの場所?を教えてくれてるんですよね? また、 DOCUMENT_ROOT の場合は、 そのDOCUMENT_ROOTの記述がある、PHPファイルまでのパス、 つまり、サーバー内部のディレクトリ関係(パス)を 教えてくれるってことですよね? あ!もう一つ疑問があります。 C:/xampp/htdocs/.. の最後の .. は何を意味しているのでしょうか? 一番最初に質問させてもらいました例に、 define("ROOT_DIR",$_SERVER['DOCUMENT_ROOT']."/.."); とあるのですが、/.. を連結して 定義されてるからだとは わかるのですが、 そもそも../は 「一階層上にあがる」というパスの指定方法ですよね。 なんで、$_SERVER['DOCUMENT_ROOT']" だけじゃなく、 ../ を連結するんでしょう・・・。 sumartyのテンプレートへのパスをつなげると、 C:/xampp/htdocs/../templates てな感じで、へんてこりんなテンプレートへのパスになってしまいます。(間の /../ はなんだろ? ) 申し訳ございません。 本当にややこしく お見苦しい質問のしかたで。。。 宜しくお願いします。

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.2

試しに出力してみれば分かると思いますが、明らかに違うものですよね。もしかしてDOCUMENT_ROOTではなくてSERVER_NAMEのことではありませんか? HTTP_HOSTはホスト名、DOCUMENT_ROOTはそのままドキュメントルートですという説明くらいしかないような気がしますが、一応マニュアルより説明個所を抜粋しておきます。 DOCUMENT_ROOT 現在実行されているスクリプトが存在するドキュメントルート ディレクトリです。サーバのコンフィグレーションファイルで 定義されています。 HTTP_HOST 現在のリクエストに Host: ヘッダが もしあればその内容。

n-yuuki
質問者

補足

いえ、DOCUMENT_ROOTのことです。 そうなんです、色々しらべても、 回答にかいてくださりました、文面しかみつからず・・・。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

$_SERVER["HTTP_HOST"] これはブラウザがアクセスするときに送るヘッダーの Host: ~ の部分が入ります。 内容はアクセスするURLがhttp://aaa/bbb/cccだとするとaaaの部分になります。 $SERVER["DOCUMENT_ROOT"] これはサーバのhtpd.confで設定された DocumentRoot "~" の内容になります。 Windowsだと DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs" みたいな設定になりますのでこの場合は $SERVER["DOCUMENT_ROOT"]は"C:/Program Files/Apache Group/Apache2/htdocs"になります。

n-yuuki
質問者

お礼

お礼が遅くなり申し訳ございません。 よくよく読み直してみると、 すごく的を得た回答を頂いておりました。 有難うございました!!

関連するQ&A