dポイントプレゼントキャンペーン実施中!

宜しくお願いします。
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();

}
}
____________________________

A 回答 (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」を定数として定義しておきたいかどうかで自由に記述すればよいと思います。

この回答への補足

お礼を申し上げるのが大変遅くなってしまい申し訳ございません。
ご丁寧に回答いただきとても感謝しております。
いろいろ調べまくって、なんとなくわかってきた気がするのですが、
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

補足日時:2008/08/08 02:26
    • good
    • 0

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