2012-01-16 1 views
17

Я установил CakePHP 2,0 framwork используя шаги ниже:Облицовочные ошибки доступа к файлу во время работы CakePHP в Ubuntu 10.4

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 

Включить мод-рерайт

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/ и я seaw это сообщение об ошибке:

Предупреждение: _cake_core_ кэш не смог написать «cake_dev_en -us 'к файловому кэшу в/var/www /cakephp/lib/Cake/Cache/Cache.php в строке 310
Предупреждение: _cake_core_ кеш не смог написать 'cake_dev_en-us' в Файловый кеш в /var/www/cakephp/lib/Cake/Cache/Cache.php в строке 310
Предупреждение:/var/www/cakephp/app/tmp/cache/persistent/не записывается в/var/www/cakephp /lib/Cake/Cache/Engine/FileEngine.php on line 320
Предупреждение:/var/www/cakephp/app/tmp/cache /models/is не записывается в /var/www/cakephp/lib/Cake/Cache/Engine/FileEngine.php в строке 320
Предупреждение:/var/www/cakephp/app/tmp/cache/не записывается в/var/www/cakephp/lib/Торт /Cache/Engine/FileEngine.php on line 320

+2

Вы уверены, шаг № 4 сделал что-нибудь? Вы были в/var/www /, когда вы дали команду? Попробуйте 'sudo chmod -R 777/var/www/cakephp/app/tmp'. – JJJ

+0

Возможный дубликат? http://stackoverflow.com/questions/12718331/ocasional-error-warning-when-cakephp-is-writing-to-the-cache – ViniciusPires

ответ

42

Команда 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.

+17

Не переводит ли '-R' переключатель chmod через подкаталоги рекурсивно? – JJJ

+0

Он делает, я полностью игнорировал рекурсивный флаг. Тем не менее любопытны, если у 'persistent' и' models' есть правильные разрешения. – mensch

+0

Привет, спасибо за ваш быстрый ответ. Я сделал разрешения. Теперь я получаю сообщение об ошибке при запуске apache2: Неверная команда «Заказ», возможно, с ошибкой или определена модулем, не включенным в конфигурацию сервера. Не удалось запустить «запуск». В журнале ошибок Apache может быть больше информации. –

1

У меня возникли аналогичные проблемы. Вот несколько вещей, которые помогли мне:

Если вы не хотите использовать «кувалду» подход chmod 777 (вы можете avoid it on production, например), инструкции по установке CakePHP предоставить подробную информацию о том, как использовать ACL вместо:

Заметьте, что вам, возможно, придется использовать sudo для setfacl команд.

Однако, по моему опыту (CakePHP 2), этих команд недостаточно. Эти команды дают вашему веб-серверу доступ к кешу и т. Д., Но все, что вы запускаете из командной строки (например, команда cake), вероятно, будет работать как вашего пользователя, а не пользователя веб-сервера.

Таким образом, вы должны запустить команды setfacl, связанные с выше, второй раз, заменив ${HTTPDUSER} на ваше имя пользователя. Если вы не знаете, что такое ваше имя пользователя, введите whoami, чтобы найти его.

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, я debuged файл с проблемой - CORE/SRC/Cache/Двигатель/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" 

И это помогает, моя проблема была исправлена. Вероятно, это будет полезно для кого-то. Наслаждайтесь!

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