Simple Mobile Device Detection in PHP Using User-Agent String

Nov 12, 2025 · Programming · 17 views · 7.8

Keywords: PHP | Mobile Detection | User-Agent | Regular Expressions

Abstract: This article explores the simplest method to detect mobile devices in PHP by analyzing the HTTP_USER_AGENT string with regular expressions. It provides a detailed code example, discusses the pros and cons, and compares it with alternative approaches such as client-side detection and third-party libraries.

Introduction

With the increasing use of mobile devices for web browsing, developers often need to detect whether a user is accessing a site from a mobile device to provide optimized experiences. In PHP, one of the simplest methods involves analyzing the HTTP_USER_AGENT string, which contains information about the client's browser and device.

Methodology: Using User-Agent String

The HTTP_USER_AGENT string is sent by the client's browser in the HTTP request headers. By parsing this string with regular expressions, we can identify patterns commonly associated with mobile devices. This approach is server-side, meaning it executes on the web server before the page is sent to the client.

Code Implementation

Below is a refined PHP function based on common practices for mobile detection. It uses a regular expression to match a wide range of mobile device identifiers.

<?php
function isMobileDevice() {
    $userAgent = $_SERVER['HTTP_USER_AGENT'];
    $pattern = '/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i';
    if (preg_match($pattern, $userAgent)) {
        return true;
    }
    // Additional check for certain numeric prefixes
    $numericPattern = '/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i';
    if (preg_match($numericPattern, substr($userAgent, 0, 4))) {
        return true;
    }
    return false;
}
?>

This function can be used in conditions to redirect users or modify content. For example:

<?php
if (isMobileDevice()) {
    header('Location: http://m.example.com');
    exit;
}
?>

Advantages and Disadvantages

Advantages: Server-side detection allows for early decision-making, such as redirecting before sending content, which can save bandwidth and improve performance by loading mobile-optimized resources. It is simple to implement with basic PHP knowledge.

Disadvantages: The User-Agent string can be spoofed or inaccurate, leading to false positives or negatives. Additionally, this method does not account for dynamic changes in viewport size, unlike client-side techniques. Caching can also be problematic, as the same URL might serve different content based on the device.

Alternative Approaches

As discussed in supplementary materials, alternative methods include using third-party libraries like Mobile-Detect, which offer more comprehensive and updated device databases. However, these may require additional dependencies and maintenance. Client-side detection using JavaScript or CSS media queries is often recommended for responsiveness, as it adapts to real-time viewport changes without page reloads. For instance, CSS media queries can handle different layouts based on screen width, while JavaScript can detect touch capabilities or other features.

Conclusion

While PHP-based mobile detection via User-Agent string is a straightforward approach, it should be used cautiously and combined with other methods for robust solutions. Developers should weigh the trade-offs between server-side and client-side detection based on their specific needs, such as performance optimization versus dynamic adaptability.

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.