CakePHP 2.x предупреждение SplFileInfo из-за cakeshell

Я написал сценарий cakeshell, который я планирую использовать с помощью cronjob. запустив его вручную (во время тестирования), иногда мой сайт будет бросать SplFileInfo Warning, например:

Warning: SplFileInfo::openFile(/var/www/flat/app/tmp/cache/persistent/myapp_cake_core_file_map): failed to open stream: Permission denied in /var/www/flat/lib/Cake/Cache/Engine/FileEngine.php on line 313 Warning (512): SplFileInfo::openFile(/var/www/flat/app/tmp/cache/models/myapp_cake_model_default_flat_list): failed to open stream: Permission denied [CORE/Cake/Cache/Engine/FileEngine.php, line 313] Warning (512): SplFileInfo::openFile(/var/www/flat/app/tmp/cache/models/myapp_cake_model_default_flat_list) [http://php.net/splfileinfo.openfile]: failed to open stream: Permission denied [CORE/Cake/Cache/Engine/FileEngine.php, line 313] Warning (512): _cake_model_ cache was unable to write 'default_flat_list' to File cache [CORE/Cake/Cache/Cache.php, line 309] Warning (512): SplFileInfo::openFile(/var/www/flat/app/tmp/cache/persistent/myapp_cake_core_method_cache) [http://php.net/splfileinfo.openfile]: failed to open stream: Permission denied [CORE/Cake/Cache/Engine/FileEngine.php, line 313] Warning (512): SplFileInfo::openFile(/var/www/flat/app/tmp/cache/persistent/myapp_cake_core_method_cache) [http://php.net/splfileinfo.openfile]: failed to open stream: Permission denied [CORE/Cake/Cache/Engine/FileEngine.php, line 313] Warning (512): SplFileInfo::openFile(/var/www/flat/app/tmp/cache/models/myapp_cake_model_default_flat_list) [http://php.net/splfileinfo.openfile]: failed to open stream: Permission denied [CORE/Cake/Cache/Engine/FileEngine.php, line 313] Warning (512): SplFileInfo::openFile(/var/www/flat/app/tmp/cache/models/myapp_cake_model_default_flat_list) [http://php.net/splfileinfo.openfile]: failed to open stream: Permission denied [CORE/Cake/Cache/Engine/FileEngine.php, line 313] Warning (512): _cake_model_ cache was unable to write 'default_flat_list' to File cache [CORE/Cake/Cache/Cache.php, line 309] 

Что случилось? и как это исправить?

Если я проверю каталог tmp на кеш и постоянный, некоторые из файлов находятся под правами root. Это причина?

 [root@Apps103 persistent]# ls total 40K -rw-rw-r-- 1 apache 43 Apr 22 17:49 myapp_cake_core_cake_ -rw-rw-r-- 1 root 43 Apr 23 10:01 myapp_cake_core_cake_console_ -rw-rw-r-- 1 root 43 Apr 23 10:01 myapp_cake_core_cake_dev_ -rw-rw-r-- 1 apache 43 Apr 23 10:26 myapp_cake_core_cake_dev_en-us -rw-rw-r-- 1 apache 43 Apr 23 10:26 myapp_cake_core_cake_en-us -rw-rw-r-- 1 apache 43 Apr 23 10:26 myapp_cake_core_default_en-us -rw-rw-r-- 1 root 4.3K Apr 23 10:01 myapp_cake_core_file_map -rw-rw-r-- 1 root 4.3K Apr 23 10:01 myapp_cake_core_method_cache 

Я попробовал решение по этой ссылке. SplFileInfo :: openFile (/ app / tmp / cache / persistent / cake_core_cake_console _): не удалось открыть поток: разрешено исключение в строке /lib/…/FileEngine.php 293

Я положил это в bootstrap

 Cache::config('default', array( 'engine' => 'File', 'mask' => 0666, )); // short Cache::config('short', array( 'engine' => 'File', 'duration' => '+1 hours', 'path' => CACHE, 'prefix' => 'cake_short_' )); // long Cache::config('long', array( 'engine' => 'File', 'duration' => '+1 week', 'probability' => 100, 'path' => CACHE . 'long' . DS, )); 

Но это не работает. Обычно я удаляю весь каталог tmp, чтобы удалить предупреждение. то он снова будет работать отлично. Я не уверен, почему, но если я запустил оболочку, ошибка предупреждения не будет отображаться до следующего дня. Мой каталог tmp (flat / app / tmp) находится под разрешением apache.

Solutions Collecting From Web of "CakePHP 2.x предупреждение SplFileInfo из-за cakeshell"

Что случилось?

Папка tmp обычно находится в каталоге приложения и используется для всех запросов независимо от происхождения. Относительно распространенная проблема заключается в том, что файлы tmp, созданные с помощью веб-запроса, доступны только для чтения для консольных задач и наоборот.

Если вы выполняете задачи cli как root, файлы tmp будут создаваться с помощью корневого владельца – после этого webrequest (выполняется apache) может попытаться удалить или записать в каталог tmp, но не сможет изменить существующее содержимое папки tmp в качестве файлы принадлежат root.

как это исправить?

Либо сделайте клики и веб-запросы использовать разные каталоги tmp – или просто убедитесь, что оба пользователя cli и web имеют права на запись в каталог tmp.

Это означает либо определение константы TMP до того, как CakePHP выполнит это действие, отличное от app / tmp, например, cake.php :

 ... $ds = DIRECTORY_SEPARATOR; define('TMP', '/tmp/myapp'); ... 

Или убедитесь, что папка tmp доступна для записи для обоих пользователей, например:

 cd app chmod -R 777 tmp