Facing a file permission error while running CakePHP in Ubuntu 10.4
Asked Answered
S

6

19

I have installed CakePHP 2.0 framwork using steps below:

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

Change tmp folder permisssion

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

Enable mod-rewrite

5. sudo a2enmod rewrite

Open file /etc/apache2/sites-enabled/000-default and change AllowOverride None to AllowOverride All

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

Restart Apache

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

I opened my browser and typed address http://localhost/cakephp/ and I seaw this error message:

Warning: _cake_core_ cache was unable to write 'cake_dev_en-us' to File cache in /var/www /cakephp/lib/Cake/Cache/Cache.php on line 310
Warning: _cake_core_ cache was unable to write 'cake_dev_en-us' to File cache in /var/www/cakephp/lib/Cake/Cache/Cache.php on line 310
Warning: /var/www/cakephp/app/tmp/cache/persistent/ is not writable in /var/www/cakephp /lib/Cake/Cache/Engine/FileEngine.php on line 320
Warning: /var/www/cakephp/app/tmp/cache /models/ is not writable in /var/www/cakephp/lib/Cake/Cache/Engine/FileEngine.php on line 320
Warning: /var/www/cakephp/app/tmp/cache/ is not writable in /var/www/cakephp/lib/Cake /Cache/Engine/FileEngine.php on line 320

Sacks answered 16/1, 2012 at 11:52 Comment(2)
Are you sure step #4 did anything? Were you in /var/www/ when you gave the command? Try sudo chmod -R 777 /var/www/cakephp/app/tmp.Roadbed
Possible duplicate? #12718831Piggyback
R
48

The command sudo chmod -R 777 cakephp/app/tmp only made tmp writable, you should make cache and it's subdirectories writable as well, otherwise Cake can't write the cache files to the cache directory in tmp.

So, these directories should be writable:

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

Make sure the log directory is writable as well: cakephp/app/tmp/logs.

Rebellion answered 16/1, 2012 at 12:8 Comment(7)
Doesn't the -R switch make chmod go through subdirectories recursively?Roadbed
It does, I totally overlooked the recursive flag. Still curious if persistent and models have the correct permissions, though.Rebellion
Hi, thanks for your quick reply. I did permissions. Now i am getting error while starting apache2: Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration Action 'start' failed. The Apache error log may have more information.Sacks
It looks like something isn't right in your Apache config file. Make sure the Apache module mod_authz_host is loaded and if the syntax of the Order, allow, deny directives (part of mod_authz_host) is correct in your config file.Rebellion
Hi guys, i am facing a problem - something somehow at unknown conditions in cake change the permissions of /tmp back, so i have to change them back again. Does anyone has an idea why this is happening / how to trace problem? ThanksRevive
Even more than 3 years later, I still got stuck of this problem until I found this answer and it works for me. I'm very curious about why the cakephp can not create the folders they want by itself ? Because the security reason of php or apache ?Simeon
@Simeon Make than almost 4 years. I still have problems. It is a cake problem.Disintegrate
I
1

I've faced similar problems. Here are a couple of things that helped me:

If you don't want to use the "sledgehammer" approach of chmod 777 (you may want to avoid it on production, for instance), the CakePHP installation instructions provide details on how to use ACL instead:

Note that you'll probably need to use sudo for the setfacl commands given there.

However, in my experience (CakePHP 2), those commands aren't enough. These commands give your webserver user access to the cache etc, but anything you run from the command line (like the cake command) will probably be running as your user rather than the webserver user.

Therefore, you should run the setfacl commands linked to above a second time, replacing ${HTTPDUSER} with your user name. If you're not sure what your username is, type whoami to find it.

Ifill answered 15/3, 2016 at 11:33 Comment(0)
U
1

I have encountered a very similar problem with 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]

Because I am new in CakePhp, I have debuged the file with problem - CORE/src/Cache/Engine/FileEngine.php. Here is function 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;
}

It checks if cache directory is writable and get data about path form $this->_config['path'] variable. This variable is initialized by default from .env file (if you use it), and it has lines like next:

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}"

I have changed all File: to Null:, like next:

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"

And it helps, my problem was fixed. Probably it will be helpfull for someone. Enjoy!

Umont answered 4/9, 2017 at 8:48 Comment(0)
K
1

Using chmod -R 777 /var/www/cakephp/app/tmp/ i.e. making folder execuatble will solve this issue. I even faced similar issue while testing cron i.e. shell which exists in app/Console/Command/ folder. When we execute a cron multiple time, tmp/ folder permission is overwritten and permission error will come in picture at this point which can be avoided by making tmp/ folder executable recursively.

Kalakalaazar answered 17/7, 2018 at 10:30 Comment(0)
M
0

As a temporary fix, if you want to use the provided .env file and permissions did not solve your issue modify the .env file to use absolute path that points to your app directory

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}"
Matrilineage answered 3/12, 2017 at 6:56 Comment(0)
P
0

chmod -R 777 tmp/cache” if tmp folder is not exists then create tmp file using mkdir tmp and mkdir tmp/cache

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'
Poindexter answered 11/9, 2019 at 12:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.