Utilisation du cache fichier avec CakePHP 2.x

⏲️ ~3 min de lecture

Publié le par Pierre
cakephp php

Depuis la version 2.0 de CakePHP, le cache par défaut utilise APC si disponible et le système de fichier sinon.

Il se peut que vous rencontriez des problèmes de droit sur ces fichiers temporaires, notamment si votre application contient à la fois des scripts exécutés par Apache (en mode web) et par l'utilisateur système (scripts en console).

Dans ce cas un fichier créé par l'un peut ne pas être lisible / modifiable par l'autre.

En pratique vous verrez apparaître l'erreur suivante :

Warning: SplFileInfo::openFile(xxx/tmp/cache/persistent/yyy) [splfileinfo.openfile]: failed to open stream: Permission denied in /zzz/lib/Cake/Cache/Engine/FileEngine.php on line XXX

La solution est de configurer correctement le "umask" à utiliser par le système de cache fichier de CakePHP. Les droits à appliquer dépendent de la configuration de chaque serveur (utilisateurs / groupes), nous illustrerons ici avec un umask à "0022".

La configuration du umask se fait dans le fichier "app/Config/core.php" (~L307 et ~L320). Il vous faut ajouter la clé 'mask' => 0022" au tableau de configuration du cache du coeur de CakePHP :

/**
* Configure the cache used for general framework caching. Path information,
* object listings, and translation cache files are stored with this configuration.
*/

Cache::config('_cake_core_', array(
'engine' => $engine,
'prefix' => $prefix . 'cake_core_',
'path' => CACHE . 'persistent' . DS,
'serialize' => ($engine === 'File'),
'duration' => $duration,
'mask' => 0022, // See http://cakephp.lighthouseapp.com/projects/42648/tickets/2172
));

/**
* Configure the cache for model and datasource caches. This cache configuration
* is used to store schema descriptions,
* and table listings in connections.
*/

Cache::config('_cake_model_', array(
'engine' => $engine,
'prefix' => $prefix . 'cake_model_',
'path' => CACHE . 'models' . DS,
'serialize' => ($engine === 'File'),
'duration' => $duration,
'mask' => 0022, // See http://cakephp.lighthouseapp.com/projects/42648/tickets/2172
));

Pour plus d'informations vous pouvez consulter le ticket correspondant : http://cakephp.lighthouseapp.com/projects/42648/tickets/2172

Cet article vous a plu ? Sachez que nous recrutons !

← Accueil