• 締切済み

define でのルートディレクトリの定義について・・・。パスが納得できません。

宜しくお願いします。 Smarty を使用して PHPを勉強しています。 Smartyのデフォルトを変更しようと、 「MySmarty」として新規にクラスを作成しました。 ソースの先頭で、 define("ROOT_DIR",$_SERVER['DOCUMENT_ROOT']."/.."); として、ROOT_DIRにルートディレクトリまでのパスを記憶させています。 全ソースは下記をごらんくらさい。 そこで、  define("ROOT_DIR",$_SERVER['DOCUMENT_ROOT']."/.."); にある、最後の ."/.."); が納得いきません。。。 最初の . ピリオドは連結のためのものだとわかりますが、 あとの/.. はディレクトリの階層をあげる指示ですよね? てなると、クラスの定義のなかで使用するルートディレクトリへのパス が、 おかしく思えてきます。書籍の通りにやっているので、 この通りにやるとうまくいっていますが、自分的になっとくがいかなく・・。 ソースは下記のようになってます。 特に $this->template_dir  のテンプレートディレクトリへのパスを 再設定しているところですが、 ROOT_DIR."/templates" ということは、ルート/../templates  となりますよね? 作業フォルダの図はこの通りです。↓ C:\xampp   |   libs     |-MySmarty.class.php (下記のソースファイル)   |   |   templates       |-input.tpl   |  templates_c <省略> なんとなくですが、ルート/../templates  ではなくて、 ルート/templates なようなきがします。 わかりにくい説明だったかもしてませんが、何卒宜しくお願いいたします。 ______________________________ 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"; $this->left_delimiter = "{{"; $this->right_delimiter = "}}"; $this->default_modifiers = array('escape'); $this->Smarty(); } } ____________________________

みんなの回答

  • _chihiro_
  • ベストアンサー率63% (26/41)
回答No.1

おそらく/templatesディレクトリと/templates_cディレクトリを、Apacheで設定したドキュメントルート(DocumentRoot)の一つ上の階層に設置しているのだと思います。 なので define("ROOT_DIR",$_SERVER['DOCUMENT_ROOT']."/.."); $this->template_dir = ROOT_DIR."/templates"; $this->compile_dir = ROOT_DIR."/templates_c"; という記述なのでしょう。 参考にされている書籍は、どの環境でも動くように質問者さんが気になるような書き方をしているのだと思います。 記述が気になるようでしたら、フルパスで記述すればよろしいのでは? 例) $this->templates_dir = "/PATH/TO/templates"; $this->compile_dir = "/PATH/TO/templates_c"; 最初の define("ROOT_DIR", xxxx); は、「ROOT_DIR」を定数として定義しておきたいかどうかで自由に記述すればよいと思います。

n-yuuki
質問者

補足

お礼を申し上げるのが大変遅くなってしまい申し訳ございません。 ご丁寧に回答いただきとても感謝しております。 いろいろ調べまくって、なんとなくわかってきた気がするのですが、 1点だけ納得できない箇所がありまして・・・。 $this->template_dir = ROOT_DIR . "/templates"; とコードがあるのですが、 これはつまり、 C:/xampp/htdocs/../templates ということなのでしょうか? $_SERVER['DOCUMENT_ROOT'] が返すのは、 ●xampp/htdocs となるルートディレクトリですよね。 そもそも、【 xampp/htdocs/../templates 】 という相対パスの指定のしかたが変だとおもいました。 (これで合っているんでしょうけど・・・。) いま思うのは、  【 ../templates 】 とだけなら、 下記にあります<MySmarty.class.php >からの相対パスだと 納得できるのですが・・・。 どうして、'DOCUMENT_ROOT'がパスの先頭にくっつくのでしょうか?・・・。再度ご教授くださると大変ありがたいです。 よろしくお願いいたします。   C:\xampp   |-htdocs   |  |-phplesson   |    |-libs   | |-MySmarty.class.php (←このファイルからのパス)  |   |   templates   | |-input.tpl   |   templates_c

関連するQ&A