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

Windows環境でSmartyを動かしています。

動かしているサンプルソースがWindows用ではないため、パスなどを動くように直していたのですが、パスの設定でつまってしまいました。

サンプルのphpファイルはC:\xampp\htdocs\sample\に置いており、
Apacheのinclude_pathにC:\xampp\php\smarty\libs\を設定しました。

「templates_c」「templates」「configs」「cache」のフォルダを同じ場所に作成し、
それぞれディレクトリを指定しようとしたのですが、サンプルの「/home/~」というのをどのように直せばいいのか色々と試していて、

$smarty->template_dir = '../templates/';
$smarty->compile_dir = 'C:/xampp/php/smarty/templates_c/';
$smarty->config_dir = 'C:/xampp/php/smarty/configs/';
$smarty->cache_dir = 'C:/xampp/php/smarty/cache/';

で正常に動くのですが、

$smarty->template_dir = '../templates/';
$smarty->compile_dir = '../templates_c/';

とすると、templates_cが存在しないというエラーが出てきます。
compile_dirを"../"にするとhtdocsの直下にファイルができていたので、compile_dirはphpファイルからの相対パスで、template_dirはlibsからの相対パスになっているように思いますが、相対パスで指定する場合の基準パスが違うのでしょうか?

A 回答 (1件)

こんにちは



はじめに、これは「アドバイス」です。

自分もWindowsでSmartyを試して使っていたことがあるので、そのソースファイルを見てみました。
template_dirもcompile_dirもphpファイルがあるディレクトリからの相対パスですので、phpファイルと同じ場所にtemplateディレクトリとtempletes_cがあるならば、同じパスの記述でいいはずです。
$smarty->template_dir = 'templates';
$smarty->compile_dir = 'templates_c';

include_pathはSmartyクラスが置いてあるパスを指定するものだと思います。

ディレクトリ名を間違えていると言うことはしてないと思いますので、エラーメッセージをそのまま載せてみてはいかがでしょうか。

この回答への補足

回答ありがとうございます。

エラーメッセージは以下が全文です。
Fatal error: Smarty error: the $compile_dir '../templates_c/' does not exist, or is not a directory. in C:\xampp\php\smarty\libs\Smarty.class.php on line 1092

やはり、template_dirもcompile_dirも同じパスの記述でいいんですね。
phpファイルからの相対パスのはずなのに、以下の構成のときに '../templates/';で動くのが不思議です・・・。

template_dirなどのフォルダはhtdocsの配下ではなくSmartyクラスを置いてあるのと同じ場所にあります。sample.phpの中で呼び出している.tplファイルはtemplatesにしかありません。

phpファイル(http://~/sample/sample.php)
C:\xampp\htdocs\sample\sample.php

PHP&Smartyクラス
C:\xampp\php\
C:\xampp\php\smarty\libs\
C:\xampp\php\smarty\templates\
C:\xampp\php\smarty\templates_c\など

補足日時:2009/03/24 21:14
    • good
    • 0

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