Simplest way to detect a mobile device in PHP
Solution 1
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
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
I found mobile detect to be really simple and you can just use the isMobile()
function :)
Solution 4
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
Simply you can follow the link. its very simple and very easy to use. I am using this. Its working fine.
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
}
Related videos on Youtube
Abs
Updated on January 20, 2022Comments
-
Abs over 2 years
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?
-
thejh over 13 yearsYou could put a javascript in the page that checks the screen resolution, but that would be client-side: howtocreate.co.uk/tutorials/javascript/browserwindow
-
Sergej Brazdeikis about 13 yearsHere is your solution: code.google.com/p/php-mobile-detect2
-
Martin James over 4 yearsChecking screen size these days is tricky because of retina devices.
-
-
Justin DoCanto almost 12 years@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?
-
Mladen Janjetovic over 10 yearsThis keyword "tablet" is creating me a problem on some IE8 (PC) headers that have "Tablet PC 2.0" in response
-
datasn.io about 9 yearsCould HTTP_USER_AGENT be faked?
-
James over 8 years@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.
-
Nick Steele over 8 years@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)?
-
Mike over 8 yearsGeoIP 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.
-
Daniel Petrovaliev over 8 yearsThis regex does not recognize facebook in-app browser.
-
D4V1D over 8 yearsWhy using a function to store the condition instead of a simple variable and do
if($isMobile) {}
? -
Ivijan Stefan Stipić over 8 yearsHere 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. -
lajeesh k about 8 yearsthis script will not detect ipad . please change ip(hone|od) to ip(hone|ad)
-
Tschallacka about 8 yearsthat software is annoying. no support for IIS, no php only library.
-
DevZer0 about 8 yearsthis answer is now so obsolete. there are many false positives, safari on OSX is detected as a mobile, Chrome on OSX detected as Mobile.
-
Naveed almost 8 years@DevZer0: Ok. You can add latest solution in the end of this answer.
-
bobble bubble almost 8 years
-
kmoney12 over 7 yearsWhat is the
substr($useragent,0,4)
part for? -
AHB over 7 yearsSeeing this awesome post, there is no file in my host but PHP ones! PHP is excellent.
-
BeRocket almost 7 yearsNot working for me while Justin DoCanto's way is working ok. Probably outdated answer
-
Roelof Berkepeis almost 7 yearsThis 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).
-
Mohd Bashir almost 7 yearsNot getting response. just showing {} I think API token is needed can you please guide me how to generate the token.
-
Mohd Bashir almost 7 years$data = array('user_agent' => $useragent); It should be as : $data = array('useragent' => $useragent);
-
BurninLeo about 6 yearsThe answer is from 2010 and the most recent update on the referenced page is from 2014. Therefore I would not recommend using this solution, any more.
-
Abhay over 5 yearstoo old solution
-
Naveed over 5 years@AbhayGawade: Too old question and answer as well
-
Umair Ayub over 5 years@datasn.io YES OF COURSE, I do data scraping and you can fake any user-agent :)
-
Umair Ayub over 5 yearstested on iPhone Chrome version, and following user-agent was sent by client and it DIDNT detect as mobile
Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/70.0.3538.75 Mobile/15E148 Safari/605.1
-
ENSATE about 5 yearsWhat if the domain is not reachable?
-
Admin almost 5 yearsWhen I echo its output, i get
0
. Why is that? -
Goran Usljebrka almost 4 yearsThis is a way old solution and it needs to be downvoted or replaced.
-
吳約南 over 3 yearsWell, not working for me. I don't know why it got such lot vote up.
-
Boris Gafurov over 3 yearsRight 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.
-
Naveed about 3 years@吳約南 It is 10 years old answer. I think you should ask a new question. You can share the latest solution here instead of downvoting.
-
shaedrich about 3 yearsWhile 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?
-
Intracta about 3 yearsIt 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.
-
shaedrich about 3 yearsIt's shorter — no doubt about that. I just noticed that they are based on the same data more or less.
-
marble almost 3 years@Naveed agreed. do you have it? (it wont work on Inspect mode for example)
-
marble almost 3 years@showdev it does not detect desktop chrome "Inspect" mode (Instead, it thinks its a mobile)
-
user3495363 almost 3 yearsdoes not work since it recognizes the desktop chrome Inspect mode as mobile
-
user3495363 almost 3 yearsdomain no longer available. Is there a new one?
-
user3495363 almost 3 yearsbut it will recognize Desktop Chrome on Inspect mode as mobile (though its a nice concept)
-
HardlyNoticeable over 2 years@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.
-
Exception over 2 yearsfor me, it will not working when I open webpage in mobileview in chrome. Rather
$_SERVER['HTTP_USER_AGENT'];
is working as intended -
user3495363 over 2 years@showdev did you solve this issue somehow by now?
-
stuartb almost 2 years@kmoney12 That's for getting just the first 4 characters of the user agent string. The rest of the string is not needed.