Detecting User Operating System and Browser with PHP: A Guide Based on User-Agent String

Dec 01, 2025 · Programming · 29 views · 7.8

Keywords: PHP | operating system detection | user agent | regular expressions | browser detection

Abstract: This article explains how to detect a user's operating system and browser using PHP by parsing the User-Agent string. It covers the core method of regular expression matching, provides code examples, and discusses limitations and historical changes in User-Agent strings.

Introduction to User-Agent String

The User-Agent string is a part of the HTTP header sent by the client's browser to the server. It contains information about the browser, operating system, and other details. In PHP, this string can be accessed via the $_SERVER['HTTP_USER_AGENT'] superglobal variable.

Detecting Operating System

To detect the operating system, we can use regular expressions to match patterns in the User-Agent string. Common patterns include "Windows NT" for Windows versions, "Mac OS X" for macOS, "Linux" for Linux distributions, and so on.

Code Implementation for OS Detection

Below is a rewritten PHP function based on the core logic from the reference answer:

<?php
function getOperatingSystem($user_agent) {
    $os_platform = "Unknown OS Platform";
    $os_array = array(
        '/windows nt 10/i' => 'Windows 10',
        '/windows nt 6.3/i' => 'Windows 8.1',
        '/windows nt 6.2/i' => 'Windows 8',
        '/windows nt 6.1/i' => 'Windows 7',
        '/windows nt 5.1/i' => 'Windows XP',
        '/macintosh|mac os x/i' => 'Mac OS X',
        '/linux/i' => 'Linux',
        '/android/i' => 'Android',
        '/iphone|ipod|ipad/i' => 'iOS'
    );
    foreach ($os_array as $regex => $value) {
        if (preg_match($regex, $user_agent)) {
            $os_platform = $value;
            break; // Optional: break after first match for efficiency
        }
    }
    return $os_platform;
}
?>

This function iterates through the array and uses preg_match to find a match. If a match is found, it returns the corresponding OS name.

Detecting Browser

Similarly, browser detection can be done by matching patterns like "Chrome", "Firefox", "Safari", etc., in the User-Agent string.

Code Implementation for Browser Detection

<?php
function getBrowser($user_agent) {
    $browser = "Unknown Browser";
    $browser_array = array(
        '/chrome/i' => 'Chrome',
        '/firefox/i' => 'Firefox',
        '/safari/i' => 'Safari',
        '/msie|trident/i' => 'Internet Explorer', // Note: for IE11 and above
        '/edge/i' => 'Edge',
        '/opera/i' => 'Opera'
    );
    foreach ($browser_array as $regex => $value) {
        if (preg_match($regex, $user_agent)) {
            $browser = $value;
            break;
        }
    }
    return $browser;
}
?>

The function for browser detection follows a similar pattern. The inclusion of "trident" is important for detecting Internet Explorer 11, as its User-Agent string does not contain "msie".

Limitations and Considerations

User-Agent sniffing is not foolproof. Users can spoof their User-Agent string, and browsers frequently update their strings, requiring constant updates to the detection arrays. For example, as noted in the reference, Internet Explorer 11 uses "Trident" instead of "msie".

Additional resources and historical changes are discussed in the reference answer, such as the need to update regex patterns for new OS versions and browsers.

Conclusion

Detecting operating system and browser via User-Agent string in PHP is a common method that relies on regular expression matching. While effective for many cases, it should be used with caution due to its reliance on client-provided data and the evolving nature of User-Agent strings. Developers should keep their detection logic updated to accommodate changes.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.