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

Fatal error: Smarty error: the $compile_dir 'templates_c' does not exist, or is not a directory.
上記エラー表示となる理由が分かりません。誰か教えてください。

▼質問したい内容
・「templates_c」ディレクトリをドキュメントルートから外してはいけないのでしょうか?
・$smarty->compile_dirを指定しなくても、勝手に「templates_c」ディレクトリを探しにいくのでしょうか?

▼経緯
「templates」「templates_c」ディレクトリをドキュメントルートから外したら(public_htmlより上の階層に置くように変更したら)、上記エラーが出るようになりました。
「templates_c」ディレクトリをドキュメントルートへ戻すと、正常表示されます。
(但し、その際、$smarty->compile_dirは、public_htmlより上の階層を指定したままなのに、正常表示される理由が不明)
試しに、$smarty->compile_dir表記自体を外してみましたが、それでも、正常表示されてしまいます。

「templates_c」ディレクトリのパスは、$smarty->compile_dirで指定しているのでは、ないでしょうか?

「templates_c」ディレクトリのパスはどこで指定をすればよいか、
また、ドキュメントルートを外してもよいか、
この2点、誰か教えて~。

※わざわざ「templates_c」ディレクトリを、ドキュメントルートから外さなくてもよいかとは思いますが、「templates」ディレクトリと同じところに置こうとも思ったら、出来なかったので、その理由を知りたいと思ってます。

A 回答 (1件)

>「templates_c」ディレクトリをドキュメントルートから外してはいけないのでしょうか?


パスの指定やパーミッション設定さえ間違っていなければ、ドキュメントルートから外して問題ありません。
当方自身、ドキュメントルート以下フォルダ階層の深い位置に置いた場合でも、まったく問題なく動作しています。
ドキュメントルートより上に置いた事はありませんが、理論上はまったく問題ないはずです。

>$smarty->compile_dirを指定しなくても、勝手に「templates_c」ディレクトリを探しにいくのでしょうか?
$smarty->compile_dirで指定せず省略された際には、デフォルト設定の[templates_c]という名前のフォルダが使用されます。

>$smarty->compile_dirは、public_htmlより上の階層を指定したままなのに、正常表示される理由が不明
おそらくですが、正しくパスが設定されていない事が原因でしょう。
相対パスを使用しているのではないかと思いますが、相対パスの基準位置等を勘違いされていて、正しく設定できていないのではないかという気がします。
相対パスで混乱するようであれば、絶対パスを指定してください。

>「templates」ディレクトリと同じところに置こうとも思ったら、出来なかったので
FTPソフトによっては、サーバー上で[移動]や[コピー]ができない場合があります。
あるいは、キャッシュが更新されていないために、古い状態が表示されているだけなのかも知れません。
『最新の状態に更新』をして、かつ、『ディレクトリの作成』をした場合でも同様でしょうか?

複数の現象が、それぞれ別の原因で発生して、切り分けができずに混乱状態なのだろうと想像できますが、ひとつひとつ解きほぐしてください。

この回答への補足

>パスの指定やパーミッション設定さえ間違っていなければ、ドキュメントルートから外して問題ありません。
そうですよね。

>$smarty->compile_dirで指定せず省略された際には、デフォルト設定の[templates_c]という名前のフォルダが使用されます。
ありがとうございました。自分でもその後、同内容のことを記載しているサイトを見つけました。

>>$smarty->compile_dirは、public_htmlより上の階層を指定したままなのに、正常表示される理由が不明
>おそらくですが、正しくパスが設定されていない事が原因でしょう。
私もそう思います。それしかないですよね。

>相対パスで混乱するようであれば、絶対パスを指定してください。
絶対パスを使用しているのですが、何かを自分で勘違いしているのだと思います。

>>「templates」ディレクトリと同じところに置こうとも思ったら、出来なかったので
これは質問の仕方がまずかったようです。「templates」と「template_c」を同じディレクトリに置いたにも関わらず、「template_c」だけがエラーになるのはなぜ? という意味でした。

■現状整理⇒自分
・「templates_c」ディレクトリをドキュメントルートから外してもよい。
・$smarty->compile_dirを省略した場合、あるいは指定が間違っている場合には、デフォルト設定の [templates_c]という名前のフォルダが使用される。
・恐らく、$smarty->compile_dirのパス指定が間違っている。それしかない…。

■結論
・もう少し、よく考えてみます…。

補足日時:2010/03/28 08:28
    • good
    • 0

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