Lightning Fast, Minimalist PHP User Agent String Parser.

Overview

PHP User Agent Parser

Join the chat at https://gitter.im/PhpUserAgentParser/Lobby

Latest Stable Version Total Downloads License CI

What It Is

A simple, streamlined PHP user-agent parser!

Licensed under the MIT license: https://www.opensource.org/licenses/mit-license.php

Upgrading to 1.*

The new 1.* release does not break compatibility with 0.* and nothing need to change to upgrade. However, the global parse_user_agent is now deprecated; it has been replaced with the namespaced \donatj\UserAgent\parse_user_agent and functions exactly the same. You can easily replace any existing call to parse_user_agent with \donatj\UserAgent\parse_user_agent

In addition, 1.x adds a convenience object wrapper you may use should you prefer. More information on this is in the Usage section below.

Why Use This

You have your choice in user-agent parsers. This one detects all modern browsers in a very light, quick, understandable fashion. It is less than 200 lines of code, and consists of just three regular expressions! It can also correctly identify exotic versions of IE others fail on.

It offers 100% unit test coverage, is installable via Composer, and is very easy to use.

What It Does Not Do

This is not meant as a browser "knowledge engine" but rather a simple parser. Anything not adequately provided directly by the user agent string itself will simply not be provided by this.

OS Versions

User-agent strings are not a reliable source of OS Version!

  • Many agents simply don't send the information.
  • Others provide varying levels of accuracy.
  • Parsing Windows versions alone almost nearly doubles the size of the code.

I'm much more interested in keeping this thing tiny and accurate than adding niché features and would rather focus on things that can be done well.

All that said, there is the start of a branch to do it I created for a client if you want to poke it, I update it from time to time, but frankly if you need to reliably detect OS Version, using user-agent isn't the way to do it. I'd go with JavaScript.

Undetectable Browsers

  • Brave - Brave is simply not differentiable from Chrome. This was a design decision on their part.

Undetectable Platforms

  • iPadOS 13+ - Starting with iPadOS 13 and further hardened in 14, iPadOS returns the exact same string as macOS. It is no longer distinguishable by UA string. (See: #69)

Requirements

  • php: >=5.4.0

Installing

PHP User Agent is available through Packagist via Composer.

Install the latest version with:

composer require 'donatj/phpuseragentparser'

Usage

The classic procedural use is as simple as:

$ua_info = parse_user_agent();
/*
[
	'platform' => '[Detected Platform]',
	'browser'  => '[Detected Browser]',
	'version'  => '[Detected Browser Version]',
]
*/

The new object oriented wrapper form:

$parser = new UserAgentParser();

$ua = $parser->parse();
// or
$ua = $parser();

$ua->platform();
$ua->browser();
$ua->browserVersion();

Currently Detected Platforms

Predefined helper constants from donatj\UserAgent\Platforms

Constant Platform
Platforms::MACINTOSH Macintosh
Platforms::CHROME_OS Chrome OS
Platforms::LINUX Linux
Platforms::WINDOWS Windows
Platforms::ANDROID Android
Platforms::BLACKBERRY BlackBerry
Platforms::FREEBSD FreeBSD
Platforms::IPAD iPad
Platforms::IPHONE iPhone
Platforms::IPOD iPod
Platforms::KINDLE Kindle
Platforms::KINDLE_FIRE Kindle Fire
Platforms::NETBSD NetBSD
Platforms::NEW_NINTENDO_3DS New Nintendo 3DS
Platforms::NINTENDO_3DS Nintendo 3DS
Platforms::NINTENDO_DS Nintendo DS
Platforms::NINTENDO_SWITCH Nintendo Switch
Platforms::NINTENDO_WII Nintendo Wii
Platforms::NINTENDO_WIIU Nintendo WiiU
Platforms::OPENBSD OpenBSD
Platforms::PLAYBOOK PlayBook
Platforms::PLAYSTATION_3 PlayStation 3
Platforms::PLAYSTATION_4 PlayStation 4
Platforms::PLAYSTATION_5 PlayStation 5
Platforms::PLAYSTATION_VITA PlayStation Vita
Platforms::SAILFISH Sailfish
Platforms::SYMBIAN Symbian
Platforms::TIZEN Tizen
Platforms::WINDOWS_PHONE Windows Phone
Platforms::XBOX Xbox
Platforms::XBOX_ONE Xbox One

Currently Detected Browsers

Predefined helper constants from donatj\UserAgent\Browsers

Constant Browser
Browsers::ADSBOT_GOOGLE AdsBot-Google
Browsers::ANDROID_BROWSER Android Browser
Browsers::APPLEBOT Applebot
Browsers::BAIDUSPIDER Baiduspider
Browsers::BINGBOT bingbot
Browsers::BLACKBERRY_BROWSER BlackBerry Browser
Browsers::BROWSER Browser
Browsers::BUNJALLOO Bunjalloo
Browsers::CAMINO Camino
Browsers::CHROME Chrome
Browsers::CURL curl
Browsers::EDGE Edge
Browsers::FACEBOOKEXTERNALHIT facebookexternalhit
Browsers::FEEDVALIDATOR FeedValidator
Browsers::FIREFOX Firefox
Browsers::GOOGLEBOT Googlebot
Browsers::GOOGLEBOT_IMAGE Googlebot-Image
Browsers::GOOGLEBOT_VIDEO Googlebot-Video
Browsers::HEADLESSCHROME HeadlessChrome
Browsers::IEMOBILE IEMobile
Browsers::IMESSAGEBOT iMessageBot
Browsers::KINDLE Kindle
Browsers::LYNX Lynx
Browsers::MIDORI Midori
Browsers::MIUIBROWSER MiuiBrowser
Browsers::MSIE MSIE
Browsers::MSNBOT_MEDIA msnbot-media
Browsers::NETFRONT NetFront
Browsers::NINTENDOBROWSER NintendoBrowser
Browsers::OCULUSBROWSER OculusBrowser
Browsers::OPERA Opera
Browsers::PUFFIN Puffin
Browsers::SAFARI Safari
Browsers::SAILFISHBROWSER SailfishBrowser
Browsers::SAMSUNGBROWSER SamsungBrowser
Browsers::SILK Silk
Browsers::TELEGRAMBOT TelegramBot
Browsers::TIZENBROWSER TizenBrowser
Browsers::TWITTERBOT Twitterbot
Browsers::UC_BROWSER UC Browser
Browsers::VALVE_STEAM_TENFOOT Valve Steam Tenfoot
Browsers::VIVALDI Vivaldi
Browsers::WGET Wget
Browsers::WORDPRESS WordPress
Browsers::YANDEX Yandex
Browsers::YANDEXBOT YandexBot

More information is available at Donat Studios.

Comments
  • Remove anonymous function call

    Remove anonymous function call

    I have several user's getting error messages from PHP 5.4 about the anonymous function call for the $find function. Some users are using eAccelerator (which is broken and a dead project) some say they are not.

    As it's not really required and in fact adds overhead, this change removes it's use.

    This change also removes the strtolower() call for the search term (it's always a hard coded string so I just manually lowered the strings) and only calls strtolower() once for the results array (instead of on each call to $find).

    opened by toolstack 17
  • Edge?

    Edge?

    How about the new Edge browser? :-)

    Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240

    opened by am-cego 7
  • Rename Macintosh to Mac

    Rename Macintosh to Mac

    Hello

    Could we perhaps rename the Macintosh platform to simply Mac? It hasn't been branded as Macintosh since 1998, and I'd like to avoid having to "translate" this to Mac for newer users that simply don't know what a Macintosh is.

    opened by nickdnk 5
  • 1.x Release Development

    1.x Release Development

    I am currently working on a 1.x "major release" which involves some tidying.

    I've noted that a lot of people are requiring "*"as their version when I searched github for the packagist name 😢 which means if I made breaking changes I would break their install if they composer updated.

    They should use semantic versioning to avoid this, but I still wish to avoid causing unessessary pain.

    As such I will try my best to maintain compatibility with this major release. 2.x however I may want to actually move this into a namespace to be more friendly.

    opened by donatj 5
  • PlayStation 3 Support

    PlayStation 3 Support

    Currently the PS3 is not seen properly, depending on what version of software the PlayStation is running it will either have all fields blank or have a version entry only. The two examples of the user agent I have are:

    Mozilla/5.0 (PLAYSTATION 3; 1.00)
    
    Mozilla/5.0 (PLAYSTATION 3 4.20) AppleWebKit/531.22.8 (KHTML, like Gecko)
    

    I have added crude support. Here is my patch.

    *** Source/UserAgentParser.php  Tue Aug 28 14:00:19 2012
    --- Source/UserAgentParser.php  Tue Aug 28 14:01:12 2012
    ***************
    *** 19,26 ****
    
        if( preg_match('/\((.*?)\)/im', $u_agent, $regs) ) {
    
    !       # (?<platform>Android|iPhone|iPad|Windows|Linux|Macintosh|Windows Phone OS|Silk|linux-gnu|BlackBerry)(?: i386| i686| x86_64)?(?: NT)?(?:[ /][0-9._]+)*(;|$)
    !       preg_match_all('%(?P<platform>Android|iPhone|iPad|Windows|Linux|Macintosh|Windows Phone OS|Silk|linux-gnu|BlackBerry)(?: i386| i686| x86_64)?(?: NT)?(?:[ /][0-9._]+)*(;|$)%iim', $regs[1], $result, PREG_PATTERN_ORDER);
            $result['platform'] = array_unique($result['platform']);
            if( count($result['platform']) > 1 ) {
                if( ($key = array_search( 'Android', $result['platform'] )) !== false ) {
    --- 19,26 ----
    
        if( preg_match('/\((.*?)\)/im', $u_agent, $regs) ) {
    
    !       # (?<platform>Android|iPhone|iPad|Windows|Linux|Macintosh|Windows Phone OS|Silk|linux-gnu|BlackBerry|PLAYSTATION 3)(?: i386| i686| x86_64)?(?: NT)?(?:[ /][0-9._]+)*(;|$)
    !       preg_match_all('%(?P<platform>Android|iPhone|iPad|Windows|Linux|Macintosh|Windows Phone OS|Silk|linux-gnu|BlackBerry|PLAYSTATION 3)(?: i386| i686| x86_64)?(?: NT)?(?:[ /][0-9._]+)*(;|$)%iim', $regs[1], $result, PREG_PATTERN_ORDER);
            $result['platform'] = array_unique($result['platform']);
            if( count($result['platform']) > 1 ) {
                if( ($key = array_search( 'Android', $result['platform'] )) !== false ) {
    ***************
    *** 77,82 ****
    --- 77,88 ----
            $data['browser'] = $result['browser'][0];
            $data['version'] = $result['version'][0];
        }
    +   if($data['platform'] == 'PLAYSTATION 3'){
    +       $data['platform'] = 'PlayStation';
    +       $data['browser'] = 'PS3 Browser';
    +       preg_match_all('%(?P<version>[0-9.]{4})%im', $u_agent, $result, PREG_PATTERN_ORDER);
    +       $data['version'] = $result['version'][0];
    +   }
    
        return $data;
    
    opened by cocide 4
  • Link Preview user agent - such as in iMessage or Telegram?

    Link Preview user agent - such as in iMessage or Telegram?

    Curious if this can be used to definitively know if it's a Link Preview user agent - such as in iMessage or Telegram? (Useful for making sure the graphlink image is sized appropriately etc)

    opened by yosun 3
  • Added some *BSD OSes

    Added some *BSD OSes

    Hi,

    I like your parser but I couldn't agree with

    if( $platform == 'linux-gnu' || $platform == 'X11' ) { $platform = 'Linux'; }

    because all Unix and Unix-like OSes (still) use X11. With this patch I added most used opensource *BSDs - OpenBSD, FreeBSD and NetBSD.

    opened by goshoo 3
  • Add Platform Version

    Add Platform Version

    It'd be great to gather the platform version where possible. Such as "Windows 10", and for extra brownie points browser version too.

    I'd love to see this added.

    Thanks!

    opened by tmfksoft 3
  • Move the function to a class

    Move the function to a class

    Hi,

    is it possible that you move your function inside a class / method?

    With the function only approach, i have a lot of problems in case of testing / mocking.

    opened by ThaDafinser 3
  • Support for iOS Chrome

    Support for iOS Chrome

    This adds support for iOS devices using Chrome browser as documented here https://developer.chrome.com/multidevice/user-agent.

    Have added two test cases with iPad and iPhone.

    opened by bairdj 3
  • Avoid PHP errors if the RegEx doesn't match anything

    Avoid PHP errors if the RegEx doesn't match anything

    Ran into a problem where if I provide an invalid User Agent which doesn't match the RegEx, it throws undefined index 0 errors. So just added a quick check to break out if it didn't match anything.

    opened by manavo 3
  • Consistent detection of

    Consistent detection of "Safari shells" in iOS

    After giving up on some "simple regex" to detect common browsers (yep, you know for which project lol), I landed in this library :) Thus, I already had a bunch of UA strings to test against; I noticed that, while iPhone/CriOS is detected as Chrome on iPhone, FxiOS and EdgiOS end up simply as Safari.

    This seems related to #40 since there might not be much value on distinguishing them all, but looking from a statistical POV, it would make some sense to separate the shells from the actual Safari. Besides that, consistency is always good :)

    Samples:

    Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/103.0.5060.63 Mobile/15E148 Safari/604.1
    Mozilla/5.0 (iPad; CPU OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/103.0.5060.63 Mobile/15E148 Safari/604.1
    Mozilla/5.0 (iPhone; CPU iPhone OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/101.0 Mobile/15E148 Safari/605.1.15
    Mozilla/5.0 (iPad; CPU OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/101.0 Mobile/15E148 Safari/605.1.15
    Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 EdgiOS/100.1185.50 Mobile/15E148 Safari/605.1.15
    
    opened by igorsantos07 6
  • Googlebot Mobile not Detected

    Googlebot Mobile not Detected

    Hi,

    For this user agent : Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.97 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

    parse_user_agent() return : browser => Chrome platform => Android version => 90.0.4430.97

    opened by dutom007 2
  • Consider supporting smart TV UA strings.

    Consider supporting smart TV UA strings.

    Would you consider detecting popular smart TV operating systems? (like LG WebOS). What about detecting Apple TV, Google Chromecast and others? I know that most of them are running Linux, but it would be nice to get more specific results.

    Samrt TV UA strings: https://deviceatlas.com/blog/list-smart-tv-user-agent-strings List of LG WebOS user agent strings: http://webostv.developer.lge.com/discover/specifications/web-engine/

    opened by akosphp 1
  • Instagram and Snapchat browsers

    Instagram and Snapchat browsers

    Can you detect them?

    Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Instagram 159.0.0.28.123 (iPhone11,8; iOS 13_7; cs_CZ; cs-CZ; scale=2.00; 828x1792; 244425769)

    Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Snapchat/11.1.0.65 (iPhone12,1; iOS 13.6.1; gzip)

    Thanks

    opened by luigifab 6
  • Chrome User Agent phase out

    Chrome User Agent phase out

    opened by dannette 12
  • Support reading system details even the user agent is not fully written

    Support reading system details even the user agent is not fully written

    Thank you for this amazing function <3

    Current version does not support reading details in User-Agent if it is not full detailed. Example: User-Agent: AppName/1.0.23 (example.com/AppName; [email protected]).

    It just read the AppName with version and does not read the system details.

    This case usually used when contacting APIs where everyone should write self-described User-Agent.

    Many Thanks

    opened by samaphp 5
Releases(v0.22.0)
  • v0.22.0(Aug 8, 2022)

  • v1.7.0(Aug 8, 2022)

    • Fix deprecation notice on PHP 8.1 #86 - Thanks @kocsismate
    • Fix AndroidBrowser detection on old versions of Android

    Full Changelog: https://github.com/donatj/PhpUserAgent/compare/v1.6.1...v1.7.0

    Source code(tar.gz)
    Source code(zip)
  • v1.6.1(Jun 8, 2022)

    What's Changed

    • Make Edge case sensitive by @donatj in https://github.com/donatj/PhpUserAgent/pull/82 - Thanks @PatNowak

    Full Changelog: https://github.com/donatj/PhpUserAgent/compare/v1.6.0...v1.6.1

    Source code(tar.gz)
    Source code(zip)
  • v0.21.1(Jun 8, 2022)

    DEPRECATED RELEASE - PLEASE UPGRADE TO 1.16.1 for EXACT PARITY

    https://github.com/donatj/PhpUserAgent/releases/tag/v1.6.1

    Full Changelog: https://github.com/donatj/PhpUserAgent/compare/v0.21.0...v0.21.1

    Source code(tar.gz)
    Source code(zip)
  • v1.6.0(Apr 20, 2022)

    What's Changed

    • Add Support for Android Edge a36be7dfd22b100ce51845e26cc4c07831d5f3da
    • Test in PHP 8.1 0591e709731f818f74b71f6dd9a4f4fbb23846d7
    • Make tooling work in PHP 8 ea4c802140f99859023a990ec98ece1f58567428
    • Adds a decent chunk of test coverage https://github.com/donatj/PhpUserAgent/compare/a36be7dfd22b100ce51845e26cc4c07831d5f3da...c84fd3c205097843aab93290f2a5744b4159e815
    • add json extension requirement to composer by @Rotzbua in https://github.com/donatj/PhpUserAgent/pull/76
    • add three-digit major version number test by @Rotzbua in https://github.com/donatj/PhpUserAgent/pull/78
    • Removing unused extensions from CI by @donatj in https://github.com/donatj/PhpUserAgent/pull/79

    New Contributors

    • @Rotzbua made their first contribution in https://github.com/donatj/PhpUserAgent/pull/76

    Full Changelog: https://github.com/donatj/PhpUserAgent/compare/v1.5.0...v1.6.0

    Source code(tar.gz)
    Source code(zip)
  • v0.21.0(Apr 20, 2022)

    UPGRADE TO 1.16.0 for EXACT PARITY

    https://github.com/donatj/PhpUserAgent/releases/tag/v1.6.0

    Full Changelog: https://github.com/donatj/PhpUserAgent/compare/v0.20.0...v0.21.0

    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Sep 16, 2021)

  • v1.4.0(Mar 16, 2021)

    Adds official support for TelegramBot and Twitterbot.

    They were already detected but did not have constants nor tests.

    Adds sniffing and support for iMessageBot.

    Source code(tar.gz)
    Source code(zip)
  • v0.20.0(Mar 16, 2021)

    Adds official support for TelegramBot and Twitterbot.

    They were already detected but did not have tests.

    Adds sniffing and support for iMessageBot.

    Please upgrade to the 1.x release.

    This is a deprecated release for compatibility.

    The functionality of this release is mirrored exactly by v1.3.0 and does not break compatibility. You can easily upgrade.

    The 0.x releases will soon no longer be maintained.

    Please upgrade ASAP.

    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Feb 18, 2021)

  • v0.19.0(Feb 18, 2021)

    Adds:

    • Support for Miui Browser
    • Support for Sailfish OS
    • Support for Sailfish Browser

    Please consider upgrading to the 1.x release.

    This is a deprecated release for compatibility.

    The functionality of this release is mirrored exactly by v1.3.0 and does not break compatibility. The 0.x releases will soon no longer be maintained. Please upgrade ASAP.

    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Dec 29, 2020)

  • v0.18.0(Dec 29, 2020)

    • Older versions of UC Browser noted the platform as Adr rather than Android - handle this weirdness.
    • Add a bunch of tests for UC Browser

    Please consider upgrading to the 1.x release.

    This is a deprecated release for compatibility.

    The functionality of this release is mirrored exactly by v1.2.0 and does not break compatibility. The 0.x releases will soon no longer be maintained. Please upgrade ASAP.

    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Sep 1, 2020)

  • v0.17.0(Sep 1, 2020)

    Adds support for the Applebot - http://www.apple.com/go/applebot

    Please consider upgrading to the 1.x release.

    The functionality of this release is mirrored by v1.1.0 and does not break backwards compatibility. The 0.x releases will soon no longer be maintained.

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Apr 24, 2020)

    This is a major rework of the entire project that took just under 2 years. The utmost care went into considering how to keep this both the small and light library the community enjoys, but also add features people have been clamoring for since the beginning. I really believe we've hit the nail on the head here.

    Backwards Compatibility Considerations:

    A lot of work went into not breaking compatibility especially for people not using composer. If you encounter any issues with compatibility let us know and we will fix it ASAP.

    All required "functional" logic remains in a single file src/UserAgentParser.php This is specifically to make the library easy to use for people who do not use composer.

    Adds:

    • Object oriented convenience wrapper ecosystem.
      • \donatj\UserAgent\UserAgentParser - Object oriented parse_user_agent call wrapper.
      • \donatj\UserAgent\UserAgent - Object oriented response object.
      • \donatj\UserAgent\UserAgentInterface - Helper interface for test mocking.
    • Namespaced \donatj\UserAgent\parse_user_agent function to mirror global parse_user_agent
    • Constants for the returned arrays keys
      • \donatj\UserAgent\PLATFORM = 'platform';
      • \donatj\UserAgent\BROWSER = 'browser';
      • \donatj\UserAgent\BROWSER_VERSION = 'version';
    • Helpful predefined constants to check against for Platforms and Browsers generated from the same dataset as the tests.
      • \donatj\UserAgent\Browsers::*
      • \donatj\UserAgent\Platforms::*
    • Even more test cases

    Changes:

    • parse_user_agent is deprecated in favor of \donatj\UserAgent\parse_user_agent
      • Will remain in the code until at least 2.x

    Thus require "{$dir}/src/UserAgentParser.php"; remains a supported method of using the library.

    Upgrading to 1.*

    The new 1.* release does not break compatibility with 0.* and nothing need to change to upgrade. However, the global parse_user_agent is now deprecated; it has been replaced with the namespaced \donatj\UserAgent\parse_user_agent and functions exactly the same. You can easily replace any existing call to parse_user_agent with \donatj\UserAgent\parse_user_agent

    In addition, 1.x adds a convenience object wrapper you may use should you prefer. More information on this is in the Usage section of the README.


    I would also like to personally thank @mimmi20 for helping review ideas early in the project's life cycle.

    Source code(tar.gz)
    Source code(zip)
  • v0.16.0(Apr 7, 2020)

    Fixes:

    • Corrects an issue detecting with newer versions of UC Browser. See: #63

    Updates:

    • Refactored the code into a smaller number of test cases. Seems to actually be a very slight performance boon.
    Source code(tar.gz)
    Source code(zip)
  • v0.15.0(Jan 21, 2020)

  • v0.14.0(Sep 30, 2019)

  • v0.13.0(Mar 8, 2019)

    Performance Improvements!

    I made a number of seemingly minor changes to the regular expressions that when benchmarked resulted in a nearly 3% performance improvement.

    Reorganized directory structure to be more standard

    | Old Path | New Path | |----------|----------| | Source/ | src/ | | Tools/ | bin/ | | Tests/ | test/ |

    Warning: if you are directly requiring the PHP file rather than using composer this will be a breaking change.

    Source code(tar.gz)
    Source code(zip)
  • v0.12.0(Feb 22, 2019)

  • v0.11.1(Oct 25, 2018)

    Adds support for Yandex.


    v0.11.0 was deleted.

    A cherry pick from an upstream branch went awry as it made use of a constant not currently defined.

    This hotfix removes said constant.

    Source code(tar.gz)
    Source code(zip)
  • v0.10.0(Jun 21, 2018)

  • v0.9.0(Oct 23, 2017)

  • v0.8.0(Oct 23, 2017)

    It was pointed out that a number of BSD based OS's showed up as "Linux" which isn't accurate/correct.

    This has been corrected with the help of @goshoo

    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(Mar 1, 2017)

  • v0.6.0(Jan 23, 2017)

  • v0.5.3(Dec 16, 2016)

  • v0.5.2(Sep 1, 2016)

    UC Browser has hit 7% globally and I decided I needed to support it officially.

    This release also includes a fairly large refactor that netted me -18 loc overall.

    Source code(tar.gz)
    Source code(zip)
  • v0.5.1(Mar 7, 2016)

Owner
Jesse Donat
Keyboard collector. PHP and Go Developer.
Jesse Donat
Helps detect the user's browser and platform at the PHP level via the user agent

cbschuld/browser.php Helps detect the user's browser and platform at the PHP level via the user agent Installation You can add this library as a local

Chris Schuld 574 Dec 16, 2022
⚡️Lightning-fast linter for .env files. Written in Rust 🦀

⚡️ Lightning-fast linter for .env files. Written in Rust ?? Dotenv-linter can check / fix / compare .env files for problems that may cause the applica

null 1.5k Dec 31, 2022
Build lightning-fast and feature-rich websites with ProcessWire.

WIREKIT Core Build lightning-fast and feature-rich websites with ProcessWire. Website: wirekit.dev (in plans) Demo: start.wirekit.dev/core/ Updates: W

Ivan Milincic 10 Nov 3, 2022
PHP Japanese string helper functions for converting Japanese strings from full-width to half-width and reverse. Laravel Rule for validation Japanese string only full-width or only half-width.

Japanese String Helpers PHP Japanese string helper functions for converting Japanese strings from full-width to half-width and reverse. Laravel Rule f

Deha 54 Mar 22, 2022
PHP class for parsing user agent strings (HTTP_USER_AGENT).

PHP class for parsing user agent strings (HTTP_USER_AGENT). Includes mobile checks, bots and banned bots checks, browser types/versions and more. Based on browscap (via phpbrowscap), Mobile_Detect and ua-parser. Created for high traffic websites and fast batch processing.

Mikolaj Misiurewicz 44 Jul 26, 2022
Minimalist PHP frame for Core-Library, for Developing PHP application that gives you the full control of your application.

LazyPHP lightweight Pre-Made Frame for Core-library Install Run the below command in your terminal $ composer create-project ryzen/lazyphp my-first-pr

Ry-Zen 7 Aug 21, 2022
Provides Bitcoin-Lightning payment gateway powered by Strike

Bitcoin Payments - Powered by Strike Drupal module to allow user to pay with bitcoin on your Commerce website using Strike API. Strike Js is used for

Rahul Bile 2 Apr 17, 2022
🌐 A minimalist languages library that made plugins support multiple languages.

libLanguages · libLanguages is a PocketMine-MP library for making plugins support multiple languages. Easy To Learn: Just declare it in onEnable() fun

thebigcrafter 1 May 1, 2022
Demo Silverstripe and JavaScript sources for Lightning Talk "FormField Mini Apps" at StripeCon EU 2022

Watch the Lightning Talk on Youtube ?? Demo repository for Lightning Talk "FormField Mini Apps with the JavaScript framework/lib/style of your choice"

Julian Scheuchenzuber 2 Sep 20, 2022
DBML parser for PHP8. It's a PHP parser for DBML syntax.

DBML parser written on PHP8 DBML (database markup language) is a simple, readable DSL language designed to define database structures. This page outli

Pavel Buchnev 32 Dec 29, 2022
Elastic APM PHP Agent

Elastic APM Agent for PHP This is the official PHP agent for Elastic APM. The PHP agent enables you to trace the execution of operations in your appli

elastic 217 Dec 13, 2022
Stringy - A PHP string manipulation library with multibyte support, performance optimized

Stringy - A PHP string manipulation library with multibyte support, performance optimized

Lars Moelleken 145 Jan 1, 2023
php String Objects Chains like length,forEach,filter,replace,repalcAll much More.... Module

php String Objects Chains like length,forEach,filter,replace,repalcAll much More.... Module

im__koli 1 Mar 29, 2022
StringBuffer is a PHP class providing operations for efficient string buffering

StringBuffer is a PHP class providing operations for efficient string buffering

null 1 May 26, 2022
Allow any Discord user to sign in to your website and save their discord user information for later use.

Simple Discord SSO ( Single Sign-On ) Requires at least: 5.0 Tested up to: 5.8.3 Stable tag: 1.0.2 Requires PHP: 7.4 License: GPLv2 or later License U

null 2 Oct 7, 2022
run user analytics within your system and track user data inside your database.

WP Local Analytics plugin. run user analytics within your system and track user data inside your database. Installing Go to the plugin page from the W

Gary 5 Dec 21, 2022
WP Local Analytics plugin. - run user analytics within your system and track user data inside your database.

WP Local Analytics plugin. - run user analytics within your system and track user data inside your database.

Gary 5 Dec 21, 2022
Library allows to detect emoji, remove emoji, encode emoji and decode emoji in string.

It allows to detect emoji, remove emoji, encode emoji and decode emoji in string. Installation composer require anisimov/emoji How to use Encode and

Aleksey Anisimov 9 Nov 8, 2022
🔍 Generates database queries based on one unique string

?? Laravel Search String Generates database queries based on one unique string using a simple and customizable syntax. Introduction Laravel Search Str

Loris Leiva 735 Dec 30, 2022