Simplest way to detect a mobile device in PHP

后端 未结 15 2331
别跟我提以往
别跟我提以往 2020-11-22 05:12

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 fo

相关标签:
15条回答
  • 2020-11-22 05:33

    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

    0 讨论(0)
  • 2020-11-22 05:34

    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.

    0 讨论(0)
  • 2020-11-22 05:39

    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"
    }
    
    0 讨论(0)
  • 2020-11-22 05:40

    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!

    0 讨论(0)
  • 2020-11-22 05:41

    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
    }
    
    0 讨论(0)
  • 2020-11-22 05:43

    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
    }
    
    0 讨论(0)
提交回复
热议问题