消息:cache_dir必须是目录

时间:2013-04-16 07:46:42

标签: php zend-framework frameworks

大家好,我在使用Zend Framework时遇到了一些问题。
我首先收到以下消息: 消息:
无法确定临时目录,请手动指定cache_dir。 我搜索谷歌并发现这篇文章:Zend Framework : Could not determine temp directory, please specify a cache_dir manually 我读了它,现在当我填写表格时出现以下错误:  
(我把...放在错误中的任何地方意味着域。)

消息:cache_dir必须是目录

- #0 /home/daan/domains/../library/Zend/Cache/Backend/File.php(154): Zend_Cache::throwException('cache_dir must ...')
 - #1 /home/daan/domains/../library/Zend/Cache/Backend/File.php(121): Zend_Cache_Backend_File->setCacheDir('/domains/daan.h...')
 - #2 /home/daan/domains/../library/Zend/Cache.php(153): Zend_Cache_Backend_File->__construct(Array)
 - #3 /home/daan/domains/../library/Zend/Cache.php(94): Zend_Cache::_makeBackend('File', Array, false, false)
 - #4 /home/daan/domains/../library/Zend/Locale/Data.php(307): Zend_Cache::factory('Core', 'File', Array, Array)
 - #5 /home/daan/domains/../library/Zend/Locale/Format.php(796): Zend_Locale_Data::getList('nl_NL', 'day')
 - #6 /home/daan/domains/../library/Zend/Locale/Format.php(1106): Zend_Locale_Format::_parseDate('16-02-2013', Array)
 - #7 /home/daan/domains/../library/Zend/Date.php(4763): Zend_Locale_Format::getDate('16-02-2013', Array)
 - #8 /home/daan/domains/../library/Zend/Validate/Date.php(175): Zend_Date::isDate('16-02-2013', 'MM-DD-YYYY', NULL)
 - #9 /home/daan/domains/../library/Zend/Form/Element.php(1391): Zend_Validate_Date->isValid('16-02-2013', Array)
 - #10 /home/daan/domains/../library/Zend/Form.php(2135): Zend_Form_Element->isValid('16-02-2013', Array)
 - #11/home/daan/domains/../application/controllers/BugController.php(27): Zend_Form->isValid(Array)
 - #12 /home/daan/domains/../library/Zend/Controller/Action.php(513): BugController->submitAction()
 - #13 /home/daan/domains/../library/Zend/Controller/Dispatcher/Standard.php(289): Zend_Controller_Action->dispatch('submitAction')
 - #14 /home/daan/domains/../library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
 - #15 /home/daan/domains/../library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
 - #16 /home/daan/domains/../library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
 - #17 /home/daan/domains/../public_html/index.php(26): Zend_Application->run()
 - #18 {main} 

Application.ini:

resources.cachemanager.configFiles.frontend.name = File
resources.cachemanager.configFiles.frontend.customFrontendNaming = false
resources.cachemanager.configFiles.frontend.options.lifetime = false
resources.cachemanager.configFiles.frontend.options.automatic_serialization = true    
resources.cachemanager.configFiles.backend.name = File
resources.cachemanager.configFiles.backend.customBackendNaming = false
resources.cachemanager.configFiles.backend.options.cache_dir = APPLICATION_PATH      "/../tmp"
resources.cachemanager.configFiles.frontendBackendAutoload = false

Initcache:

 protected function _initCaching() {
$frontend = array(
'lifetime' => $time,
'automatic_serialization' => true
);
$backend = array(
'cache_dir' => sys_get_temp_dir(),
);
$cache = Zend_Cache::factory('core', 'File', $frontend, $backend);
Zend_Registry::set('cache', $cache);

}

文件夹结构:
htpasswd的
应用
AWStats的

日志
public_ftp
的public_html
TMP

8 个答案:

答案 0 :(得分:7)

cache_dir必须是目录:

当您将代码移动到其他主机或服务器时,通常会出现此问题。这个问题主要有两个解决方案

1 - 确保您的缓存目录是可写的,或者您可以写入magento的var文件夹

但有时这种情况不起作用,所以这里是替代解决方案。转到这个位置lib / Zend / Cache / Backend / 并打开file.php文件,你会看到类似这样的代码

protected $_options = array(
        'cache_dir' => null,
        'file_locking' => true,
        'read_control' => true,
        'read_control_type' => 'crc32',
        'hashed_directory_level' => 0,
        'hashed_directory_umask' => 0700,
        'file_name_prefix' => 'zend_cache',
        'cache_file_umask' => 0600,
        'metadatas_array_max_size' => 100
    );

更改此代码,如下所示

protected $_options = array(
        'cache_dir' => '/var/www/html/webkul/magento/tmp',
        'file_locking' => true,
        'read_control' => true,
        'read_control_type' => 'crc32',
        'hashed_directory_level' => 0,
        'hashed_directory_umask' => 0700,
        'file_name_prefix' => 'zend_cache',
        'cache_file_umask' => 0600,
        'metadatas_array_max_size' => 100
    );

根据您的配置分配cache_dir的路径。

答案 1 :(得分:0)

可能Zend无法找到您的缓存目录。尝试在Bootstrap.php中像这样

protected function _initCache() {
    $frontend = array(
        'lifetime' => $time,
        'automatic_serialization' => true
    );
    $backend = array(
        'cache_dir' => sys_get_temp_dir(), /**automatically detects**/
    );
    $cache = Zend_Cache::factory('core', 'File', $frontend, $backend);
    Zend_Registry::set('cache', $cache);
}

答案 2 :(得分:0)

从引导程序中删除_initCaching函数,你不应该有这个和application.ini条目,因为它们都试图设置相同的东西(但使用不同的缓存位置)。

您的缓存目录设置为APPLICATION_PATH "/../tmp" - 即应用程序根目录中名为“tmp”的文件夹(不在应用程序文件夹中)。您是否100%确定您的tmp文件夹存在于此位置?如果是这样,您可以尝试更改application.ini配置以使用完整路径:

resources.cachemanager.configFiles.backend.options.cache_dir = "/home/daan/domains/whatever/tmp"

只是为了看看是否能解决问题。

如果仍然无法正常运行,请发布有关应用程序文件结构的更多信息。

答案 3 :(得分:0)

这个问题的答案是打开File.php文件并更改tmp文件夹的路径。 当您将站点从一台服务器转移到另一台服务器时,会出现此问题。当您转移站点时,tmp文件夹的路径不会更改为新的路径。所以编辑file.php并更改tmp文件夹的路径。

答案 4 :(得分:0)

magento root

在magento目录中创建“tmp”文件为我解决了这个错误。 我能够轻松访问管理员

答案 5 :(得分:0)

为缓存目录分配完整路径。例如,

'cache_dir' => '/var/www/html/var/cache1',

答案 6 :(得分:0)

我遇到了同样的问题,因为我更换了服务器。 更改“ / install / config /编辑文件” vfs.php”中的路径,并输入新的路径名。

您将向前迈出一步。错误将改变;)

答案 7 :(得分:0)

在 CentOS/RedHat 中出现此问题的原因之一可能是 Selinux。 我通过禁用 Selinux 摆脱了这个问题

编辑 /etc/selinux/config 文件并将 SELINUX 设置为 disabled