CakePHPのキャッシュファイルのパーミッションエラーの対処法


CakePHPで以下のようなエラーが出るときがある。

問題

Warning: SplFileInfo::openFile(/www/app/tmp/cache/persistent/cake_core_cake_console_) [splfileinfo.openfile]: failed to open stream: Permission denied in /www/lib/Cake/Cache/Engine/FileEngine.php

このエラーは、キャッシュファイルのパーミッションの設定によって、ファイル所有者とアクセスユーザーが異なるために発生する。

解決方法

umaskを設定することで解決する。

umaskとは

ファイルを作成するときにデフォルトで使用するパーミッション設定の事。

キャッシュファイルの設定を更新

core.phpにのキャッシュの設定に以下の記述を追加する。

'mask' => 0666
app/Config/core.php
Cache::config('_cake_core_', array(
    'engine' => $engine,
    'prefix' => $prefix . 'cake_core_',
    'path' => CACHE . 'persistent' . DS,
    'serialize' => ($engine === 'File'),
    'duration' => $duration,
    'mask' => 0666,
));
Cache::config('_cake_model_', array(
    'engine' => $engine,
    'prefix' => $prefix . 'cake_model_',
    'path' => CACHE . 'models' . DS,
    'serialize' => ($engine === 'File'),
    'duration' => $duration,
    'mask' => 0666,
));

これでエラーは出なくなるはず!