[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 493

Fatal 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サーバでも書き込みができるように設定する必要があります。