zend-frameworkwurfl

WURFL with Zend Framework ignoring cache directory configuration


I'm following the tutorial on setting up WURFL with Zend Framework to enable easy mobile browser detection.

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

I have got it setup to the point where it can detect a desktop browser and give me all the details and features of that browser, but when I try to access the website using an iPhone (mobile safari) it throws an error when trying to write to the cache directory.

Here's what I'm seeing in my error logs:

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

However in my configuration at /application/configs/wurfl-config.php I have set the cache directory to the following:

<?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;

I've also ensured it is writable by the server, but wurfl seems to think my cache directory is still /var/tmp

How can I get wurfl to observe my cache directory setting?

Notes: The tutorial uses wurfl-1.1 as the example, I have only been able to find wurfl-1.3 on sourceforge. This may be an issue.

Notes: I have these lines in my application.ini file:

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

Solution

  • Not sure if this is the correct way to fix it, but for me the issue was solved by adding an extra .dir after the persistence.dir key (using WURFL 1.3.0):

    In application.ini: (I don't use the php config file as I prefer not to mix in php code if I can use .ini directives)

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

    So my complete config for WURFL looks like this in Zend's 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/"
    

    perhaps a bug in the framework regarding how it reads the config array it's being passed?