使用Zend Framework的WURFL忽略缓存目录配置

时间:2011-06-09 22:17:47

标签: zend-framework wurfl

我正在关注使用Zend Framework设置WURFL的教程,以便轻松实现移动浏览器检测。

http://framework.zend.com/manual/en/zend.http.user-agent.html#zend.http.user-agent.quick-start

我已将其设置为可以检测桌面浏览器并向我提供该浏览器的所有详细信息和功能,但是当我尝试使用iPhone(移动版Safari)访问网站时,它会引发错误试图写入缓存目录。

以下是我在错误日志中看到的内容:

2011-06-08T22:32:34-07:00 ERR (3): The file cache directory does not exist and could not be created. Please make sure the cache directory is writeable: /var/tmp

但是在/application/configs/wurfl-config.php的配置中,我已将缓存目录设置为以下内容:

<?php
$resourcesDir            = dirname(__FILE__) . '/../../data/wurfl/';

$wurfl['main-file']      = $resourcesDir  . 'wurfl-2.0.27.zip';
$wurfl['patches']        = array($resourcesDir . 'web_browsers_patch.xml');

$persistence['provider'] = 'file';
$persistence['dir']      = $resourcesDir . '/cache/';

$cache['provider']       = null;

$configuration['wurfl']       = $wurfl;
$configuration['persistence'] = $persistence;
$configuration['cache']       = $cache;

我也确保它可以被服务器写入,但是wurfl似乎认为我的缓存目录仍然是/ var / tmp

如何让wurfl观察我的缓存目录设置?

备注:本教程使用wurfl-1.1作为示例,我只能在sourceforge上找到wurfl-1.3。这可能是一个问题。

备注:我在application.ini文件中有这些行:

; WURFL
resources.useragent.wurflapi.wurfl_api_version = "1.1"
resources.useragent.wurflapi.wurfl_lib_dir = APPLICATION_PATH "/../library/wurfl-php-1.3.0/WURFL/"
resources.useragent.wurflapi.wurfl_config_file = APPLICATION_PATH "/configs/wurfl-config.php"

6 个答案:

答案 0 :(得分:6)

不确定这是否是解决问题的正确方法,但对我来说,问题是通过在persistence.dir键之后添加额外的.dir来解决的(使用WURFL 1.3.0):

在application.ini中:(我不使用php配置文件,因为如果我可以使用.ini指令,我不想混用php代码)

resources.useragent.wurflapi.wurfl_config_array.persistence.dir.dir  = APPLICATION_PATH "/../data/wurfl/cache/"

所以我对WURFL的完整配置在Zend的application.ini中是这样的:

; Mobile device detection
resources.useragent.storage.adapter             = "Session"
resources.useragent.wurflapi.wurfl_api_version  = "1.1"
resources.useragent.wurflapi.wurfl_lib_dir      = APPLICATION_PATH "/../library/WURFL/"
resources.useragent.wurflapi.wurfl_config_array.wurfl.main-file      = APPLICATION_PATH "/../data/wurfl/wurfl.xml"
resources.useragent.wurflapi.wurfl_config_array.wurfl.patches[]      = APPLICATION_PATH "/../data/wurfl/web_browsers_patch.xml"
resources.useragent.wurflapi.wurfl_config_array.persistence.provider = "file"
resources.useragent.wurflapi.wurfl_config_array.persistence.dir.dir  = APPLICATION_PATH "/../data/wurfl/cache/"

可能是框架中有关如何读取正在传递的配置数组的错误?

答案 1 :(得分:2)

我刚刚解决了问题;)

从下面的代码行中删除[]

resources.useragent.wurflapi.wurfl_config_array.wurfl.patches[]      = APPLICATION_PATH "/../data/wurfl/web_browsers_patch.xml"

将其转换为:

resources.useragent.wurflapi.wurfl_config_array.wurfl.patches = APPLICATION_PATH "/../data/wurfl/web_browsers_patch.xml"

答案 2 :(得分:2)

在1.3版本中,参数的格式似乎已更改 - WURFL文档here包含详细信息和示例文件。

因此,对于原始问题,$ persistence ['dir']行需要更改为:

$persistence['params']   = array(
    'dir' => $resourcesDir . '/cache/'
);

答案 3 :(得分:2)

我使用Wurfl 1.3.1解决了这个问题并阅读了这个问题:

http://wurfl.sourceforge.net/nphp/

答案 4 :(得分:1)

关于Jens Wegar's answer above,有一个错误修复请求可以修复此问题,因为它不清楚。

http://framework.zend.com/issues/browse/ZF-12284

答案 5 :(得分:0)

您是否将UserAgent资源配置为使用此处显示的设置?

您必须将resource.useragent.wurfl_ *条目添加到您的application.ini文件中。

以下是一个示例:

resources.useragent.wurflapi.wurfl_api_version = "1.1"
resources.useragent.wurflapi.wurfl_lib_dir = APPLICATION_PATH "/../library/WURFL/"
resources.useragent.wurflapi.wurfl_config_file = APPLICATION_PATH "/configs/wurfl-config.php"