J'ai installé le framework CakePHP 2.0 en suivant les étapes ci-dessous:
1. Start the terminal
2. Sudo mkdir /var/www/cakephp
3.Sudo cp -r ~/cakephp/* /var/www/cakephp
Changer l'autorisation du dossier tmp
4. Sudo chmod -R 777 cakephp/app/tmp
Activer la réécriture de mod
5. Sudo a2enmod rewrite
Ouvrez le fichier/etc/Apache2/sites-enabled/000-default et remplacez AllowOverride None
par 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 vois ce message d'erreur:
Avertissement: Le cache _cake_core_ n'a pas pu écrire 'cake_dev_en-us' dans le cache de fichiers dans /var/www /cakephp/lib/Cake/Cache/Cache.php à la ligne 310
Avertissement: le cache _cake_core_ n'a pas pu écrivez 'cake_dev_en-us' dans le cache de fichiers dans /var/www/cakephp/lib/Cake/Cache/Cache.php à la ligne 310
Avertissement:/var/www/cakephp/app/tmp/cache/persistent/n'est pas accessible en écriture dans /var/www/cakephp /lib/Cake/Cache/Engine/FileEngine.php à la ligne 320
Avertissement: /var/www/cakephp/app/tmp/cache/models/n'est pas accessible en écriture dans /var/www/cakephp/lib/Cake/Cache/Engine/FileEngine.php à la ligne 320
Avertissement:/var/www/cakephp/app/tmp/cache/n’est pas accessible en écriture dans /var/www/cakephp/lib/Cake /Cache/Engine/FileEngine.php à la ligne 320
La commande Sudo chmod -R 777 cakephp/app/tmp
ne permet que tmp
d'écrire, vous devez également rendre le cache ainsi que ses sous-répertoires, sinon Cake ne peut pas écrire les fichiers de cache dans le répertoire de cache de tmp.
Donc, ces répertoires devraient être accessibles en écriture:
cakephp/app/tmp/cache
cakephp/app/tmp/cache/persistent
cakephp/app/tmp/cache/models
Assurez-vous également que le répertoire du journal est accessible en écriture: cakephp/app/tmp/logs
.
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ébogué le fichier avec le problème - CORE/src/Cache/Engine/FileEngine.php . Voici la fonction suivante:
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 de cache est accessible en écriture et obtient des données sur le chemin sous la forme $this->_config['path']
variable. Cette variable est initialisée par défaut à partir d'un fichier .env (si vous l'utilisez), et elle a des lignes comme celles-ci:
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é tous les File:
en Null:
, comme suit:
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. Prendre plaisir!
J'ai rencontré des problèmes similaires. Voici quelques éléments qui m'ont aidé:
Si vous ne souhaitez pas utiliser l'approche "sledgehammer" de chmod 777
(vous voudrez peut-être l'évitez en production , par exemple), les instructions d'installation de CakePHP fournissent des détails sur la manière d'utiliser ACL à la place:
Notez que vous devrez probablement utiliser Sudo
pour les commandes setfacl
indiquées ici.
Cependant, dans mon expérience (CakePHP 2), ces commandes ne suffisent pas. Ces commandes permettent à votre utilisateur webserver d'accéder au cache, etc., mais tout ce que vous exécutez à partir de la ligne de commande (comme la commande cake
) sera probablement exécuté en tant qu'utilisateur votre plutôt que comme utilisateur du serveur Web.
Par conséquent, vous devez exécuter les commandes setfacl
liées à ci-dessus une seconde fois, en remplaçant ${HTTPDUSER}
par votre nom d'utilisateur. Si vous n'êtes pas sûr de votre nom d'utilisateur, tapez whoami
pour le trouver.
En utilisant chmod -R 777/var/www/cakephp/app/tmp/c’est-à-dire que l’exécution du dossier execuatble résoudra ce problème . J'ai même rencontré un problème similaire lors du test de cron, un shell existant dans app/Console/Command/dossier. Lorsque nous exécutons plusieurs fois cron, l’autorisation tmp/folder est écrasée et une erreur d’autorisation apparaîtra à ce stade, ce qui peut être évité en rendant tmp/folder exécutable de manière récursive.
Si vous souhaitez utiliser le fichier .env fourni et que les autorisations ne résolvent pas le problème, modifiez le fichier .env pour qu'il utilise un chemin absolu qui pointe vers votre répertoire d'applications.
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}"