Simplest way to detect a mobile device in PHP

PhpMobile

Php Problem Overview


What is the simplest way to tell if a user is using a mobile device to browse my site using PHP?

I have come across many classes that you can use but I was hoping for a simple if condition!

Is there a way I can do this?

Php Solutions


Solution 1 - Php

Here is a source:

Code:

<?php

$useragent=$_SERVER['HTTP_USER_AGENT'];

if(preg_match('/(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',$useragent)||preg_match('/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',substr($useragent,0,4)))

header('Location: http://detectmobilebrowser.com/mobile');

?>

Solution 2 - Php

I wrote this script to detect a mobile browser in PHP.

The code detects a user based on the user-agent string by preg_match()ing words that are found in only mobile devices user-agent strings after hundreds of tests. It has 100% accuracy on all current mobile devices and I'm currently updating it to support more mobile devices as they come out. The code is called isMobile and is as follows:

function isMobile() {
    return preg_match("/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i", $_SERVER["HTTP_USER_AGENT"]);
}

You can use it like this:

// Use the function
if(isMobile()){
    // Do something for only mobile users
}
else {
    // Do something for only desktop users
}

To redirect a user to your mobile site, I would do this:

// Create the function, so you can use it
function isMobile() {
    return preg_match("/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i", $_SERVER["HTTP_USER_AGENT"]);
}
// If the user is on a mobile device, redirect them
if(isMobile()){
    header("Location: http://m.yoursite.com/");
}

Let me know if you have any questions and good luck!

Solution 3 - Php

I found mobile detect to be really simple and you can just use the isMobile() function :)

Solution 4 - Php

function isMobileDev(){
	if(!empty($_SERVER['HTTP_USER_AGENT'])){
	   $user_ag = $_SERVER['HTTP_USER_AGENT'];
	   if(preg_match('/(Mobile|Android|Tablet|GoBrowser|[0-9]x[0-9]*|uZardWeb\/|Mini|Doris\/|Skyfire\/|iPhone|Fennec\/|Maemo|Iris\/|CLDC\-|Mobi\/)/uis',$user_ag)){
          return true;
	   };
	};
    return false;
}

Solution 5 - Php

I was wondering, until now, why someone had not posted a slightly alteration of the accepted answer to the use of implode() in order to have a better readability of the code. So here it goes:

<?php
$uaFull = strtolower($_SERVER['HTTP_USER_AGENT']);
$uaStart = substr($uaFull, 0, 4);

$uaPhone = [
	'(android|bb\d+|meego).+mobile',
	'avantgo',
	'bada\/',
	'blackberry',
	'blazer',
	'compal',
	'elaine',
	'fennec',
	'hiptop',
	'iemobile',
	'ip(hone|od)',
	'iris',
	'kindle',
	'lge ',
	'maemo',
	'midp',
	'mmp',
	'mobile.+firefox',
	'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',
	'xda',
	'xiino'
];

$uaMobile = [
	'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\-'
];

$isPhone = preg_match('/' . implode($uaPhone, '|') . '/i', $uaFull);
$isMobile = preg_match('/' . implode($uaMobile, '|') . '/i', $uaStart);

if($isPhone || $isMobile) {
	// do something with that device
} else {
	// process normally
}

Solution 6 - Php

Simply you can follow the link. its very simple and very easy to use. I am using this. Its working fine.

http://mobiledetect.net/

use like this

//include the file
require_once 'Mobile_Detect.php';
$detect = new Mobile_Detect;

// Any mobile device (phones or tablets).
if ( $detect->isMobile() ) {
 //do some code
}

// Any tablet device.
if( $detect->isTablet() ){
 //do some code
}

Solution 7 - Php

There is no reliable way. You can perhaps look at the http://en.wikipedia.org/wiki/User-agent_string">user-agent string, but this can be spoofed, or omitted. Alternatively, you could use a GeoIP service to lookup the client's IP address, but again, this can be easily circumvented.

Solution 8 - Php

<?php 

//-- Very simple way
$useragent = $_SERVER['HTTP_USER_AGENT']; 
$iPod = stripos($useragent, "iPod"); 
$iPad = stripos($useragent, "iPad"); 
$iPhone = stripos($useragent, "iPhone");
$Android = stripos($useragent, "Android"); 
$iOS = stripos($useragent, "iOS");
//-- You can add billion devices 

$DEVICE = ($iPod||$iPad||$iPhone||$Android||$iOS);

if (!$DEVICE) { ?>

<!-- What you want for all non-mobile devices. Anything with all HTML, PHP, CSS, even full page codes-->

<?php }else{ ?> 

<!-- What you want for all mobile devices. Anything with all HTML, PHP, CSS, even full page codes --> 

<?php } ?>

Solution 9 - Php

You only need to include user_agent.php file which can be found from Mobile device detection in PHP page and use the following code.

<?php
//include file
include_once 'user_agent.php';

//create an instance of UserAgent class
$ua = new UserAgent();

//if site is accessed from mobile, then redirect to the mobile site.
if($ua->is_mobile()){
   header("Location:http://m.codexworld.com");
   exit;
}
?>

Solution 10 - Php

If your server supports get_browser (available since PHP 4), it's extremely simple. They have a built in function for what you're asking.

Reference: https://www.php.net/manual/en/function.get-browser.php

<?php
$browser = get_browser(null, true);
if($browser['ismobiledevice']) { 
      // Device is mobile 
}
?>

Solution 11 - Php

PHP device detection from 51Degrees.com does exactly what you want - detects mobile devices and various properties associated with detected devices. It is simple to use and requires no maintenance. Set up is done in 4 easy steps:

  1. Download the Zip file from http://sourceforge.net/projects/fiftyone/.</li>
  2. Unzip the file into a directory in your PHP server.
  3. Then add the following code to your PHP page:
  4. require_once 'path/to/core/51Degrees.php';
    require_once 'path/to/core/51Degrees_usage.php';
    

  5. All available device information will be contained in $_51d array:
  6. if ($_51d['IsMobile'])
    {
    //Start coding for a mobile device here.
    }
    

51Degrees device detector does not use regular expressions for detections. Only important parts of HTTP headers are used to match devices. Which makes this solution the fastest (5 000 000 detections per second on mediocre hardware) and most accurate (99.97% accuracy) as hundreds of new devices are added to the database weekly (Supported device types include consoles, smart TVs, e-readers, tablets and more).

Software is open source distributed under Mozilla Public License 2 and compatible with commercial and open source projects. As a bonus 51Degrees solution also contains a complementary PHP image optimiser that can automatically resize images for mobile devices.

By default 51Degrees PHP device detector uses Lite data file which is free and contains over 30000 devices and 50 properties for each device. Lite file is updated once every 3 month. If you want to have a higher level of details about requesting mobile devices, then Premium and Enterprise data files are available. Premium contains well over 70000 devices and 100 properties for each device with weekly updates. Enterprise is updated daily and contains over 150000 devices with 150 properties for each.

Full list of device properties.
Compare data files.

Solution 12 - Php

You could also use a third party api to do device detection via user agent string. One such service is www.useragentinfo.co. Just sign up and get your api token and below is how you get the device info via PHP:

<?php
$useragent = $_SERVER['HTTP_USER_AGENT'];
// get api token at https://www.useragentinfo.co/
$token = "<api-token>";
$url = "https://www.useragentinfo.co/api/v1/device/";

$data = array('useragent' => $useragent);

$headers = array();
$headers[] = "Content-type: application/json";
$headers[] = "Authorization: Token " . $token;

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));

$json_response = curl_exec($curl);

$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

if ($status != 200 ) {
    die("Error: call to URL $url failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl));
}

curl_close($curl);

echo $json_response;
?>

And here is the sample response if the visitor is using an iPhone:

{
  "device_type":"SmartPhone",
  "browser_version":"5.1",
  "os":"iOS",
  "os_version":"5.1",
  "device_brand":"Apple",
  "bot":false,
  "browser":"Mobile Safari",
  "device_model":"iPhone"
}

Solution 13 - Php

function isMobile(){
   if(defined(isMobile))return isMobile;
   @define(isMobile,(!($HUA=@trim(@$_SERVER['HTTP_USER_AGENT']))?0:
   (
      preg_match('/(android|bb\d+|meego).+mobile|silk|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'
      ,$HUA)
   ||
      preg_match('/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'
      ,$HUA)
   )
   ));
}

echo isMobile()?1:0;
// OR
echo isMobile?1:0;

Solution 14 - Php

In case you care about screen size you can store screen width and Height as cookie values if they do not exists yet and then make self page redirection.

Now you have cookies on client and server side and can use it to determine mobile phones, tablets and other devices

Here a quick example how you can do it with JavaScript. Warning! [this code contain pseudo code].

if (!getcookie("screen_size")) {
	var screen_width = screen.width;
	var screen_height = screen.height;
	setcookie("screen_size", screen_width+", " +screen_height);
	go2(geturl());
}

Solution 15 - Php

<?php
$useragent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('/(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',$useragent)||preg_match('/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',substr($useragent,0,4)))
{
    echo('This is mobile device');
}
else
{
   echo('This is Desktop/Laptop device');
}
?>

Solution 16 - Php

This simple solution

if(
	
	strpos($_SERVER['HTTP_USER_AGENT'],'Phone')
	|
	strpos($_SERVER['HTTP_USER_AGENT'],'Android')
	
	
){		echo "should be mobile";				}
else{	echo "give them the desktop version";	}

works with most devices i tested (via the browser dev tool device emulation) .

For sure, you can simply look at the used values yourself using echo($_SERVER['HTTP_USER_AGENT']);.

The only missing smartphone devices in my case were the BlacBerryZ30 which i fixed by checking for 'Touch' as well. And for the Nokia N9 i checked for 'Nokia' as well. One could obviously add these for many more deivces if found to be 'unchecked'. But for now this may be better/faster to understand than some of the more complex above string scanning patterns.

Solution 17 - Php

Maybe combining some javascript and PHP could achieve the trick

<?php
$string = '<script>';
$string .= 'if ( /Opera|OPR\/|Puffin|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) { ';
$string .= '		alert("CELL")';
$string .= '	} else {';
$string .= '		alert("NON CELL")';
$string .= '	}		';	
$string .= '</script>';	
echo $string;
?>

I used that with plain javascript also instead

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAbsView Question on Stackoverflow
Solution 1 - PhpNaveedView Answer on Stackoverflow
Solution 2 - PhpJustin DoCantoView Answer on Stackoverflow
Solution 3 - PhpHenrik SommerlandView Answer on Stackoverflow
Solution 4 - Phpuser3126867View Answer on Stackoverflow
Solution 5 - PhpD4V1DView Answer on Stackoverflow
Solution 6 - PhpKalyan HalderView Answer on Stackoverflow
Solution 7 - PhpOliver CharlesworthView Answer on Stackoverflow
Solution 8 - PhpWebSonView Answer on Stackoverflow
Solution 9 - PhpJoyGuruView Answer on Stackoverflow
Solution 10 - PhpIntractaView Answer on Stackoverflow
Solution 11 - PhpMikeView Answer on Stackoverflow
Solution 12 - PhpRonnie BeltranView Answer on Stackoverflow
Solution 13 - PhpAbdulRahman AlShamiriView Answer on Stackoverflow
Solution 14 - PhpAnthony ArtemievView Answer on Stackoverflow
Solution 15 - PhpManjeet Kumar NaiView Answer on Stackoverflow
Solution 16 - PhpLuckyLuke SkywalkerView Answer on Stackoverflow
Solution 17 - PhpLuis H CabrejoView Answer on Stackoverflow