プロが教えるわが家の防犯対策術!

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";
         ・
         ・
         ・

とても基本的な質問になっていると思いますが、
二つの違いだけでもご教授くださいませ。
宜しくお願いします。

A 回答 (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% …

どうもサーバ内部のパスとURLを混同しているように見受けられるのでそれを理解するのが近道かと思います。
    • good
    • 0
この回答へのお礼

お礼が大変遅くなってしまい、申し訳御座いませんでした。
もう、ごちゃごちゃになってるのが自分でもわかります。。。
いちから出直す気持ちでがんばります。

たぶん理解したようなきもしますので、
これからどんどん進めると、さらにふかまるかと・・・。

とにかく、! 有難うございました。!!!

お礼日時:2008/11/04 11:47

ANo.2です。



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

この回答への補足

ご丁寧に有難うございます。
はい、
両方とも出力してパスを確認しました。

$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

てな感じで、へんてこりんなテンプレートへのパスになってしまいます。(間の /../ はなんだろ? )

申し訳ございません。
本当にややこしく お見苦しい質問のしかたで。。。
宜しくお願いします。

補足日時:2008/10/10 14:52
    • good
    • 0

試しに出力してみれば分かると思いますが、明らかに違うものですよね。

もしかしてDOCUMENT_ROOTではなくてSERVER_NAMEのことではありませんか?

HTTP_HOSTはホスト名、DOCUMENT_ROOTはそのままドキュメントルートですという説明くらいしかないような気がしますが、一応マニュアルより説明個所を抜粋しておきます。

DOCUMENT_ROOT
現在実行されているスクリプトが存在するドキュメントルート ディレクトリです。サーバのコンフィグレーションファイルで 定義されています。

HTTP_HOST
現在のリクエストに Host: ヘッダが もしあればその内容。

この回答への補足

いえ、DOCUMENT_ROOTのことです。

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

補足日時:2008/10/10 10:12
    • good
    • 0

$_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"になります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/04 11:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!