【问题标题】:How to use Piwik device detector in php project?如何在 php 项目中使用 Piwik 设备检测器?
【发布时间】:2015-07-12 17:21:21
【问题描述】:

我想使用著名的 Piwik 项目中的php device detector,但我不明白如何在我的 php 代码中包含和使用该代码?我不想使用作曲家。

我写道:

<?php
include 'DeviceDetector.php';
use DeviceDetector\DeviceDetector;
use DeviceDetector\Parser\Device\DeviceParserAbstract;

$dd = new DeviceDetector($_SERVER['HTTP_USER_AGENT']);

$dd->parse();

$clientInfo = $dd->getClient();
var_dump($clientInfo);

但它不起作用。我收到此错误:

Fatal error:  Uncaught exception 'Exception' with message 'client parser not found' in D:\DeviceDetector.php:214
Stack trace:
#0 D:\DeviceDetector.php(136): DeviceDetector\DeviceDetector->addClientParser('FeedReader')
#1 D:\index.php(67): DeviceDetector\DeviceDetector->__construct('Mozilla/5.0 (Wi...')
#2 {main}
  thrown in D:\DeviceDetector.php on line 214

【问题讨论】:

  • 你遇到了什么错误?
  • @KamranAdil 我用错误消息更新问题。
  • 我想通了。满容易。获取大师副本并制作一些模组。 pastebin.com/SXBYaC6B
  • 感谢@Erick,我可以在您的向导中使用 piwik 设备检测器。您也可以在此处添加 Pastebin 注释作为答案。我现在很高兴:)
  • 啊,添加到 DeviceDetector.php - 将它们放在命名空间声明之后。我在这里添加了解决方案作为答案。比较。

标签: php user-agent matomo


【解决方案1】:
// I figured it out.  Pretty easy.  Grab a copy of master and make a few mods.

// At the top of DeviceDetector.php and in this order:

namespace DeviceDetector;

require_once (dirname(__FILE__).'/spyc.php');

require_once (dirname(__FILE__).'/Cache/Cache.php');
require_once (dirname(__FILE__).'/Cache/StaticCache.php');

require_once (dirname(__FILE__).'/Parser/ParserAbstract.php');

require_once (dirname(__FILE__).'/Parser/Bot.php');
require_once (dirname(__FILE__).'/Parser/OperatingSystem.php');
require_once (dirname(__FILE__).'/Parser/VendorFragment.php');

require_once (dirname(__FILE__).'/Parser/Client/ClientParserAbstract.php');
require_once (dirname(__FILE__).'/Parser/Device/DeviceParserAbstract.php');

require_once (dirname(__FILE__).'/Parser/Client/Browser/Engine.php');

// Add as the first line of addClientParser():
        require_once (dirname(__FILE__).'/Parser/Client/'.$parser.'.php');

// Add as the first line of addDeviceParser():
        require_once (dirname(__FILE__).'/Parser/Device/'.$parser.'.php');

// You'll also have to grab a copy of spyc.php - google it - easy to find.

// That's it.  Works awesome.  Faster than anything else.

【讨论】:

  • 我这样做。 (我在需要之前使用namespace)但错误仍然存​​在。但是该错误仅在某些用户代理中产生(例如 linux 中的 Konqueror),正如您在 this image 中看到的那样
  • 可能是个限制?缺少正则表达式?我有点怀疑,但我没有在任何地方安装 konq 来测试。有一种方法可以更新模式,但不确定它是什么。也许可以解决它?
  • 是的,我猜它可能是缺少正则表达式或类似的东西。我也没有浏览器,但我使用User Agent Switcher Firefox 插件。
  • 您可能还需要在buildEngine 函数中if (empty($engine)) { 内右下角的/Parser/Client/Browser.php 中添加require_once(dirname(__FILE__) . '/Browser/Engine.php');。我也会对已接受的答案进行编辑。
  • 刚刚确认您可以将require_once(dirname(__FILE__) . '/Parser/Client/Browser/Engine.php'); 放在Erick 的require_once() 列表末尾DeviceDetector.php 的顶部,以集中对该库的所有编辑。它必须放在 ...ParserAbstract.php 文件之后!
【解决方案2】:

对于那些不使用自动加载器的人,根据 Erick 对以前版本的回答,这里有一个适用于 Device Detector 版本 3.10.1 的解决方案:

//Same as before, add this to the top of DeviceDetector.php in this order:

namespace DeviceDetector;

require_once(dirname(__FILE__) . '/Cache/Cache.php');
require_once(dirname(__FILE__) . '/Cache/StaticCache.php');
require_once(dirname(__FILE__) . '/Parser/ParserAbstract.php');
require_once(dirname(__FILE__) . '/Parser/BotParserAbstract.php');
require_once(dirname(__FILE__) . '/Parser/Bot.php');
require_once(dirname(__FILE__) . '/Parser/OperatingSystem.php');
require_once(dirname(__FILE__) . '/Parser/VendorFragment.php');
require_once(dirname(__FILE__) . '/Parser/Client/ClientParserAbstract.php');
require_once(dirname(__FILE__) . '/Parser/Device/DeviceParserAbstract.php');
require_once(dirname(__FILE__) . '/Parser/Client/Browser.php');
require_once(dirname(__FILE__) . '/Yaml/Parser.php');
require_once(dirname(__FILE__) . '/Yaml/Spyc.php');

//Same as before, you'll need to find  your own copy of spyc.php. Here is how I add it (pulls from a directory above the library):
require_once(realpath(dirname(__FILE__) . '/..') . '/spyc.php');

//Add as the first line of addClientParser():
require_once(dirname(__FILE__) . '/Parser/Client/' . $parser . '.php');

//Add as the first line of addDeviceParser():
require_once(dirname(__FILE__) . '/Parser/Device/' . $parser . '.php');

【讨论】:

    【解决方案3】:

    对我来说,我工作得很好。对于 DeviceDetector 3.7.3 版:

    namespace DeviceDetector;
    
    require_once(dirname(__FILE__) . '/Cache/Cache.php');
    require_once(dirname(__FILE__) . '/Cache/StaticCache.php');
    require_once(dirname(__FILE__) . '/Parser/ParserAbstract.php');
    require_once(dirname(__FILE__) . '/Parser/Bot.php');
    require_once(dirname(__FILE__) . '/Parser/OperatingSystem.php');
    require_once(dirname(__FILE__) . '/Parser/VendorFragment.php');
    require_once(dirname(__FILE__) . '/Parser/Client/ClientParserAbstract.php');
    require_once(dirname(__FILE__) . '/Parser/Device/DeviceParserAbstract.php');
    require_once(dirname(__FILE__) . '/Parser/Client/Browser/Engine.php');
    require_once(dirname(__FILE__) . '/Parser/Client/Browser/Engine/Version.php');
    require_once(dirname(__FILE__) . '/Parser/Client/Browser.php');
    require_once(dirname(__FILE__) . '/Yaml/Parser.php');
    require_once(dirname(__FILE__) . '/Yaml/Spyc.php');
    
    
    //Same as before, you'll need to find  your own copy of spyc.php. Here is how I add it (pulls from a directory above the library):
    require_once(realpath(dirname(__FILE__) . '/..') . '/spyc.php');
    
    //Add as the first line of addClientParser():
    require_once(dirname(__FILE__) . '/Parser/Client/FeedReader.php');
    require_once(dirname(__FILE__) . '/Parser/Client/MobileApp.php');
    require_once(dirname(__FILE__) . '/Parser/Client/MediaPlayer.php');
    require_once(dirname(__FILE__) . '/Parser/Client/PIM.php');
    require_once(dirname(__FILE__) . '/Parser/Client/Browser.php');
    require_once(dirname(__FILE__) . '/Parser/Client/Library.php');
    
    //Add as the first line of addDeviceParser():
    require_once(dirname(__FILE__) . '/Parser/Device/HbbTv.php');
    require_once(dirname(__FILE__) . '/Parser/Device/Console.php');
    require_once(dirname(__FILE__) . '/Parser/Device/CarBrowser.php');
    require_once(dirname(__FILE__) . '/Parser/Device/Camera.php');
    require_once(dirname(__FILE__) . '/Parser/Device/PortableMediaPlayer.php');
    require_once(dirname(__FILE__) . '/Parser/Device/Mobile.php');
    

    【讨论】:

      猜你喜欢
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      相关资源
      最近更新 更多