【问题标题】:Zend_Cache default cache_dir in application.iniapplication.ini 中的 Zend_Cache 默认 cache_dir
【发布时间】:2013-09-30 13:45:43
【问题描述】:

在我的服务器上,我有多个虚拟主机,我在它们上运行多个基于 ZF 1.12 的应用程序。缓存数据时(使用 Zend_Cache_Backend_File),每个项目都将文件保存在 /tmp 中。

问题是存在一些名称和访问权限问题。运行 project2 我得到这个错误:

警告:fopen(/tmp/zend_cache---internal-metadatas---Zend_LocaleC_de_DE_currencynumber_)

那是因为该文件是由在单独的虚拟主机上运行的 project1 创建的。

所以我想为每个项目的缓存数据定义单独的文件夹,如下所示:

/tmp/porject1

/tmp/project2

IMO 最好的方法是使用 application.ini 来做到这一点 - 所以我尝试了这个:

resources.cachemanager.database.backend.name = File
resources.cachemanager.database.backend.customBackendNaming = false
resources.cachemanager.database.backend.options.cache_dir = "/tmp/project1"

但它不起作用 - 数据仍然保存在 /tmp 中 - 我做错了什么?

【问题讨论】:

  • 您尝试在更改之前清理缓存? $yourCacheManangerObject->clean(Zend_Cache::CLEANING_MODE_ALL);
  • 我会回答问题:) resources.cachemanager.database.backend.name 中的数据库是缓存管理器对象吗?如果是这样,我不知道如何访问它。即使我不使用自己的 zend_cache 对象(/zend_cache---internal-metadatas---Zend_LocaleC_de_DE_currencynumber_ 是 ZF 自己制作的),也会出现我描述的问题。
  • 不,backend.name 是“后端缓存”的类型。 CacheMananger 对象设置在 Zend_Registry 上。使用 Zend_Registry::get('Zend_Cache_Manager') 来访问它。
  • initRequest() 的引导程序中执行此操作我什么也没得到(尚未设置)。也许我问的问题不够具体:我希望能够设置与我的应用程序直接无关的 ZF 缓存数据的路径(不是由我的应用程序设置,而是 ZF 本身设置,例如:zend_cache---internal -metadatas---Zend_LocaleC_de_DE_currencynumber 或 zend_cache---internal-metadatas---Zend_LocaleC_de_DE_currencysymbol_EUR)
  • 嗯,试试这个$_SERVER['TEMP'] = realpath('/tmp/project1');,看看this问题

标签: php zend-framework caching


【解决方案1】:

查看 Zend/Cache/Backend.php 代码时,有一些替代方法可以正确猜测 cache_dir:

  • 设置环境变量,例如 TMPDIR、TEMP 或 TMP
  • 在 php.ini 中设置“upload_tmp_dir”
  • 允许访问“/tmp”或“\temp”

那么$_SERVER['TEMP'] = realpath('/tmp/project1');会解决你的问题。

记得把缓存文件夹的权限改成777

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2012-01-06
    • 2011-10-17
    相关资源
    最近更新 更多