Simplest way to detect a mobile device in PHP
What is the simplest way to tel开发者_开发问答l 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?
Here is a source:
- Detect Mobile Browser
- Download PHP script
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');
?>
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/");
}
I found mobile detect to be really simple and you can just use the isMobile()
function :)
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;
}
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
}
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
}
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.
<?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 } ?>
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;
}
?>
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
}
?>
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:
- Download the Zip file from http://sourceforge.net/projects/fiftyone/.
- Unzip the file into a directory in your PHP server.
- Then add the following code to your PHP page:
- All available device information will be contained in $_51d array:
require_once 'path/to/core/51Degrees.php';
require_once 'path/to/core/51Degrees_usage.php';
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.
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"
}
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";
}
}
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;
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());
}
<?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');
}
?>
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.
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
精彩评论