我已经使用以下步骤安装了CakePHP 2.0框架:
1. Start the terminal
2. sudo mkdir /var/www/cakephp
3.sudo cp -r ~/cakephp/* /var/www/cakephp
更改tmp文件夹permisssion
4. sudo chmod -R 777 cakephp/app/tmp
启用mod-rewrite
5. sudo a2enmod rewrite
打开文件/ etc / apache2 / sites-enabled / 000-default并将AllowOverride None
更改为AllowOverride All
6. sudo vim /etc/apache2/sites-enabled/000-default
重启Apache
7. sudo /etc/init.d/apache2 restart
我打开浏览器并输入地址http://localhost/cakephp/,然后我发现了这条错误消息:
警告:_ cake_core_ cache无法将“cake_dev_en-us”写入/ var / www中的文件缓存 第310行的/cakephp/lib/Cake/Cache/Cache.php
警告:_ cake_core_ cache无法执行 在第310行的/var/www/cakephp/lib/Cake/Cache/Cache.php中将'cake_dev_en-us'写入文件缓存中
警告:/ var / www / cakephp / app / tmp / cache / persistent /在/ var / www / cakephp中不可写 第320行的/lib/Cake/Cache/Engine/FileEngine.php
警告:/ var / www / cakephp / app / tmp / cache / models /在第320行的/var/www/cakephp/lib/Cake/Cache/Engine/FileEngine.php中不可写 警告:在/ var / www / cakephp / lib / Cake中,/ var / www / cakephp / app / tmp / cache /不可写 第320行的/Cache/Engine/FileEngine.php
答案 0 :(得分:45)
命令sudo chmod -R 777 cakephp/app/tmp
只使tmp
可写,你应该创建缓存,它的子目录也可写,否则Cake无法将缓存文件写入tmp中的缓存目录。
因此,这些目录应该是可写的:
cakephp/app/tmp/cache
cakephp/app/tmp/cache/persistent
cakephp/app/tmp/cache/models
确保日志目录也可写:cakephp/app/tmp/logs
。
答案 1 :(得分:1)
我遇到过类似的问题。以下是帮助我的一些事情:
如果你不想使用" sledgehammer" chmod 777
的方法(例如,您可能需要avoid it on production),CakePHP安装说明提供了有关如何使用ACL的详细信息:
请注意,您可能需要sudo
使用setfacl
命令。
但是,根据我的经验(CakePHP 2),这些命令还不够。这些命令使您的 webserver用户可以访问缓存等,但是您从命令行运行的任何内容(如cake
命令)都可能以您的运行用户而不是网络服务器用户。
因此,您应该再次运行上面链接到的setfacl
命令,将${HTTPDUSER}
替换为您的用户名。如果您不确定自己的用户名是什么,请输入whoami
进行查找。
答案 2 :(得分:1)
我遇到了与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]
因为我是CakePhp中的新手,所以我在文件中出现了问题 - CORE / src / Cache / Engine / FileEngine.php 。 这是下一个功能:
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;
}
它检查缓存目录是否可写并获取有关路径形式$this->_config['path']
变量的数据。默认情况下,此变量从.env文件初始化(如果您使用它),并且它具有下一行:
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}"
我已将所有File:
更改为Null:
,如下所示:
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"
它有帮助,我的问题得到解决。可能对某人有帮助。享受!
答案 3 :(得分:1)
使用 chmod -R 777 / var / www / cakephp / app / tmp / ,即使文件夹可执行将解决此问题。 我在测试cron(即app / Console / Command /文件夹中的shell)时甚至遇到了类似的问题。当我们多次执行cron时,tmp /文件夹权限将被覆盖,并且此时会出现权限错误,这可以通过递归使tmp /文件夹可执行来避免。
答案 4 :(得分:0)
作为临时修复,如果您要使用提供的.env文件并且权限无法解决您的问题,请修改.env文件以使用指向您的应用程序目录的绝对路径
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}"
答案 5 :(得分:0)
“ chmod -R 777 tmp/cache
”如果不存在tmp文件夹,则使用mkdir tmp和mkdir tmp / cache创建tmp文件
chmod -R 777 logs
chmod -R 777 tmp/sessions
chmod -R 777 tmp/tests
chcon -R -t httpd_sys_content_rw_t 'tmp'
chcon -R -t httpd_sys_content_rw_t 'logs'