• Stars
    star
    580
  • Rank 76,739 (Top 2 %)
  • Language
    PHP
  • License
    MIT License
  • Created over 14 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A PHP Class to detect a user's Browser. This encapsulation provides a breakdown of the browser and the version of the browser using the browser's user-agent string. This is not a guaranteed solution but provides an overall accurate way to detect what browser a user is using.

cbschuld/browser.php

Build Status

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, per-project dependency to your project using Composer:

composer require cbschuld/browser.php

If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency:

composer require --dev cbschuld/browser.php

Typical Usage:

$browser = new Browser();
if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >=10 ) {
	echo 'You have FireFox version 10 or greater';
}

Browser Detection

This solution identifies the following Browsers and does a best-guess on the version:

  • 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.s Android(Browser::BROWSER_ANDROID)
  • Google.s Chrome(Browser::BROWSER_CHROME)
  • GoogleBot(Browser::BROWSER_GOOGLEBOT)
  • Yahoo!.s Slurp(Browser::BROWSER_SLURP)
  • W3C.s Validator(Browser::BROWSER_W3CVALIDATOR)
  • BlackBerry(Browser::BROWSER_BLACKBERRY)

Operating System Detection

This solution identifies the following Operating Systems:

  • 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)

History and Legacy

Detecting the user's browser type and version is helpful in web applications that harness some of the newer bleeding edge concepts. With the browser type and version you can notify users about challenges they may experience and suggest they upgrade before using such application. Not a great idea on a large scale public site; but on a private application this type of check can be helpful.

In an active project of mine we have a pretty graphically intensive and visually appealing user interface which leverages a lot of transparent PNG files. Because we all know how great IE6 supports PNG files it was necessary for us to tell our users the lack of power their browser has in a kind way.

Searching for a way to do this at the PHP layer and not at the client layer was more of a challenge than I would have guessed; the only script available was written by Gary White and Gary no longer maintains this script because of reliability. I do agree 100% with Gary about the readability; however, there are realistic reasons to desire the user.s browser and browser version and if your visitor is not echoing a false user agent we can take an educated guess.

I based this solution off of Gary White's original work but have since replaced all of his original code. Either way, thank you to Gary. Sadly, I never was able to get in touch with him regarding this solution.

Testing

The testing with PHPUnit against known user agents available in tests/lists. Each file is tab delimited with the following fields:

User Agent, User Agent Type, Browser, Version, Operating System, Operating System Version

eg

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

Tests can be run by phpunit:

vendor/phpunit/phpunit/phpunit

More Repositories

1

rds-data

A decorator for the AWS Data API for Aurora Serverless. It decorates and abstracts the Amazon SDK's implementation to make it feel more like a traditional MySQL wrapper than an HTTP based web service. It is written in Typescript and provides type-aware return objects which allows for better support in Typescript-based solutions.
TypeScript
19
star
2

uuid-base58

Generate a RFC4122 compliant v4 UUID and return it encoded in base-58. This is great for creating unique IDs which only consume 22 characters of storage. Also provides base-58 encoding and decoding.
TypeScript
19
star
3

monoprice-multizone-interface

This is a React JS app written in TypeScript that provides a web-based interface to control the six channel multi-zone amplifier from Monoprice via a JSON API on a Raspberry Pi.
TypeScript
14
star
4

pegasusphp.org

A Model View Controller PHP Framework
PHP
6
star
5

pentair-screenlogic

Provides a Docker container to access the Pentair Screenlogic system via MQTT.
JavaScript
4
star
6

logentries

LogEntries for PHP - an easy-to-use PHP PSR-3 compliant logging class used to log information to the LogEntries SaaS application.
PHP
3
star
7

php-uuid-base58

Generates a RFC4122 compliant v4 UUID and returns it encoded in base-58. This is great for creating unique IDs which only consume 22 characters of storage. Also provides base-58 encoding and decoding.
PHP
3
star
8

sharp-aws-lambda-layer

Sharp for Node.js as an AWS Lambda Layer
JavaScript
2
star
9

chrisschuld.com-legacy

Personal Website for Chris Schuld - hosted via Github Pages at chrisschuld.com
CSS
2
star
10

schedulerapi-js

A fast way to add the www.schedulerapi.com service into your Javascript / Typescript / Node projects.
TypeScript
2
star
11

kvba

A serverless AWS Lambda, API Gateway enabled key/value store with Basic HTTP Authorization and weak obfuscated account creation.
JavaScript
2
star
12

aws-cf-static-website-hosting-s3-cloudfront-route53

An AWS CloudFormation Template to construct a CloudFront SSL/HTTPS static hosted website from an S3 bucket including the necessary Route53 DNS entries.
Shell
1
star
13

cra-typescript-tailwind-cognito-example

An example of application authentication with React via AWS Cognito. A complete sample using Create React Application with Typescript, Tailwind CSS, React Router and AWS Cognito.
CSS
1
star
14

chrisschuld.com-images

images for chrisschuld.com
1
star
15

lambda-tree

Lambda Tree - a place for logs
TypeScript
1
star
16

ts-multitool

A library full of tree-shakable TypeScript functions for application construction in both CommonJS and ESM
TypeScript
1
star
17

sns-to-twilio-sms

Send a Twilio SMS message from AWS's SNS (Sending a CloudWatch Alarm to your Phone)
JavaScript
1
star
18

aws-lambda-ses-forwarder-cdk

An AWS SES Email Forwarder in TypeScript wrapped up in the AWS CDK
TypeScript
1
star
19

gatsby-example.chrisschuld.com

A Gatsby -based Web Site in React and Typescript as a demo for hosting in AWS CloudFront / S3
TypeScript
1
star
20

prettier-config

My personal prettier config - format influenced by standardjs.com
1
star
21

lambda-app

Lambda App - Opinionated Lambda App Initialization, Management and Response System
TypeScript
1
star
22

imagemagick-aws-lambda-layer

ImageMagick as an AWS Lambda Layer
Makefile
1
star
23

serverless-toolbox

A lightweight library full of useful functions for your serverless projects (AWS).
TypeScript
1
star