PageRenderTime 51ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/get_ua.inc

https://github.com/jcplat/console-seolan
PHP | 799 lines | 715 code | 60 blank | 24 comment | 67 complexity | 94e1f696c4bf5d8267fdf322120092dd MD5 | raw file
Possible License(s): LGPL-2.0, LGPL-2.1, GPL-3.0, Apache-2.0, BSD-3-Clause
  1. <?php
  2. /*
  3. Auteur : Sébastien Guillon
  4. URL : http://sebastienguillon.com
  5. Article : http://sebastienguillon.com/journal/2005/10/script-php-pour-dechiffrer-les-chaines-user-agent
  6. Droits :
  7. copyright (c) 2005, Sébastien Guillon
  8. Utilisation libre pour les usages non commerciaux.
  9. Pour tout autre usage ou pour plus de précisions, contactez-moi via le formulaire sur :
  10. http://sebastienguillon.com/contact
  11. Créé : 12 octobre 2005
  12. Dernière modification : 22 janvier 2006
  13. */
  14. /*
  15. Resources :
  16. http://www.pgts.com.au/pgtsj/pgtsj0212d.html
  17. http://www.zytrax.com/tech/web/browser_ids.htm
  18. */
  19. function get_ua_info($ua_string, $detailed=1)
  20. {
  21. $ua['name'] = ''; // Nom générique ou nom du produit
  22. if($detailed) $ua['ua_version'] = ''; // Version déduite de la chaîne agent utilisateur
  23. $ua['ua_class'] = 'Unknown'; // Classe qui pourra être utilisée dans CSS
  24. $ua['ua_type'] = 'UnknownUA';// Type d'AU : Browser / Robot / FeedReader / Validator / MobileDevice (Ajouter CMS, Aggregateur, Aspirateur)
  25. $ua['os'] = ''; // Nom générique de la plateforme ou de l'OS
  26. if($detailed) $ua['os_version'] = ''; // Version de la plateforme ou de l'OS
  27. $ua['os_class'] = 'Unknown'; // Classe qui pourra être utilisée dans CSS
  28. // Agents utilisateur
  29. if(preg_match('@Opera@', $ua_string))
  30. {
  31. $ua['name'] = 'Opera';
  32. $ua['ua_class'] = 'Opera';
  33. $ua['ua_type'] = 'Browser';
  34. if($detailed)
  35. {
  36. if(preg_match('@Mozilla@', $ua_string))
  37. { // Lorsqu'Opera s'identifie comme un autre AU, le nom Opera et la version sont séparés par un espace (et placés à la fin)
  38. $ua['ua_version'] = get_ua_version($ua_string, 'Opera', ' ');
  39. if(preg_match('@MSIE@', $ua_string))
  40. { // Les version récentes d'Opera n'offrent le choix qu'entre MSIE et Mozilla
  41. $ua['ua_version'] = $ua['ua_version'].' (identifié comme MSIE)';
  42. }
  43. else
  44. { // Plus rare car Opera, avant 8.5, était configuré par défaut pour s'identifier comme MSIE
  45. $ua['ua_version'] = $ua['ua_version'].' (identifié comme Mozilla)'; // Plus un résultat par défaut qu'une identification précise (plus précis pour les version 7+)
  46. }
  47. }
  48. else
  49. { // Opera est identifié comme tout navigateur devrait le faire : avec son nom en premier
  50. $ua['ua_version'] = get_ua_version($ua_string, 'Opera');
  51. }
  52. }//detailed
  53. }
  54. elseif(preg_match('@Yahoo-Blogs@', $ua_string))
  55. {
  56. $ua['name'] = 'Yahoo-Blogs';
  57. $ua['ua_class'] = 'Yahoo';
  58. $ua['ua_type'] = 'Robot';
  59. }
  60. elseif(preg_match('@VoilaBot@', $ua_string))
  61. {
  62. $ua['name'] = 'Voila';
  63. $ua['ua_class'] = 'Voila';
  64. $ua['ua_type'] = 'Robot';
  65. if($detailed)
  66. {
  67. if(preg_match('@VoilaBot BETA 1.2@', $ua_string)) $ua['ua_version'] = 'BETA 1.2';
  68. }//detailed
  69. }
  70. elseif(preg_match('@Maxthon@', $ua_string))
  71. {
  72. $ua['name'] = 'Maxthon (MSIE)';
  73. $ua['ua_class'] = 'Maxthon';
  74. $ua['ua_type'] = 'Browser';
  75. }
  76. elseif(preg_match('@MyIE2@', $ua_string))
  77. {
  78. $ua['name'] = 'MyIE2 (MSIE)';
  79. $ua['ua_class'] = 'Maxthon';
  80. $ua['ua_type'] = 'Browser';
  81. }
  82. elseif(preg_match('@MSIE@', $ua_string))
  83. {
  84. $ua['name'] = 'Internet Explorer';
  85. $ua['ua_class'] = 'InternetExplorer';
  86. $ua['ua_type'] = 'Browser';
  87. if($detailed)
  88. { //http://msdn.microsoft.com/workshop/author/dhtml/overview/aboutuseragent.asp
  89. $ua['ua_version'] = get_ua_version($ua_string, 'MSIE', ' ');
  90. if(preg_match('@MSIE 7@i', $ua_string)){$ua['ua_class'] = 'InternetExplorer7';} // !!! À améliorer
  91. }//detailed
  92. }
  93. elseif (preg_match('@Firefox@', $ua_string))
  94. {
  95. $ua['name'] = 'Firefox';
  96. $ua['ua_class'] = 'Firefox';
  97. $ua['ua_type'] = 'Browser';
  98. if($detailed)
  99. {
  100. $ua['ua_version'] = get_ua_version($ua_string, 'Firefox');
  101. }//detailed
  102. }
  103. elseif(preg_match('@OmniWeb@', $ua_string))
  104. { // la chaîne AU d'Omniweb peut contenir les mots Safari, KHTML et Gecko, il faut donc le détecter avant,
  105. // bien que ce soit un navigateur rare.
  106. $ua['name'] = 'OmniWeb';
  107. $ua['ua_class'] = 'OmniWeb';
  108. $ua['ua_type'] = 'Browser';
  109. if($detailed)
  110. {
  111. if(preg_match('@OmniWeb/v5@i', $ua_string)) $ua['ua_version'] = '5';
  112. elseif(preg_match('@OmniWeb/v496@i', $ua_string)) $ua['ua_version'] = '4.5';
  113. elseif(preg_match('@OmniWeb/v4@i', $ua_string)) $ua['ua_version'] = '4';
  114. elseif(preg_match('@OmniWeb/4.2@i', $ua_string)) $ua['ua_version'] = '4.2';
  115. else $ua['ua_version'] = get_ua_version($ua_string, 'OmniWeb');
  116. }//detailed
  117. }
  118. elseif(preg_match('@Shiira@', $ua_string))
  119. { // la chaîne AU de Shiira peut contenir les mots Safari, KHTML et Gecko, il faut donc le détecter avant,
  120. // bien que ce soit un navigateur rare. Déjà rencontré : Shiira/1.2, Shiira/0.9.5.1
  121. $ua['name'] = 'Shiira';
  122. $ua['ua_class'] = 'Shiira';
  123. $ua['ua_type'] = 'Browser';
  124. if($detailed)
  125. {
  126. $ua['ua_version'] = get_ua_version($ua_string, 'Shiira');
  127. }//detailed
  128. }
  129. elseif(preg_match('@Safari@', $ua_string))
  130. {
  131. $ua['name'] = 'Safari';
  132. $ua['ua_class'] = 'Safari';
  133. $ua['ua_type'] = 'Browser';
  134. $ua['ua_version'] = get_ua_version($ua_string, 'Safari');
  135. }
  136. elseif(preg_match('@Camino@', $ua_string))
  137. {
  138. $ua['name'] = 'Camino';
  139. $ua['ua_class'] = 'Camino';
  140. $ua['ua_type'] = 'Browser';
  141. $ua['ua_version'] = get_ua_version($ua_string, 'Camino');
  142. }
  143. elseif(preg_match('@Konqueror@', $ua_string))
  144. {
  145. $ua['name'] = 'Konqueror';
  146. $ua['ua_class'] = 'Konqueror';
  147. $ua['ua_type'] = 'Browser';
  148. $ua['ua_version'] = get_ua_version($ua_string, 'Konqueror');
  149. }
  150. elseif(preg_match('@Lynx@', $ua_string))
  151. {
  152. $ua['name'] = 'Lynx';
  153. $ua['ua_class'] = 'Lynx';
  154. $ua['ua_type'] = 'Browser';
  155. if($detailed)
  156. {
  157. $ua['ua_version'] = get_ua_version($ua_string, 'Lynx');
  158. }//detailed
  159. }
  160. elseif(preg_match('@HTTrack@', $ua_string))
  161. {
  162. $ua['name'] = 'HTTrack';
  163. $ua['ua_class'] = 'HTTrack';
  164. $ua['ua_type'] = 'Browser';
  165. if($detailed)
  166. {
  167. if(preg_match('@HTTrack 3.0x@i', $ua_string)) $ua['ua_version'] = '3.0x';
  168. }//detailed
  169. }
  170. elseif(preg_match('@NokiaN70@', $ua_string))
  171. {
  172. $ua['name'] = 'NokiaN70';
  173. $ua['ua_class'] = 'NokiaN70';
  174. $ua['ua_type'] = 'MobileDevice';
  175. }
  176. elseif(preg_match('@iCab@', $ua_string))
  177. {
  178. $ua['name'] = 'iCab';
  179. $ua['ua_class'] = 'iCab';
  180. $ua['ua_type'] = 'Browser';
  181. if($detailed)
  182. {
  183. $ua['ua_version'] = get_ua_version($ua_string, 'iCab');
  184. }//detailed
  185. }
  186. elseif(preg_match('@Netscape@', $ua_string))
  187. {
  188. $ua['name'] = 'Netscape';
  189. $ua['ua_class'] = 'Netscape';
  190. $ua['ua_type'] = 'Browser';
  191. if($detailed)
  192. {
  193. $ua['ua_version'] = get_ua_version($ua_string, 'Netscape');
  194. }//detailed
  195. }
  196. elseif(preg_match('@Galeon@', $ua_string))
  197. {
  198. $ua['name'] = 'Galeon';
  199. $ua['ua_class'] = 'Galeon';
  200. $ua['ua_type'] = 'Browser';
  201. if($detailed)
  202. {
  203. $ua['ua_version'] = get_ua_version($ua_string, 'Galeon');
  204. }//detailed
  205. }
  206. elseif(preg_match('@Epiphany@', $ua_string))
  207. {
  208. $ua['name'] = 'Epiphany';
  209. $ua['ua_class'] = 'Epiphany';
  210. $ua['ua_type'] = 'Browser';
  211. if($detailed)
  212. {
  213. $ua['ua_version'] = get_ua_version($ua_string, 'Epiphany');
  214. }//detailed
  215. }
  216. elseif(preg_match('@Firebird@', $ua_string))
  217. {
  218. $ua['name'] = 'Firebird';
  219. $ua['ua_class'] = 'Firebird';
  220. $ua['ua_type'] = 'Browser';
  221. if($detailed)
  222. {
  223. $ua['ua_version'] = get_ua_version($ua_string, 'Firebird');
  224. }//detailed
  225. }
  226. elseif(preg_match('@K-Meleon@', $ua_string))
  227. {
  228. $ua['name'] = 'K-Meleon';
  229. $ua['ua_class'] = 'K-Meleon';
  230. $ua['ua_type'] = 'Browser';
  231. if($detailed)
  232. {
  233. $ua['ua_version'] = get_ua_version($ua_string, 'K-Meleon');
  234. }//detailed
  235. }// ---------------------------------------------------------------------------- Robots, Crawlers, Spiders
  236. elseif(preg_match('@Googlebot@', $ua_string))
  237. {
  238. $ua['name'] = 'Googlebot';
  239. $ua['ua_class'] = 'Google';
  240. $ua['ua_type'] = 'Robot';
  241. if($detailed)
  242. {
  243. if(preg_match('@Googlebot/2.1@i', $ua_string)) $ua['ua_version'] = '2.1';
  244. elseif(preg_match('@Googlebot-Image/1.0@i', $ua_string)) $ua['ua_version'] = 'Image/1.0';
  245. }//detailed
  246. }
  247. elseif(preg_match('@msnbot@', $ua_string))
  248. {
  249. $ua['name'] = 'MSN bot';
  250. $ua['ua_class'] = 'MSN';
  251. $ua['ua_type'] = 'Robot';
  252. if($detailed)
  253. {
  254. $ua['ua_version'] = get_ua_version($ua_string, 'msnbot');
  255. }//detailed
  256. }
  257. elseif(preg_match('@Java/@', $ua_string))
  258. {
  259. $ua['name'] = 'Java';
  260. $ua['ua_class'] = 'Java';
  261. $ua['ua_type'] = 'Robot';
  262. if($detailed)
  263. {
  264. $ua['ua_version'] = get_ua_version($ua_string, 'Java');
  265. }//detailed
  266. }
  267. elseif(preg_match('@Ask Jeeves/Teoma@', $ua_string))
  268. {
  269. $ua['name'] = 'Ask Jeeves';
  270. $ua['ua_class'] = 'AskJeeves';
  271. $ua['ua_type'] = 'Robot';
  272. }
  273. elseif(preg_match('@Slurp@', $ua_string))
  274. {
  275. $ua['name'] = 'Slurp';
  276. $ua['ua_class'] = 'Yahoo';
  277. $ua['ua_type'] = 'Robot';
  278. }
  279. elseif(preg_match('@OmniExplorer_Bot@', $ua_string))
  280. {
  281. $ua['name'] = 'OmniExplorer_Bot';
  282. $ua['ua_class'] = 'Default';
  283. $ua['ua_type'] = 'Robot';
  284. }
  285. elseif(preg_match('@ia_archiver@', $ua_string))
  286. {
  287. $ua['name'] = 'Alexa';
  288. $ua['ua_class'] = 'Alexa';
  289. $ua['ua_type'] = 'Robot';
  290. }
  291. elseif(preg_match('@Liferea@', $ua_string))
  292. {// ------------------------------------------------------------------------------ Feed Readers / Aggregators
  293. $ua['name'] = 'Liferea';
  294. $ua['ua_class'] = 'Default';
  295. $ua['ua_type'] = 'FeedReader';
  296. if($detailed)
  297. {
  298. $ua['ua_version'] = get_ua_version($ua_string, 'Liferea');
  299. }//detailed
  300. }
  301. elseif(preg_match('@FeedFetcher-Google@', $ua_string))
  302. {
  303. $ua['name'] = 'Google Reader';
  304. $ua['ua_class'] = 'Google';
  305. $ua['ua_type'] = 'FeedReader';
  306. }
  307. elseif(preg_match('@Bloglines@', $ua_string))
  308. {
  309. $ua['name'] = 'Bloglines';
  310. $ua['ua_class'] = 'Bloglines';
  311. $ua['ua_type'] = 'FeedReader';
  312. if($detailed)
  313. {
  314. $ua['ua_version'] = get_ua_version($ua_string, 'Bloglines');
  315. }//detailed
  316. }
  317. elseif(preg_match('@FeedDemon@', $ua_string))
  318. {
  319. $ua['name'] = 'FeedDemon';
  320. $ua['ua_class'] = 'FeedDemon';
  321. $ua['ua_type'] = 'FeedReader';
  322. if($detailed)
  323. {
  324. $ua['ua_version'] = get_ua_version($ua_string, 'FeedDemon');
  325. }//detailed
  326. }
  327. elseif(preg_match('@NetNewsWire@', $ua_string))
  328. {
  329. $ua['name'] = 'NetNewsWire';
  330. $ua['ua_class'] = 'Default';
  331. $ua['ua_type'] = 'FeedReader';
  332. if($detailed)
  333. {
  334. $ua['ua_version'] = get_ua_version($ua_string, 'NetNewsWire');
  335. }//detailed
  336. }
  337. elseif(preg_match('@AppleSyndication@', $ua_string))
  338. {
  339. $ua['name'] = 'AppleSyndication (Safari RSS reader)';
  340. $ua['ua_class'] = 'Safari';
  341. $ua['ua_type'] = 'FeedReader';
  342. if($detailed)
  343. {
  344. $ua['ua_version'] = get_ua_version($ua_string, 'AppleSyndication');
  345. }//detailed
  346. }
  347. elseif(preg_match('@NewsGatorOnline@', $ua_string))
  348. {
  349. $ua['name'] = 'NewsGator';
  350. $ua['ua_class'] = 'NewsGator';
  351. $ua['ua_type'] = 'FeedReader';
  352. if($detailed)
  353. {
  354. $ua['ua_version'] = get_ua_version($ua_string, 'NewsGatorOnline');
  355. }//detailed
  356. }
  357. elseif(preg_match('@Feedreader@', $ua_string))
  358. {
  359. $ua['name'] = 'Feedreader';
  360. $ua['ua_class'] = 'Feedreader';
  361. $ua['ua_type'] = 'FeedReader';
  362. }
  363. elseif(preg_match('@Thunderbird@', $ua_string))
  364. {
  365. $ua['name'] = 'Thunderbird';
  366. $ua['ua_class'] = 'Thunderbird';
  367. $ua['ua_type'] = 'FeedReader';
  368. if($detailed)
  369. {
  370. $ua['ua_version'] = get_ua_version($ua_string, 'Thunderbird');
  371. }//detailed
  372. }
  373. elseif(preg_match('@MagpieRSS@', $ua_string))
  374. {
  375. $ua['name'] = 'MagpieRSS';
  376. $ua['ua_class'] = 'MagpieRSS';
  377. $ua['ua_type'] = 'FeedReader';
  378. if($detailed)
  379. {
  380. $ua['ua_version'] = get_ua_version($ua_string, 'MagpieRSS');
  381. }//detailed
  382. }
  383. elseif(preg_match('@Waggr_Fetcher@', $ua_string))
  384. {
  385. $ua['name'] = 'Waggr';
  386. $ua['ua_type'] = 'FeedReader';
  387. }
  388. elseif(preg_match('@UniversalFeedParser@', $ua_string)) $ua['ua_type'] = 'FeedReader';
  389. elseif(preg_match('@PubSub-RSS-Reader@', $ua_string)) $ua['ua_type'] = 'FeedReader';
  390. elseif(preg_match('@SharpReader@', $ua_string)) $ua['ua_type'] = 'FeedReader';
  391. elseif(preg_match('@Technoratibot@', $ua_string))
  392. {
  393. $ua['name'] = 'Technoratibot';
  394. $ua['ua_class'] = 'Technorati';
  395. $ua['ua_type'] = 'Robot';
  396. if($detailed)
  397. {
  398. $ua['ua_version'] = get_ua_version($ua_string, 'Technoratibot');
  399. }//detailed
  400. }
  401. elseif(preg_match('@iTunes@', $ua_string))
  402. {
  403. $ua['name'] = 'iTunes';
  404. $ua['ua_class'] = 'iTunes';
  405. $ua['ua_type'] = 'Browser';
  406. }
  407. elseif(preg_match('@W3C_Validator@', $ua_string))
  408. {// ---------------------------------------------------------------------------------------------- Validators
  409. $ua['name'] = 'W3C Validator';
  410. $ua['ua_class'] = 'W3C';
  411. $ua['ua_type'] = 'Validator';
  412. if($detailed)
  413. {
  414. $ua['ua_version'] = get_ua_version($ua_string, 'W3C_Validator');
  415. }//detailed
  416. }
  417. elseif(preg_match('@CSE HTML Validator@', $ua_string))
  418. {
  419. $ua['name'] = 'CSE HTML Validator';
  420. $ua['ua_type'] = 'Validator';
  421. }
  422. elseif(preg_match('@Jigsaw@', $ua_string))
  423. {// W3C_CSS_Validator
  424. $ua['name'] = 'Jigsaw (W3C CSS Validator)';
  425. $ua['ua_class'] = 'Jigsaw';
  426. $ua['ua_type'] = 'Validator';
  427. if($detailed)
  428. {
  429. $ua['ua_version'] = get_ua_version($ua_string, 'Jigsaw');
  430. }//detailed
  431. }
  432. elseif(preg_match('@FeedValidator@', $ua_string))
  433. {
  434. $ua['name'] = 'FeedValidator';
  435. $ua['ua_class'] = 'FeedValidator';
  436. $ua['ua_type'] = 'Validator';
  437. if($detailed)
  438. {
  439. $ua['ua_version'] = get_ua_version($ua_string, 'FeedValidator');
  440. }//detailed
  441. }
  442. elseif(preg_match('@WDG_Validator@', $ua_string))
  443. {
  444. $ua['name'] = 'WDG_Validator';
  445. $ua['ua_class'] = 'WDGValidator';
  446. $ua['ua_type'] = 'Validator';
  447. if($detailed)
  448. {
  449. $ua['ua_version'] = get_ua_version($ua_string, 'WDG_Validator');
  450. }//detailed
  451. }
  452. elseif(preg_match('@Page Valet@', $ua_string))
  453. {
  454. $ua['name'] = 'Page Valet';
  455. $ua['ua_type'] = 'Validator';
  456. if($detailed)
  457. {
  458. $ua['ua_version'] = get_ua_version($ua_string, 'Page Valet');
  459. }//detailed
  460. }
  461. elseif(preg_match('@NetMechanic@', $ua_string))
  462. {
  463. $ua['name'] = 'NetMechanic';
  464. $ua['ua_type'] = 'Validator';
  465. if($detailed)
  466. {
  467. $ua['ua_version'] = get_ua_version($ua_string, 'NetMechanic', ' ');
  468. }//detailed
  469. }
  470. elseif(preg_match('@amaya@i', $ua_string))
  471. {
  472. $ua['name'] = 'Amaya';
  473. $ua['ua_class'] = 'Amaya';
  474. $ua['ua_type'] = 'Browser';
  475. if($detailed)
  476. {
  477. $ua['ua_version'] = get_ua_version($ua_string, 'amaya');
  478. }//detailed
  479. }
  480. elseif(preg_match('@Incutio@i', $ua_string))
  481. {
  482. $ua['name'] = 'Incutio';
  483. $ua['ua_class'] = 'Incutio';
  484. $ua['ua_type'] = 'Robot';
  485. }
  486. elseif(preg_match('@SeaMonkey@i', $ua_string))
  487. {
  488. $ua['name'] = 'SeaMonkey';
  489. $ua['ua_class'] = 'SeaMonkey';
  490. $ua['ua_type'] = 'Browser';
  491. if($detailed)
  492. {
  493. if(preg_match('@SeaMonkey/1.0a@i', $ua_string))
  494. {
  495. $ua['ua_version'] = '1.0a';
  496. $ua['ua_class'] = 'SeaMonkeyOld';
  497. }
  498. elseif(preg_match('@SeaMonkey/1.0b@i', $ua_string)) $ua['ua_version'] = '1.0b';
  499. else $ua['ua_version'] = get_ua_version($ua_string, 'SeaMonkey');
  500. }//detailed
  501. }
  502. elseif(preg_match('@AvantGo@i', $ua_string))
  503. {
  504. $ua['name'] = 'AvantGo';
  505. $ua['ua_class'] = 'AvantGo';
  506. $ua['ua_type'] = 'Browser';
  507. if($detailed)
  508. {
  509. $ua['ua_version'] = get_ua_version($ua_string, 'AvantGo', ' ');
  510. }//detailed
  511. }
  512. elseif(preg_match('@Mozilla/4@', $ua_string))
  513. {
  514. $ua['name'] = 'Navigator';
  515. $ua['ua_class'] = 'Navigator';
  516. $ua['ua_type'] = 'Browser';
  517. if($detailed)
  518. {
  519. $ua['ua_version'] = get_ua_version($ua_string, 'Mozilla');
  520. }//detailed
  521. }
  522. elseif(preg_match('@Mozilla/5.0@', $ua_string))
  523. {
  524. $ua['name'] = 'Mozilla';
  525. $ua['ua_class'] = 'Mozilla';
  526. $ua['ua_type'] = 'Browser';
  527. if($detailed)
  528. {
  529. $ua['ua_version'] = get_ua_version($ua_string, 'rv', ':');
  530. }//detailed
  531. }
  532. elseif(preg_match('@Gecko@', $ua_string))
  533. {
  534. $ua['name'] = 'Gecko';
  535. $ua['ua_class'] = 'Gecko';
  536. $ua['ua_type'] = 'Browser';
  537. }
  538. elseif(preg_match('@NetPositive@i', $ua_string))
  539. {
  540. $ua['name'] = 'NetPositive';
  541. $ua['ua_class'] = 'Default';
  542. $ua['ua_type'] = 'Browser';
  543. if($detailed)
  544. {
  545. $ua['ua_version'] = get_ua_version($ua_string, 'NetPositive');
  546. }//detailed
  547. }
  548. elseif(preg_match('@curl@', $ua_string))
  549. {
  550. $ua['name'] = 'cURL';
  551. $ua['ua_class'] = 'Default';
  552. $ua['ua_type'] = 'Browser';
  553. if($detailed)
  554. {
  555. $ua['ua_version'] = get_ua_version($ua_string, 'curl');
  556. }//detailed
  557. }
  558. elseif(preg_match('@ELinks@', $ua_string))
  559. {
  560. $ua['name'] = 'ELinks';
  561. $ua['ua_class'] = 'Default';
  562. $ua['ua_type'] = 'Browser';
  563. if($detailed)
  564. {
  565. $ua['ua_version'] = get_ua_version($ua_string, 'ELinks');
  566. }//detailed
  567. }
  568. elseif(preg_match('@AmigaVoyager@', $ua_string))
  569. {
  570. $ua['name'] = 'AmigaVoyager';
  571. $ua['ua_class'] = 'Default';
  572. $ua['ua_type'] = 'Browser';
  573. if($detailed)
  574. {
  575. $ua['ua_version'] = get_ua_version($ua_string, 'AmigaVoyager');
  576. }//detailed
  577. }
  578. // La détection des robots vient après la détection des navigateurs, car certains se font passer
  579. // pour des navigateurs. On conservera donc le nom du navigateur mais en sachant qu'il s'agit d'un robot.
  580. $robots = array('crawler', 'Freedom2Cache', 'polybot', 'Chilkat', 'LocalcomBot', 'larbin', 'Minuteman', 'Openfind',
  581. 'Python-urllib', 'Snoopy', 'Onet.pl', 'Ultraknowledge', 'FyberSpider', 'A2B', 'ping.blo.gs', 'Baiduspider', 'w3m',
  582. 'Syndic8', 'BecomeBot', 'Pompos', 'nicebot', 'MovableType', 'Crawler', 'ichiro', 'Combine', 'Findexa', 'ELinks',
  583. 'NutchCVS', 'MSRBOT', 'MJ12bot', 'appie', 'arameda.com', 'IconSurf', 'Sqworm', 'Gigabot', 'LinkWalker', 'AlbertBot',
  584. 'Yahoo-MMCrawler', 'EverbeeCrawler', 'ISC Systems iRc Search', 'libwww-perl', 'RssBandit', 'SBIder', 'Wget', 'Arachmo',
  585. 'SVSearchRobot', 'HTML Tidy fetchbot', 'RSS-SPIDER', 'htdig', 'RSSOwl', 'SVSpider', 'Mozdex', 'W3C-checklink',
  586. 'InternetArchive', 'HenryTheMiragoRobot', 'HenriLeRobotMirago', 'lmspider', 'rssImagesBot', 'yacy', 'EARTHCOM.info',
  587. 'Missigua Locator', 'Twisted PageGetter', 'get-lang parser', 'TrackBackBot', 'BlogPulse', 'always.hiding-out.com',
  588. 'MojeekBot', 'aipbot', 'UofTDB_experiment', 'Oracle Ultra Search', 'pipeLiner', 'CydralSpider', 'BlogsNowBot',
  589. 'robot\@mycatalog.ru', 'AIBOT', 'NG/2.0', 'WebIndexer', 'searchbot', 'Lonopono', 'Jakarta', 'Blogslive', 'topicblogs',
  590. 'Gaisbot', 'Kronenbourg 1664', 'tvholbot', 'OpenIntelligenceData', 'www.petitsage.fr', 'testbot', 'mod_accessibility',
  591. 'gsa-crawler', 'almaden.ibm.com', 'Xenu Link Sleuth', 'BruinBot', 'vspider', 'My Spider', 'TopSecretAgent',
  592. 'ZeBot_www.ze.bz', 'updated/0.1beta', 'messor.redants.net', 'QweeryBot', 'SurveyBot', 'geniebot', 'Blogshares',
  593. 'Dumbot', 'HooWWWer', 'noxtrumbot', 'Omnipelagos', 'Mediapartners-Google', 'PsSpider', 'VoilaBot', 'Septera',
  594. 'WordPress', 'ZyBorg', 'Port Huron Labs', 'WebRobot', 'Nutch', 'axod', 'URI::Fetch', 'BlogsNowBot', 'geourl',
  595. 'psbot', 'Calif Univ Tools', 'edgeio-retriever', 'WebZIP', 'HTTP::Lite', 'Everest-Vulcan', 'cfetch', 'Frontier',
  596. 'WEP Search', 'simon', 'Mo College', 'xirq', 'W3CRobot', 'Webdup', 'SearchIt-Bot', 'vivisimo', 'findlinks',
  597. 'Blogpulse', 'Mizzu', 'GT::WWW', 'EARTHCOM.info', 'OutfoxBot', 'EmeraldShield', 'Ipselonbot', 'findlinks',
  598. 'Bitacle', 'CFNetwork', 'Baldric', 'intraVnews', 'pavuk', 'ActiveLink', 'oBot', 'Prodiance', 'Custo',
  599. 'EmailSiphon', 'RufusBot', 'Opquast Test', 'ProxOper', 'iSiloX', 'ASPseek', 'sohu agent', 'Java1.4.0',
  600. 'Strategic Board Bot', 'findlinks', 'WebMiner', 'g2Crawler', 'k2spider', 'DataSpider', 'voyager', 'one0.com', 'http://herbert.groot.jebbink.nl/?app=ImagesHereImagesThereImagesEverywhere', 'Twiceler', 'MSFrontPage/4.0',
  601. 'Zeusbot', 'Ultraseek', 'Indy Library', 'BlogSearch', 'Web Downloader', 'Misterbot', 'EbiNess', 'Teleport Pro',
  602. 'gozilla', 'Exabot', 'Blogobot', 'SiteSucker', 'ImagesHereImagesThereImagesEverywhere', 'Pockey',
  603. 'Program Shareware', 'PerMan Surfer', 'genieBot', 'LetsCrawl.com', 'sohu-search');
  604. foreach($robots as $bot)
  605. {
  606. if(preg_match('@'.$bot.'@', $ua_string))
  607. {
  608. $ua['ua_type'] = 'Robot';
  609. break;
  610. }
  611. }
  612. // OS / plateforme
  613. if (preg_match('@Win@' ,$ua_string))
  614. { //http://msdn.microsoft.com/workshop/author/dhtml/overview/aboutuseragent.asp
  615. $ua['os'] = 'Windows';
  616. $ua['os_class'] = 'Windows';
  617. if($detailed)
  618. {
  619. if(preg_match('@Windows NT 5.1@i', $ua_string))
  620. {
  621. $ua['os_version'] = 'XP';
  622. $ua['os_class'] = 'WinXP';
  623. if(preg_match('@Media Center PC 2.8@i', $ua_string)) {$ua['os_version'] = 'Media Center 2004';$ua['os_class'] = 'WinXP';}
  624. elseif(preg_match('@Media Center PC 3.0@i', $ua_string)) {$ua['os_version'] = 'Media Center 2005';$ua['os_class'] = 'WinXP';}
  625. elseif(preg_match('@Media Center PC 3.1@i', $ua_string)) {$ua['os_version'] = 'Media Center 2005 + Update 1';$ua['os_class'] = 'WinXP';}
  626. elseif(preg_match('@Media Center PC 4.0@i', $ua_string)) {$ua['os_version'] = 'Media Center 2005 + Update 2';$ua['os_class'] = 'WinXP';}
  627. elseif(preg_match('@SV1@i', $ua_string)) {$ua['os_version'] = 'XP (SP2)';$ua['os_class'] = 'WinXP';}
  628. }
  629. elseif(preg_match('@Win 9x 4.90@i', $ua_string)) {$ua['os_version'] = 'Me';$ua['os_class'] = 'Win9x';}
  630. elseif(preg_match('@Windows ME@i', $ua_string)) {$ua['os_version'] = 'Me';$ua['os_class'] = 'Win9x';}
  631. elseif(preg_match('@Windows 98@i', $ua_string)) {$ua['os_version'] = '98';$ua['os_class'] = 'Win9x';}
  632. elseif(preg_match('@Windows 95@i', $ua_string)) {$ua['os_version'] = '95';$ua['os_class'] = 'Win9x';}
  633. elseif(preg_match('@Windows NT 5.01@i', $ua_string)) {$ua['os_version'] = '2000 (SP1)';$ua['os_class'] = 'Win9x';}
  634. elseif(preg_match('@Windows NT 5.0@i', $ua_string)) {$ua['os_version'] = '2000';$ua['os_class'] = 'Win9x';}
  635. elseif(preg_match('@Win95@i', $ua_string)) {$ua['os_version'] = '95';$ua['os_class'] = 'Win9x';}
  636. elseif(preg_match('@Win98@i', $ua_string)) {$ua['os_version'] = '98';$ua['os_class'] = 'Win9x';}
  637. elseif(preg_match('@Windows NT 4.0@i', $ua_string)) {$ua['os_version'] = 'NT 4.0';$ua['os_class'] = 'Win9x';}
  638. elseif(preg_match('@WinNT@i', $ua_string)) {$ua['os_version'] = 'NT';$ua['os_class'] = 'Win9x';}
  639. elseif(preg_match('@Windows NT 5.2@i', $ua_string)) {$ua['os_version'] = 'Server 2003';$ua['os_class'] = 'WinXP';}
  640. elseif(preg_match('@Windows NT 6.0@i', $ua_string)) {$ua['os_version'] = 'Vista';$ua['os_class'] = 'WindowsVista';}
  641. elseif(preg_match('@Windows NT@i', $ua_string)) {$ua['os_version'] = 'NT';$ua['os_class'] = 'Win9x';}
  642. elseif(preg_match('@Windows XP@i', $ua_string)) {$ua['os_version'] = 'XP';$ua['os_class'] = 'WinXP';}
  643. elseif(preg_match('@Windows CE@i', $ua_string)) {$ua['os_version'] = 'CE';$ua['os_class'] = 'WindowsCE';}
  644. }//detailed
  645. }
  646. elseif(preg_match('@Linux@i',$ua_string))
  647. {
  648. $ua['os'] = 'Linux';
  649. $ua['os_class'] = 'Linux';
  650. if($detailed)
  651. {
  652. if(preg_match('@Ubuntu@i', $ua_string)) {$ua['os_version'] = 'Ubuntu';$ua['os_class'] = 'Ubuntu';}
  653. elseif(preg_match('@Debian@i', $ua_string)) {$ua['os_version'] = 'Debian';$ua['os_class'] = 'Debian';}
  654. elseif(preg_match('@Fedora@i', $ua_string)) {$ua['os_version'] = 'Fedora';$ua['os_class'] = 'Fedora';}
  655. elseif(preg_match('@Red Hat@i', $ua_string)) {$ua['os_version'] = 'Red Hat';$ua['os_class'] = 'RedHat';}
  656. elseif(preg_match('@redhat@i', $ua_string)) {$ua['os_version'] = 'Red Hat';$ua['os_class'] = 'RedHat';}
  657. elseif(preg_match('@slackware@i', $ua_string)) {$ua['os_version'] = 'Slackware';$ua['os_class'] = 'Slackware';}
  658. elseif(preg_match('@Mandriva@i', $ua_string)) {$ua['os_version'] = 'Mandriva';$ua['os_class'] = 'Mandriva';}
  659. elseif(preg_match('@mdk@i', $ua_string)) {$ua['os_version'] = 'Mandrake';$ua['os_class'] = 'Mandriva';}
  660. elseif(preg_match('@SUSE@i', $ua_string)) {$ua['os_version'] = 'SUSE';$ua['os_class'] = 'SUSE';}
  661. elseif(preg_match('@Gentoo@i', $ua_string)) {$ua['os_version'] = 'Gentoo';$ua['os_class'] = 'Gentoo';}
  662. elseif(preg_match('@XandrOS@i', $ua_string)) {$ua['os_version'] = 'XandrOS';$ua['os_class'] = 'XandrOS';}
  663. elseif(preg_match('@gnu@i', $ua_string)) {$ua['os_version'] = 'GNU';$ua['os_class'] = 'GNU';}
  664. }//detailed
  665. }
  666. elseif(preg_match('@Mac@',$ua_string))
  667. {
  668. $ua['os'] = 'Mac';
  669. $ua['os_class'] = 'MacOS9';
  670. if($detailed)
  671. {
  672. if(preg_match('@Mac OS X@i', $ua_string)) {$ua['os_version'] = 'OS X';$ua['os_class'] = 'MacOSX';}
  673. elseif(preg_match('@PPC@i', $ua_string)) {$ua['os_version'] = 'OS 9';$ua['os_class'] = 'MacOS9';}
  674. elseif(preg_match('@Mac_PowerPC@i', $ua_string)) {$ua['os_version'] = 'OS 9';$ua['os_class'] = 'MacOS9';}
  675. }//detailed
  676. }
  677. elseif(preg_match('@FreeBSD@',$ua_string))
  678. {
  679. $ua['os'] = 'FreeBSD';
  680. $ua['os_class'] = 'FreeBSD';
  681. }
  682. elseif(preg_match('@SunOS@',$ua_string))
  683. {
  684. $ua['os'] = 'SunOS';
  685. $ua['os_class'] = 'SunOS';
  686. if($detailed)
  687. {
  688. if(preg_match('@SunOS 5.8 sun4u@i', $ua_string)) $ua['os_version'] = '5.8';
  689. elseif(preg_match('@SunOS sun4u@i', $ua_string)) $ua['os_version'] = 'sun4u';
  690. }//detailed
  691. }
  692. elseif(preg_match('@DragonFly@',$ua_string))
  693. {
  694. $ua['os'] = 'DragonFlyBSD';
  695. $ua['os_class'] = 'DragonFly';
  696. }
  697. elseif(preg_match('@Unix@',$ua_string))
  698. {
  699. $ua['os'] = 'Unix';
  700. $ua['os_class'] = 'Unix';
  701. }
  702. elseif(preg_match('@BeOS@',$ua_string))
  703. {
  704. $ua['os'] = 'BeOS';
  705. $ua['os_class'] = 'BeOS';
  706. }
  707. elseif(preg_match('@RISC OS@',$ua_string))
  708. {
  709. $ua['os'] = 'RISC OS';
  710. $ua['os_class'] = 'RISCOS';
  711. }
  712. elseif(preg_match('@AmigaOS@',$ua_string))
  713. {
  714. $ua['os'] = 'AmigaOS';
  715. $ua['os_class'] = 'Default';
  716. if($detailed)
  717. {
  718. $ua['os_version'] = get_ua_version($ua_string, 'AmigaOS');
  719. }//detailed
  720. }
  721. return $ua;
  722. }
  723. function get_ua_version($ua_string, $ua_name, $ua_version_delimiter = '/')
  724. {
  725. switch($ua_version_delimiter)
  726. {
  727. case '/':
  728. $pattern = "/$ua_name\/[a-zA-Z0-9\.]*/i";break;
  729. default:
  730. $pattern = "/".$ua_name.$ua_version_delimiter."[a-zA-Z0-9\.]*/i";
  731. }
  732. if(preg_match($pattern, $ua_string, $matches))
  733. {
  734. $matches_array = explode($ua_version_delimiter, $matches[0]);
  735. return $matches_array[1];
  736. }
  737. }
  738. ?>