cbschuld / browser.php
一个用于检测用户浏览器的PHP类。此封装使用浏览器用户代理字符串对浏览器及其版本进行分解。这不是一个保证的解决方案,但提供了一个总体准确的方式来检测用户正在使用什么浏览器。
Requires
- php: >=7.2
Requires (Dev)
- phpunit/phpunit: ^8
README
通过用户代理帮助在PHP级别检测用户的浏览器和平台
安装
您可以使用Composer将此库添加为项目依赖项,用于您的项目。
composer require cbschuld/browser.php
如果您只需要在开发期间使用此库,例如运行项目测试套件,那么您应该将其添加为开发时依赖项。
composer require --dev cbschuld/browser.php
典型用法
$browser = new Browser(); if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >=10 ) { echo 'You have FireFox version 10 or greater'; }
浏览器检测
此解决方案可以识别以下浏览器,并对版本进行最佳猜测
- Opera (
Browser::BROWSER_OPERA
) - WebTV (
Browser::BROWSER_WEBTV
) - NetPositive (
Browser::BROWSER_NETPOSITIVE
) - Edge (
Browser::BROWSER_EDGE
) - Internet Explorer (
Browser::BROWSER_IE
) - Pocket Internet Explorer (
Browser::BROWSER_POCKET_IE
) - Galeon (
Browser::BROWSER_GALEON
) - Konqueror (
Browser::BROWSER_KONQUEROR
) - iCab (
Browser::BROWSER_ICAB
) - OmniWeb (
Browser::BROWSER_OMNIWEB
) - Phoenix (
Browser::BROWSER_PHOENIX
) - Firebird (
Browser::BROWSER_FIREBIRD
) - UCBrowser (
Browser::BROWSER_UCBROWSER
) - Firefox (
Browser::BROWSER_FIREFOX
) - Mozilla (
Browser::BROWSER_MOZILLA
) - Palemoon (
Browser::BROWSER_PALEMOON
) - curl (
Browser::BROWSER_CURL
) - wget (
Browser::BROWSER_WGET
) - Amaya (
Browser::BROWSER_AMAYA
) - Lynx (
Browser::BROWSER_LYNX
) - Safari (
Browser::BROWSER_SAFARI
) - Playstation (
Browser::BROWSER_PLAYSTATION
) - iPhone (
Browser::BROWSER_IPHONE
) - iPod (
Browser::BROWSER_IPOD
) - Google Android(
Browser::BROWSER_ANDROID
) - Google Chrome(
Browser::BROWSER_CHROME
) - GoogleBot(
Browser::BROWSER_GOOGLEBOT
) - Yahoo! Slurp(
Browser::BROWSER_SLURP
) - W3C Validator(
Browser::BROWSER_W3CVALIDATOR
) - BlackBerry(
Browser::BROWSER_BLACKBERRY
)
操作系统检测
此解决方案可以识别以下操作系统
- Windows (
Browser::PLATFORM_WINDOWS
) - Windows CE (
Browser::PLATFORM_WINDOWS_CE
) - Apple (
Browser::PLATFORM_APPLE
) - Linux (
Browser::PLATFORM_LINUX
) - Android (
Browser::PLATFORM_ANDROID
) - OS/2 (
Browser::PLATFORM_OS2
) - BeOS (
Browser::PLATFORM_BEOS
) - iPhone (
Browser::PLATFORM_IPHONE
) - iPod (
Browser::PLATFORM_IPOD
) - BlackBerry (
Browser::PLATFORM_BLACKBERRY
) - FreeBSD (
Browser::PLATFORM_FREEBSD
) - OpenBSD (
Browser::PLATFORM_OPENBSD
) - NetBSD (
Browser::PLATFORM_NETBSD
) - SunOS (
Browser::PLATFORM_SUNOS
) - OpenSolaris (
Browser::PLATFORM_OPENSOLARIS
) - iPad (
Browser::PLATFORM_IPAD
)
历史和遗产
在利用一些最新前沿概念的Web应用程序中,检测用户的浏览器类型和版本非常有用。有了浏览器类型和版本,您可以通知用户他们可能遇到的挑战,并建议他们在使用此类应用程序之前升级。在大规模公开网站上这不是一个好主意;但在私有应用程序中,此类检查可能是有帮助的。
在我的一个活跃项目中,我们有一个相当图形丰富且视觉效果良好的用户界面,利用了大量透明的PNG文件。因为我们都知道IE6对PNG文件的支持有多糟糕,所以我们有必要以一种友好的方式告诉我们的用户他们的浏览器缺乏力量。
在PHP层而不是客户端层查找实现这一功能的方法,比我想象的要更具挑战性;可用的唯一脚本是由Gary White编写的,由于可靠性问题,Gary不再维护这个脚本。我确实100%同意Gary关于可读性的观点;然而,出于现实原因,我们可能需要用户的浏览器和浏览器版本,如果您的访问者没有发送一个假的用户代理,我们可以进行一个有根据的猜测。
这个解决方案是基于Gary White的原始工作,但我已经替换了他所有的原始代码。无论如何,感谢Gary。遗憾的是,我从未能够就这个解决方案与他取得联系。
测试
使用PHPUnit对测试/list目录中可用的已知用户代理进行测试。每个文件使用以下字段进行制表符分隔:
用户代理,用户代理类型,浏览器,版本,操作系统,操作系统版本
例如
Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16 Browser Opera 12.16 Linux Linux
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1 Browser Chrome 14.0.835.186 Macintosh OS X 10_7_2
可以使用phpunit运行测试
vendor/phpunit/phpunit/phpunit