Как да използвам детектор на устройства Piwik в php проект?

Искам да използвам php детектор на устройства, който е част от известния Piwik проект, но не мога да разбера как да включа и използвам кода в моя 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

person علیرضا    schedule 03.05.2015    source източник
comment
какви грешки получаваш?   -  person Kamran    schedule 03.05.2015
comment
@KamranAdil актуализирам въпроса със съобщение за грешка.   -  person علیرضا    schedule 03.05.2015
comment
Здравейте - получихте ли отговор на това? Също така искам да използвам piwik детектор на устройства без композитор и всички останали piwik неща.   -  person Erick    schedule 12.05.2015
comment
Разбрах го. Доста лесно. Вземете копие на master и направете няколко модификации. pastebin.com/SXBYaC6B   -  person Erick    schedule 13.05.2015
comment
благодаря @Erick, мога да използвам детектора на устройства piwik с вашето ръководство. можете да добавите бележката Pastebin тук също като отговор. сега съм щастлив :)   -  person علیرضا    schedule 13.05.2015
comment
о, @Erick, получавам грешка, когато сменя своя потребителски агент: Fatal error: Class 'DeviceDetector\Parser\Client\Browser\Engine' not found in D:\device-detector-master\Parser\Client\Browser.php on line 250   -  person علیرضا    schedule 13.05.2015
comment
А, добавките към DeviceDetector.php - поставете ги след декларацията за пространството на имената. Добавих решението като отговор тук. Сравнете.   -  person Erick    schedule 15.05.2015


Отговори (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');
person Agustín Ríos Reyes    schedule 11.10.2016

За тези, които не използват автоматично зареждане, ето решение, което работи с 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');
person GreatBlakes    schedule 02.08.2016

person    schedule
comment
правя го. (използвам namespace преди изисква), но грешката остава. но грешката се натрупва само в някои потребителски агенти (като Konqueror в linux), както можете да видите в това изображение - person علیرضا; 15.05.2015
comment
Може ли да е ограничение? Липсващ регулярен израз? Донякъде се съмнявам, но нямам инсталиран konq никъде, за да го тествам. Има начин за актуализиране на моделите, но не съм сигурен какъв е той. Може би това го оправя? - person Erick; 18.05.2015
comment
да, предполагам, че може би липсва Regex или нещо подобно. аз също нямам браузъра, но използвам User Agent Switcher Добавка за Firefox. - person علیرضا; 19.05.2015
comment
Може също да се наложи да добавите require_once(dirname(__FILE__) . '/Browser/Engine.php'); към /Parser/Client/Browser.php долу вдясно в if (empty($engine)) { във функцията buildEngine. Ще предложа и редакция на приетия отговор. - person GreatBlakes; 04.08.2015
comment
Току-що потвърдихте, че можете да поставите require_once(dirname(__FILE__) . '/Parser/Client/Browser/Engine.php'); в края на списъка на Ерик от списъка require_once() в горната част на DeviceDetector.php, за да централизирате всички редакции на тази библиотека. Трябва да се постави след файловете ...ParserAbstract.php! - person GreatBlakes; 04.08.2015