Zend元数据缓存在文件中

时间:2012-08-12 10:15:00

标签: php zend-framework zend-db zend-cache access-rights

我在Zend Framework中设置了一个元数据缓存,因为执行了DESCRIBE个{em>批次,这会影响性能。

$frontendOptions = array ('automatic_serialization' => true);
$backendOptions = array ('cache_dir' => CACHE_PATH . '/db-tables-metadata');
$cache = Zend_Cache::factory(
    'Core',
    'File',
    $frontendOptions,
    $backendOptions
);
Zend_Db_Table::setDefaultMetadataCache($cache);

我确实可以看到创建的缓存文件,网站效果很好。

但是,当我启动单元测试或执行数据库查询的同一应用程序的脚本时,我最终会出现错误,因为 Zend无法读取缓存文件

这是因为在网站中,缓存文件是由www用户创建的,当我运行phpunit或脚本时,它会尝试用我的用户读取它们并且它失败

你看到有什么解决方案吗?我有一些quickfix的想法,但我正在寻找一个良好/稳定的解决方案。如果可能的话,我宁愿避免以www运行phpunit或脚本(出于实际原因)。

3 个答案:

答案 0 :(得分:1)

您是否希望在单元测试期间缓存表元数据?我通常会在开发/测试中禁用该缓存。

您可以尝试将测试用户添加到www组(usermod -a -G www testuser)。

有可能缓存文件具有标准644权限,这意味着您的用户仍然无法修改文件,但如果您在测试期间将缓存目录的权限设置为777那么你应该能够将新文件写入该目录。

如果使用CGI / FastCGI运行PHP,则可以将PHP作为用户而不是通用www用户运行。或者,如果您使用的是Apache模块,mod_suphp将允许您以用户身份运行PHP。

对不起它没有太大的帮助,但希望可以给你一些更多的想法..

答案 1 :(得分:1)

尝试sudo命令。像这样$sudo -u www php -f run-tests.php

修改

也许

$backendOptions = array ('cache_dir' => CACHE_PATH . '/db-tables-metadata', 'cache_file_umask' => 0755, 'cache_file_perm' => 0755);

答案 2 :(得分:-1)

我有一个类似的问题后来我发现,自从我运行其他几个应用程序服务器缓存后发生冲突意味着两个应用程序使用相同的缓存,尝试为所有类型命名cacheobject

并且如果你想要你也可以配置App.php文件来为单元测试创​​建不同的缓存文件,这是共享主机中常见的问题。