saturn-ru / php-browser-detection
通过解析User-Agent,快速检测浏览器、操作系统、平台和设备类型的PHP库
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-11 14:53:41 UTC
README
一个通过解析User-Agent来检测浏览器、操作系统、平台和设备类型的PHP库。
该库专注于高性能和低内存使用的HTTP客户端解析。
使用简单快速的算法准确检测超过200个浏览器/应用和超过60个操作系统。
对于大多数常见浏览器,即使在低级共享主机上,解析过程也少于0.0005秒。
在罕见User-Agent识别的情况下,相同条件下主机环境的识别时间少于0.0008秒。
该库仅支持真正当前的浏览器和操作系统,不支持已过时的环境,这些环境现在实际上并未使用。
包括最新MacOS Monterey、MacOS Ventura和Windows 11的User-Agent检测。
仅通过一个库文件工作,无需任何第三方库依赖。
要求
此库需要PHP 5.3或更高版本。
手动安装
- 只需将库文件
BrowserDetection.php(位于src目录中)上传到您的项目; - 使用
require_once连接PHP库文件
<?php require_once('BrowserDetection.php'); ?>
使用Composer安装
使用Composer安装此库
composer require foroco/php-browser-detection
通过运行命令更新库包
composer update foroco/php-browser-detection
第一步需要Composer自动加载器
<?php require ('vendor/autoload.php'); // If you use PHP in Windows OS use another path style: // require ('vendor\autoload.php'); ?>
用法
该库将尝试从HTTP客户端发送的HTTP_USER_AGENT头部获取环境数据。PHP类BrowserDetection包含四个公共方法,这些方法返回来自HTTP_USER_AGENT的识别数据的数组或JSON字符串
getAll();getOS();getBrowser();getDevice();
第一个参数应包含来自HTTP_USER_AGENT头部的User-Agent字符串或您自定义的User-Agent字符串。
第二个参数(可选)可能包含'JSON',如果您希望以JSON格式获取返回结果。
<?php $Browser = new foroco\BrowserDetection(); $useragent = $_SERVER['HTTP_USER_AGENT']; // Get all possible environment data (array): $result = $Browser->getAll($useragent); // Get OS data (array): $result = $Browser->getOS($useragent); // Get Browser data (array): $result = $Browser->getBrowser($useragent); // Get Device type data (array): $result = $Browser->getDevice($useragent); /* Also methods may returned result as JSON string Just use second argument of methods as 'JSON' */ // Get all possible environment data (JSON): $result = $Browser->getAll($useragent, 'JSON'); print_r($result); // ... etc ?>
库类BrowserDetection还包含特殊方法setTouchSupport()(可选,从版本1.1可用)。
此方法对于检测在Desktop Mode条件下的移动浏览器(Android和iOS)是必要的。
对于Desktop Mode检测,如果浏览器支持触摸事件,则应调用setTouchSupport()方法。
触摸事件检测通过目标浏览器中的客户端JavaScript代码执行。示例
if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) { // Touch Event detected }
返回变量的说明
操作系统类型 (os_type)
返回操作系统的类型(OS)。
所有可能的值
- 桌面
- 移动
- 混合
- 未知
操作系统家族 (os_family)
返回操作系统(OS)家族,或者在无法识别OS家族的情况下返回unknown。
例如:windows,linux,unix等。
操作系统名称 (os_name)
返回操作系统(OS)名称,或者在无法识别OS名称的情况下返回unknown。
例如:Windows,Android,macOS,iOS等。
操作系统版本 (os_version)
返回操作系统(OS)版本,或者在无法识别OS版本的情况下返回0。
可能包含数字、字符串或混合类型的OS版本。
对于数字OS版本(例如Android),包含主版本和次版本部分值,例如4.4,8.1,10等。
对于字符串OS版本(例如macOS),包含字符串版本名称值,例如Mavericks,Mojave,Catalina等。
对于 Windows 可能包含混合的版本类型值: 10、Vista、XP 等。
操作系统标题 (os_title)
返回包含操作系统名称和版本的操作系统的标题。
如果操作系统名称无法识别,也返回 unknown。
设备类型 (device_type)
基于某些 User-Agent 数据返回设备类型。
所有可能的值
- 桌面
- 移动
- tv
- 控制台
- 媒体播放器
- 汽车
- 手表
- 未知
浏览器名称 (browser_name)
返回浏览器名称,如果无法识别浏览器名称,则返回 unknown。
例如: Chrome、Firefox、UC Browser、华为浏览器、Vivaldi 等。
浏览器版本 (browser_version)
返回浏览器版本号,如果无法识别浏览器版本,则返回 0。
总是包含数值(整数或浮点数)。
对于应包含主要和次要浏览器版本部分的浏览器(例如 Safari、Vivaldi、PaleMoon 等),返回浮点数(例如 3.5、10.5、13.1)。
对于具有许多主要版本的浏览器(例如 Chrome、Firefox、Opera 等),仅返回主要十进制浏览器版本(例如 15、37、81)。
浏览器标题 (browser_title)
返回包含浏览器名称和浏览器版本的浏览器标题。
如果无法识别浏览器名称,也返回 unknown。
原始 Chrome 浏览器 (browser_chrome_original)
如果浏览器被识别为原始 Google Chrome 浏览器,则返回 1,否则返回 0。
原始 Firefox 浏览器 (browser_firefox_original)
如果浏览器被识别为原始 Mozilla Firefox 浏览器,则返回 1,否则返回 0。
原始 Safari 浏览器 (browser_safari_original)
如果浏览器被识别为原始 Apple Safari 浏览器,则返回 1,否则返回 0。
Chromium 版本 (browser_chromium_version)
如果浏览器基于 Chromium 引擎,则返回 Chromium 主要引擎版本号,否则返回 0。
Gecko 版本 (browser_gecko_version)
如果浏览器基于 Gecko 引擎,则返回 Gecko 主要引擎版本号,否则返回 0。
WebKit 版本 (browser_webkit_version)
如果浏览器基于 WebKit 引擎,则返回 WebKit 引擎版本号,否则返回 0。
总是浮点数值。
Android Webview (browser_android_webview)
如果检测到 Android Webview 模式,则返回 1,否则返回 0。
iOS Webview (browser_ios_webview)
如果检测到 iOS Webview 模式,则返回 1,否则返回 0。
桌面模式 (browser_desktop_mode)
如果移动浏览器在 桌面模式 下运行,则返回 1,否则如果没有检测到,则返回 0。
如果浏览器支持触摸事件,则应调用 setTouchSupport() 方法以检测 桌面模式。
64 位模式 (64bits_mode)
如果操作系统 (OS) 和浏览器在 64 位模式下一起工作,则返回 1,否则如果没有检测到 64 位模式,则返回 0。
仅适用于 getAll(); 和 getOS(); 方法。
使用示例
查看以下示例以了解库的使用案例。
检测全部
要检测所有可能的环境数据,请使用
<?php $Browser = new foroco\BrowserDetection(); $useragent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.4150.0 Iron Safari/537.36'; $result = $Browser->getAll($useragent); print_r($result); ?>
返回
Array
(
[os_type] => desktop
[os_family] => windows
[os_name] => Windows
[os_version] => 7
[os_title] => Windows 7
[device_type] => desktop
[browser_name] => Iron
[browser_version] => 80
[browser_title] => Iron 80
[browser_chrome_original] => 0
[browser_firefox_original] => 0
[browser_safari_original] => 0
[browser_chromium_version] => 80
[browser_gecko_version] => 0
[browser_webkit_version] => 0
[browser_android_webview] => 0
[browser_ios_webview] => 0
[browser_desktop_mode] => 0
[64bits_mode] => 1
)
操作系统检测
要仅解析操作系统数据,请使用
<?php $Browser = new foroco\BrowserDetection(); $useragent = 'Mozilla/5.0 (Linux; arm_64; Android 9; LLD-L31) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 YaBrowser/20.2.4.153.00 Mobile Safari/537.36'; $result = $Browser->getOS($useragent); print_r($result); ?>
返回
Array
(
[os_type] => mobile
[os_family] => android
[os_name] => Android
[os_version] => 9
[os_title] => Android 9
[64bits_mode] => 1
)
浏览器检测
要仅解析浏览器数据,请使用
<?php $Browser = new foroco\BrowserDetection(); $useragent = 'Mozilla/5.0 (iPad; CPU OS 9_3_4 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/80.0.3987.122 Mobile/13G35 Safari/601.1.46'; $result = $Browser->getBrowser($useragent); print_r($result); ?>
返回
Array
(
[browser_name] => Chrome
[browser_version] => 80
[browser_title] => Chrome 80
[browser_chrome_original] => 1
[browser_firefox_original] => 0
[browser_safari_original] => 0
[browser_chromium_version] => 80
[browser_gecko_version] => 0
[browser_webkit_version] => 0
[browser_android_webview] => 0
[browser_ios_webview] => 0
[browser_desktop_mode] => 0
)
设备检测
仅解析设备类型数据,请使用
<?php $Browser = new foroco\BrowserDetection(); $useragent = 'Mozilla/5.0 (SMART-TV; Linux; Tizen 5.0) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.2 Chrome/63.0.3239.84 TV Safari/537.36'; $result = $Browser->getDevice($useragent); print_r($result); ?>
返回
Array
(
[device_type] => tv
)
桌面模式检测
要检测移动浏览器是否在 桌面模式 下工作,请使用
<?php $Browser = new foroco\BrowserDetection(); $useragent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'; $Browser->setTouchSupport(); // Call if Touch events detected in browser by JavaScript code ('ontouchstart' in window) $result = $Browser->getAll($useragent); print_r($result); ?>
返回
Array
(
[os_type] => mobile
[os_family] => android
[os_name] => Android
[os_version] => 0
[os_title] => Android
[device_type] => mobile
[browser_name] => Chrome
[browser_version] => 81
[browser_title] => Chrome 81
[browser_chrome_original] => 1
[browser_firefox_original] => 0
[browser_safari_original] => 0
[browser_chromium_version] => 81
[browser_gecko_version] => 0
[browser_webkit_version] => 0
[browser_android_webview] => 0
[browser_ios_webview] => 0
[browser_desktop_mode] => 1
[64bits_mode] => 0
)
检测所有(JSON)
解析所有可能的环境数据,并返回JSON格式的字符串
<?php $Browser = new foroco\BrowserDetection(); $useragent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36'; $result = $Browser->getAll($useragent); print_r($result); ?>
返回
{"os_type":"mobile","os_family":"macintosh","os_name":"iOS","os_version":6,"os_title":"iOS 6","device_type":"mobile","browser_name":"Chrome","browser_version":78,"browser_title":"Chrome 78","browser_chrome_original":1,"browser_firefox_original":0,"browser_safari_original":0,"browser_chromium_version":78,"browser_gecko_version":0,"browser_webkit_version":0,"browser_android_webview":0,"browser_ios_webview":0,"browser_desktop_mode":0,"64bits_mode":0}
基准测试
基准测试在低级共享托管上执行。
测试服务器配置:RedHat Linux + LiteSpeed + PHP 扩展。
测试条件基于收集的约446000个非重复的真实用户代理字符串集合。
PHP 7.3中的用户代理识别性能(每秒请求次数)
getAll: ~ 31000 rps
getOS: ~ 120000 rps
getBrowser: ~ 43000 rps
getDevice: ~ 70000 rps
许可证
MIT许可证(MIT)
版权所有(c)2020-2023 Artem Murugov
特此授予任何获得此软件及其相关文档副本(“软件”)的人免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向获得软件的人提供软件副本以供其使用,但须遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
软件按“原样”提供,不提供任何形式(明示或暗示)的保证,包括但不限于适销性、适用于特定目的和无侵权性的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任(无论因合同、侵权或其他行为而产生)承担责任,无论是否与软件、软件的使用或其他交易有关。