Face à une erreur de permission de fichier lors de L'exécution de CakePHP dans Ubuntu 10.4

j'ai installé le framwork CakePHP 2.0 en utilisant les étapes ci-dessous:

1. Start the terminal
2. sudo mkdir /var/www/cakephp
3.sudo cp -r ~/cakephp/* /var/www/cakephp

Changer de dossier tmp permisssion

4. sudo chmod -R 777 cakephp/app/tmp

Activer le mod rewrite

5. sudo a2enmod rewrite

Ouvrir le fichier /etc/apache2/sites-enabled/000-default et le changement AllowOverride None à AllowOverride All

6. sudo vim /etc/apache2/sites-enabled/000-default

Redémarrer Apache

7. sudo /etc/init.d/apache2 restart

j'ai ouvert mon navigateur et tapé l'adresse http://localhost/cakephp/ et je seaw ce message d'erreur:

Avertissement: _cake_core_ cache a été incapable d'écrire "cake_dev_en-nous' de cache de Fichiers dans /var/www /cakephp/lib/Cake/Cache / Cache.php sur la ligne 310

Attention: _cake_core_ cache n'a pas pu Ecrivez 'cake_dev_en-us' à File cache in /var/www/cakephp/lib/Cake/Cache/Cache.php sur la ligne 310

Avertissement: /var/www/cakephp/app/tmp/cache/persistante/ n'est pas accessible en écriture dans le répertoire /var/www/cakephp /lib/Cake/Cache/Moteur/FileEngine.php sur la ligne 320

Attention: / var/www/cakephp / app/tmp / cache /modèles/ n'est pas accessible en écriture dans le répertoire /var/www/cakephp/lib/Cake/Cache/Moteur/FileEngine.php sur la ligne 320

Avertissement: /var/www/cakephp/app/tmp/cache/ n'est pas accessible en écriture dans le répertoire /var/www/cakephp/lib/Cake / Cache / Engine / FileEngine.php sur la ligne 320

18
demandé sur JJJ 2012-01-16 15:52:15

5 réponses

la commande sudo chmod -R 777 cakephp/app/tmp fait seulement tmp accessible en écriture, vous devez rendre le cache et ses sous-répertoires accessibles en écriture aussi bien, sinon Cake ne peut pas écrire les fichiers cache dans le répertoire cache de tmp.

ainsi, ces répertoires devraient être accessibles en écriture:

cakephp/app/tmp/cache
cakephp/app/tmp/cache/persistent
cakephp/app/tmp/cache/models

assurez-vous que le répertoire log est également accessible en écriture: cakephp/app/tmp/logs .

45
répondu mensch 2012-01-16 12:08:05

j'ai fait face à des problèmes similaires. Voici quelques choses qui m'ont aidé:

si vous ne voulez pas utiliser l'approche "sledgehammer" de chmod 777 (vous pouvez vouloir l'éviter sur la production , par exemple), les instructions d'installation de CakePHP fournissent des détails sur la façon d'utiliser ACL à la place:

notez que vous aurez probablement besoin d'utiliser sudo pour les commandes setfacl qui y sont données.

cependant, d'après mon expérience (CakePHP 2), ces commandes ne sont pas suffisantes. Ces commandes donnent à votre utilisateur webserver accès au cache, etc, mais tout ce que vous exécutez à partir de la ligne de commande (comme la commande cake ) sera probablement lancé comme votre utilisateur plutôt que l'utilisateur du serveur web.

par conséquent, vous devez exécuter les commandes setfacl liées à ci-dessus une deuxième fois, en remplaçant ${HTTPDUSER} par votre nom d'utilisateur. Si vous ne savez pas quel est votre nom d'utilisateur, tapez whoami pour le trouver.

1
répondu Sam 2016-03-15 11:33:42

j'ai rencontré un problème très similaire avec cachePhp 3.

Warning (512): /cache/persistent/ is not writable [CORE/src/Cache/Engine/FileEngine.php, line 439]

Warning (512): Cache engine Cake\Cache\Engine\FileEngine is not properly configured. [CORE/src/Cache/Cache.php, line 177]

parce que je suis nouveau dans CakePhp, j'ai débugé le fichier avec problème - CORE/src/Cache/Engine/FileEngine.php . Voici Fonction like next:

protected function _active()
{
    $dir = new SplFileInfo($this->_config['path']);
    $path = $dir->getPathname();

    $success = true;
    if (!is_dir($path)) {        
        //@codingStandardsIgnoreStart
        $success = @mkdir($path, 0775, true);
        //@codingStandardsIgnoreEnd
    }

    $isWritableDir = ($dir->isDir() && $dir->isWritable());

    if (!$success || ($this->_init && !$isWritableDir)) {
        $this->_init = false;
        trigger_error(sprintf(
            '%s is not writable',
            $this->_config['path']
        ), E_USER_WARNING);
    }

    return $success;
}

il vérifie si le répertoire cache est accessible en écriture et obtient des données sur la variable $this->_config['path'] . Cette variable est initialisée par défaut à partir .fichier de configuration (si vous l'utilisez), et il a lignes comme la suivante:

export CACHE_DEFAULT_URL="File://tmp/cache/?prefix=${APP_NAME}_default&duration=${CACHE_DURATION}"
export CACHE_CAKECORE_URL="File://tmp/cache/persistent?prefix=${APP_NAME}_cake_core&serialize=true&duration=${CACHE_DURATION}"
export CACHE_CAKEMODEL_URL="File://tmp/cache/models?prefix=${APP_NAME}_cake_model&serialize=true&duration=${CACHE_DURATION}"

j'ai changé tout File: en Null: , comme le suivant:

export CACHE_DEFAULT_URL="Null://tmp/cache/?prefix=${APP_NAME}_default&duration=${CACHE_DURATION}"
export CACHE_CAKECORE_URL="Null://tmp/cache/persistent?prefix=${APP_NAME}_cake_core&serialize=true&duration=${CACHE_DURATION}"
export CACHE_CAKEMODEL_URL="Null://tmp/cache/models?prefix=${APP_NAME}_cake_model&serialize=true&duration=${CACHE_DURATION}"
export CACHE_DRV_DEFLT = "Null"
export CACHE_DRV_MODEL = "Null"
export CACHE_DRV_CORE = "Null"

et ça aide, mon problème a été résolu. Ce sera probablement utile pour quelqu'un. Profitez-en!

1
répondu Vaha 2017-09-04 08:48:16

en utilisant chmod-R 777 /var/www/cakephp/app/tmp/ c.-à-d. en rendant le dossier exécutable résoudra ce problème. J'ai même fait face à un problème similaire en testant cron c.-à-d. shell qui existe dans app/Console/Command/ folder. Lorsque nous exécutons plusieurs fois un cron, la permission tmp/ folder est écrasée et une erreur de permission apparaît à ce point, ce qui peut être évité en rendant l'exécutable récursive de tmp / folder.

1
répondu Dhiraj 2018-07-17 10:30:30

Comme une solution temporaire, si vous voulez utiliser .fichier de configuration et les autorisations n'a pas résolu votre problème, modifier le .fichier de configuration pour utiliser le chemin absolu qui pointe vers votre répertoire app

export CACHE_FOLDER="/var/www/absolute_path_to_my_cakephp_app/"
export CACHE_DURATION="+2 minutes"
export CACHE_DEFAULT_URL="file://${CACHE_FOLDER}tmp/cache/?prefix=${APP_NAME}_default&duration=${CACHE_DURATION}"
export CACHE_CAKECORE_URL="file://${CACHE_FOLDER}tmp/cache/persistent?prefix=${APP_NAME}_cake_core&serialize=true&duration=${CACHE_DURATION}"
export CACHE_CAKEMODEL_URL="file://${CACHE_FOLDER}tmp/cache/models?prefix=${APP_NAME}_cake_model&serialize=true&duration=${CACHE_DURATION}"
0
répondu Ionut Irofte 2017-12-03 06:56:24