【トラブル】Smartyを使ったときに「Permission denied」というエラーが出る

スポンサーリンク

で少し手間取ったので、記録。Permission deniedがでたらたぶんこの辺のエラーがらみ。Smarty 3.0.6 on Linux(CentOS)

通常、Smartyを使うときは↓みたいに前もってコンパイル用のディレクトリ、キャッシュ用のディレクトリを指定しておくと安全かもしれない。
$smarty->template_dir = ‘./smarty/templates’;
$smarty->compile_dir = ‘./smarty/templates_c’;
$smarty->cache_dir = ‘./smarty/cache’;
$smarty->config_dir = ‘./smarty/config’;

で、これを設定していない場合のSmartyの挙動が「実行したphpと同じディレクトリにcompile_dirとcache_dir」を作るようです。つまり
/に置いたphpでSmartyを使用→/の下に/cacheと/templates_cが作成される。/cache,/templates_c
/phpに置いたphpでSmartyを使用→/phpの下に/cacheと/templates_cが作成される。/php/cache,/php/templates_c

となっているようだ。たくさん/templates_cや/cacheというフォルダができてるなあ、と思ったらこういう仕様なのか。/直下のtemplates_cに対してのみ707を設定していて、サブディレクトリの/templates_cは755になっていた。/phpの中のphpを実行し、Smartyがtemplates_cにコンパイル後のファイルを書き込もうとしたから権限がない→permission deniedを連発していたようだ。

整理してみると簡単だけど、気づくまでにけっこう時間かかったorz 疲れたので、設定は明日に。