4

我正在关注使用 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"
4

6 回答 6

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/"

也许是框架中关于它如何读取它正在传递的配置数组的错误?

于 2011-06-21T10:08:26.683 回答
2

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

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

于 2011-09-28T10:41:15.310 回答
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"
于 2011-06-21T14:10:53.317 回答
2

参数的格式似乎在 1.3 版中发生了变化——这里的 WURFL 文档有详细信息和示例文件。

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

$persistence['params']   = array(
    'dir' => $resourcesDir . '/cache/'
);
于 2011-06-28T11:30:31.683 回答
1

关于Jens Wegar 上面的回答,有一个错误修复请求来解决这个问题,因为不清楚。

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

于 2012-06-12T15:50:44.540 回答
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"
于 2011-06-10T11:30:34.773 回答