247

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?

3

20 Answers 20

375

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'); ?> 
Sign up to request clarification or add additional context in comments.

20 Comments

Could HTTP_USER_AGENT be faked?
@naveed Just a heads up, this no longer seems to be working. Tested in IOS 8.1 using Chrome's mobile browser. Justin's is working for me though.
@kavior.com Yes it can be faked, but we should allow people to fake if they wish... because that would be their intention, why stop people from doing what they specifically want (i.e. load the desktop version for some reason in particular)?
this answer is now so obsolete. there are many false positives, safari on OSX is detected as a mobile, Chrome on OSX detected as Mobile.
@DevZer0: Ok. You can add latest solution in the end of this answer.
|
128

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/"); } 

7 Comments

@RobertHarvey - im confused. they are all asking basically the same thing so what am i supposed to do, other than answer the question? tell them to use something else each time? i'm new here so im not sure if im supposed to link to the first answer?
This keyword "tablet" is creating me a problem on some IE8 (PC) headers that have "Tablet PC 2.0" in response
Why using a function to store the condition instead of a simple variable and do if($isMobile) {}?
Here is updated version: return preg_match("/(android|webos|avantgo|iphone|ipad|ipod|blackberry|iemobile|bolt|boost|cricket|docomo|fone|hiptop|mini|opera mini|kitkat|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i", $_SERVER["HTTP_USER_AGENT"]); This is collection of few new devices.
|
26

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

3 Comments

@showdev it does not detect desktop chrome "Inspect" mode (Instead, it thinks its a mobile)
@showdev did you solve this issue somehow by now?
FYI, this library is not updated for PHP 8 and causes a hard failure. Could be very useful but needs some attention.
22
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; } 

Comments

10

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 } 

2 Comments

does not work since it recognizes the desktop chrome Inspect mode as mobile
does not work in PHP 8.0 and up
9

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 } 

2 Comments

I'm pretty sure you have the arguments of the implode() backward, i.e., I think the separator, the '|', ought to come first, and the arrays, $uaPhone and $uaMobile, ought to come second.
@JamesNorris > Your comment becomes right as of PHP 8.0.0. My syntax is valid prior to PHP 7.4.0, is deprecated from 7.4.0 and is falsy in PHP 8.0.0. I won't amend my answer though as it was valid at the time of writing. Thanks anyway!
8
<?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 } ?> 

Comments

7

There is no reliable way. You can perhaps look at the 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.

2 Comments

GeoIP wouldn't really help. Even if you could determine that their IP belongs to a mobile network, they could be tethering the connection to a desktop computer. If it's not a mobile network you really no nothing all can devices connect through Wi-Fi. Also you have the problem of maintaining a global database of IP ranges. Using the user agent, even though it's not perfect, I would assume is much more reliable. It's not like it's really a security issue to serve the wrong browser content, so who cares? If someone's spoofing the UA, they likely already know what they're getting themselves into.
Right you were 11 years ago, user agents are getting useless, e.g. they do not report Safari and Firefox iPad as mobile anymore. Chrome still does, but it will follow the suit soon, I guess.
4

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; } ?> 

Comments

4

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 } ?> 

5 Comments

While reading the documentation it occurs to me that this function is more or less just a wrapper to the user agent header which returns it parsed as an array. Am I wrong?
It provides a lot more data vs the user agenda header as long as your server admin has browscap.ini. It can inform you what the browser supports and is a lot easier than having to put in all the regex people are writing.
It's shorter — no doubt about that. I just noticed that they are based on the same data more or less.
@shaedrich Using the built-in function also has the advantage of being updated as new mobile devices (and new versions of user agent strings) are released.
for me, it will not working when I open webpage in mobileview in chrome. Rather $_SERVER['HTTP_USER_AGENT']; is working as intended
4

A much easier solution which seems like it would work in most instances:

function funcDeviceType() { // INFO ABOUT THE BROWSER/DEVICE USER IS VISITING ON $useragent = $_SERVER["HTTP_USER_AGENT"]; if(stripos($useragent, "mobile")!== false){ return "mobile device"; }else{ return "desktop or laptop computer"; } } 

Comments

2

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/.
  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.

1 Comment

that software is annoying. no support for IIS, no php only library.
2

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" } 

5 Comments

This works ! And this simple script seems one of the best i found : (until now) it's the only script i found which can detect my ASUS ZenPad tablet ! But NOTE : they changed the $url to https://useragentinfo.co/device, see their page https://useragentinfo.co : it gives bash code to execute curl but indeed you can replace this by your PHP lines. However, you should omit the line "Authorization: Token .." because it seems no longer needed (and i see no way to get that API key).
Not getting response. just showing {} I think API token is needed can you please guide me how to generate the token.
$data = array('user_agent' => $useragent); It should be as : $data = array('useragent' => $useragent);
What if the domain is not reachable?
domain no longer available. Is there a new one?
0
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; 

Comments

0

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()); } 

Comments

0
<?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'); } ?> 

Comments

0

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.

Comments

0
// Check if the "mobile" word exists in User-Agent $isMob = is_numeric(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]), "mobile")); if($isMob){ echo 'Using Mobile Device...'; }else{ echo 'Using Desktop...'; } 

Just test, It's working well

Comments

0
function is_Mobile_Desktop() { 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(is_Mobile_Desktop()) { echo "mobile"; }else { echo "desktop"; } 

1 Comment

Thank you for contributing to the Stack Overflow community. This may be a correct answer, but it’d be really useful to provide additional explanation of your code so developers can understand your reasoning. This is especially useful for new developers who aren’t as familiar with the syntax or struggling to understand the concepts. Would you kindly edit your answer to include additional details for the benefit of the community?
-2

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

1 Comment

but it will recognize Desktop Chrome on Inspect mode as mobile (though its a nice concept)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.