[CakePHP] app/tmp/cache/modelsディレクトリを、Webサーバが書き込めるようにする必要がある。

環境

この記事で対象となっている環境は、Ubuntu 6.10, Apache 2.0.55, PHP 5.1.6, CakePHP 1.1.11.4064です。

問題とその現象

/home/foo/public_html/cakeにCakePHPをインストールしたが、アクセスすると以下の警告が表示される。

Warning: file_put_contents(/home/foo/public_html/cake/app/tmp/cache/models/default_data_list) [function.file-put-contents]: failed to open stream: Permission denied in /home/foo/public_html/cake/cake/basics.php on line 867

解決方法

/home/foo/public_html/cake/app/tmp/cache/modelsのパーミッションを、Webサーバが書き込めるように、以下のようにして変更します。

$ chmod 777 models            [~/public_html/cake/app/tmp/cache]

解決方法までの経緯

警告を発しているcake/basics.phpの867行目付近は、次のようになっています。

<?php
(略)
                        file_put_contents($filename, $data);
(略)
?>

警告文の中ですでにパス名が表示されていますが、念のため、var_dump関数で$filename変数の値を表示させてみます。

<?php
(略)
                        var_dump($filename);
                        file_put_contents($filename, $data);
(略)
?>

すると画面には、次の文が追加されました。

string(65) "/home/foo/public_html/cake/app/tmp/cache/models/default_data_list"

そこで、app/tmp/cache/modelsディレクトリを、Webサーバが書き込めるようにします。

$ chmod 777 models            [~/public_html/cake/app/tmp/cache]
$ ls -ld models               [~/public_html/cake/app/tmp/cache]
drwxrwxrwx 2 foo foo 50 2006-12-27 06:09 models

先ほどのvar_dump関数を削除して、再表示させてみます。すると、警告はでなくなりました。ちなみに、このmodelsディレクトリに何が保存されているのか、調べてみます。

$ ls -l                [~/public_html/cake/app/tmp/cache/models]
合計 8