[Symfony] cacheディレクトリはWebサーバが書き込めるようにする必要がある。
Symfonyのチュートリアルでは、sf_sandbox.tgzをダウンロードして展開すれば、すぐに開発が始められるようなことが書いてあります。
しかし、私はsf_sandbox.tgzを展開したファイルにWebブラウザでアクセスしたとき、以下のようなエラーに遭遇しました。
Warning: mkdir() [function.mkdir]: Permission denied in /home/tom/public_html/sf_sandbox/lib/symfony/cache/sfFileCache.class.php on line 492
Fatal error: Class 'sfMixer' not found in /home/tom/public_html/sf_sandbox/lib/symfony/exception/sfException.class.php on line 151
早速、エラーが発生している/home/tom/public_html/sf_sandbox/lib/symfony/cache/sfFileCache.class.phpの492行目を見てみました。
<?php mkdir($path, 0777, true); ?>
どうやら、どこかにディレクトリを作ろうとして失敗しているようです(エラーメッセージにもそう書いてありますね)。では、どこにディレクトリを作ろうとしているのでしょうか? 上の行にprint文を入れ、ブラウザに表示するようにしてみました。
<?php print $path; mkdir($path, 0777, true); ?>
これでもう一度アクセスすると、Webブラウザには以下のメッセージが表示されました。
/home/tom/public_html/sf_sandbox/cache/frontend/prod/config/
Warning: mkdir() [function.mkdir]: Permission denied in /home/tom/public_html/sf_sandbox/lib/symfony/cache/sfFileCache.class.php on line 493Fatal error: Class 'sfMixer' not found in /home/tom/public_html/sf_sandbox/lib/symfony/exception/sfException.class.php on line 151
一番最初の文が、追加したprint文による出力です。どうやら、sf_sandboxのcacheというディレクトリにfrontendというディレクトリを作ろうとしているようです。ここで、cacheディレクトリのパーミッションを確認すると、755でしたので、これを777にしました。
$ chmod 777 cache [~/public_html/sf_sandbox]
それでもういちどアクセスしてみると、今度は見事にSymfonyの画面が表示されました。では、cacheディレクトリには期待どおりのディレクトリができているのでしょうか? 確認します。
$ ll cache [~/public_html/sf_sandbox] 合計 0 -rw-r--r-- 1 tom tom 0 2006-11-30 00:21 .sf drwxrwxrwx 3 www-data www-data 17 2006-12-14 07:26 frontend
Webサーバがfrontendというディレクトリを作ったようです。問題が解決できたようなので、sfFileCache.class.phpに追加したprint文を削除します。
というわけで、cacheディレクトリはWebサーバでも書き込みができるように設定する必要があります。