How get_browser Determines Browser Capabilities in PHP

The PHP get_browser() function determines a user’s browser capabilities by comparing the client’s HTTP User-Agent string against a local browser capabilities database, typically the browscap.ini file. This article explains how the function works, how to configure the required browscap directive in PHP, and the key details retrieved by the function, such as JavaScript support, CSS levels, and device types.

The Role of the User-Agent Header

When a user visits a website, their web browser sends an HTTP request containing a User-Agent header. This header is a text string that identifies the browser, operating system, and rendering engine.

The get_browser() function reads this User-Agent string—either from the current request or from a user-provided string passed as an argument—to identify the client visiting the site.

The browscap.ini Database

By itself, PHP does not know how to interpret a User-Agent string. To resolve this, get_browser() relies on an external database file called browscap.ini.

This file contains a massive list of known User-Agent strings mapped to their specific capabilities. It defines properties for each browser, such as: * Whether the browser supports JavaScript, cookies, and CSS. * The platform and operating system (e.g., Windows, macOS, Android). * The device type (e.g., Mobile, Tablet, Desktop, TV). * The rendering engine (e.g., WebKit, Gecko, Blink).

Server Configuration

For get_browser() to work, you must configure PHP to find the browscap.ini file. Because this file is not included with PHP by default due to its size and frequent updates, you must download it manually from the official Browscap project.

Once downloaded, you must specify its path in your php.ini file:

[browscap]
browscap = "/path/to/browscap.ini"

If this directive is not set, calling get_browser() will trigger a warning and return false.

How PHP Processes the Query

When you call get_browser(), PHP performs the following steps:

  1. Retrieval: It fetches the User-Agent string from the superglobal $_SERVER['HTTP_USER_AGENT'] (or uses the custom string provided in the function’s arguments).
  2. Pattern Matching: It searches the loaded browscap.ini file using wildcard matching to find the best match for the User-Agent string.
  3. Data Return: It returns an object (or an associative array if the second parameter of the function is set to true) containing the capabilities associated with that matched browser pattern.

Performance Considerations

While get_browser() is straightforward to use once configured, parsing a large browscap.ini file can be resource-intensive and may slow down page load times. Because of this, many developers choose to use cached versions of the database or lightweight third-party PHP libraries that utilize faster formats like JSON to parse user agents.