2011-06-09 85 views
4

我正在按照關於使用Zend Framework設置WURFL的教程來實現輕鬆的移動瀏覽器檢測。帶Zend框架的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觀察我的緩存目錄setti NG?

筆記:本教程使用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

不知道這是否是解決它的正確方法,但對我來說,問題是由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/" 

也許在關於如何讀取配置陣列它正在通過框架的錯誤嗎?;

+0

好吧,我甚至都不知道.ini文件中所有可能的東西。謝謝! – AntBrown 2011-06-23 02:07:29

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" 
+0

是的,我已經將這些相似的行添加到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」 – AntBrown 2011-06-14 03:41:01

+0

它還是壞了? – Carlo 2011-06-14 15:59:27

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" 
+0

可惜您的'patch []'行不在你原來的問題中 - 也許如果整個配置文件已經被包含了,有人可能會更早發現你的問題。此外,[Jens](http://stackoverflow.com/questions/6299986/wurfl-with-zend-framework-ignoring-cache-directory-configuration/6423588#6423588)具有'patches []'的配置,所以無論如何進一步的研究都是值得的。 – sarnold 2011-06-22 02:48:56

+0

我從來沒有在我原來的配置中有patch []行,但是在使用Jens answer和這個之後,我現在已經有了這部分工作。感謝大家的幫助。 – AntBrown 2011-06-23 02:09:38

2

看來參數的格式有在版本1.3更改 - WURFL文檔here有詳細信息和示例文件。

所以對於原來的問題,在$持久[ '目錄']行需要更改爲:

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

啊,這是文檔的位置!感謝您回答我最初的問題,如上所述,我已經採用.ini的方式做事,但這個答案對我來說是非常有用的+1! – AntBrown 2011-06-29 04:56:23