วิธีที่ง่ายที่สุดในการตรวจจับอุปกรณ์มือถือใน PHP


184

วิธีที่ง่ายที่สุดในการระบุว่าผู้ใช้กำลังใช้อุปกรณ์มือถือเพื่อเรียกดูไซต์ของฉันโดยใช้ PHP คืออะไร?

ฉันเจอหลายคลาสที่คุณสามารถใช้ได้ แต่ฉันหวังว่ามันจะง่ายถ้ามีเงื่อนไข!

มีวิธีที่ฉันสามารถทำได้หรือไม่?


คุณสามารถใส่จาวาสคริปต์ในหน้าเว็บที่ตรวจสอบความละเอียดของหน้าจอ แต่นั่นจะเป็นฝั่งไคลเอ็นต์: howtocreate.co.uk/tutorials/javascript/browserwindow
thejh

นี่คือวิธีการแก้ปัญหาของคุณ: code.google.com/p/php-mobile-detect2
Sergej Jevsejev

การตรวจสอบขนาดหน้าจอในปัจจุบันเป็นเรื่องยากเนื่องจากอุปกรณ์เรตินา
Martin James

คำตอบ:


311

นี่คือแหล่งที่มา:

รหัส:

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

?>

8
HTTP_USER_AGENT ปลอมได้หรือไม่
datasn.io

2
@ ไม่มีแค่หัวขึ้นดูเหมือนว่านี่จะไม่ทำงานอีกต่อไป ทดสอบใน IOS 8.1 โดยใช้เบราว์เซอร์มือถือของ Chrome Justin ของฉันทำงานให้ฉันแม้ว่า
James

15
@ kavior.com ใช่มันปลอมได้ แต่เราควรอนุญาตให้คนอื่นแกล้งทำถ้าพวกเขาต้องการ ... เพราะนั่นเป็นความตั้งใจของพวกเขาทำไมหยุดคนทำสิ่งที่พวกเขาต้องการโดยเฉพาะ (เช่นโหลดเวอร์ชั่นเดสก์ท็อปด้วยเหตุผลบางอย่างโดยเฉพาะ )?
Nick Steele

4
คำตอบนี้ล้าสมัยไปแล้ว มีข้อผิดพลาดมากมายมีการตรวจพบซาฟารีบน OSX ในฐานะมือถือ Chrome บน OSX ตรวจพบว่าเป็นมือถือ
DevZer0

3
@ DevZer0: ตกลง คุณสามารถเพิ่มโซลูชันล่าสุดในตอนท้ายของคำตอบนี้
Naveed

91

ฉันเขียนสคริปต์นี้เพื่อตรวจสอบเบราว์เซอร์มือถือใน PHP

รหัสตรวจพบผู้ใช้ตามสตริงตัวแทนผู้ใช้โดย preg_match () ไอเอ็นจีคำที่พบในสตริงผู้ใช้ตัวแทนผู้ใช้อุปกรณ์มือถือเท่านั้นหลังจากการทดสอบหลายร้อย มันมีความแม่นยำ 100% สำหรับอุปกรณ์พกพาปัจจุบันทั้งหมดและฉันกำลังอัพเดทเพื่อรองรับอุปกรณ์มือถือมากขึ้นเมื่อพวกเขาออกมา รหัสเรียกว่า isMobile และเป็นดังนี้:

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

คุณสามารถใช้สิ่งนี้:

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

หากต้องการเปลี่ยนเส้นทางผู้ใช้ไปยังไซต์มือถือของคุณฉันจะทำสิ่งนี้:

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

แจ้งให้เราทราบหากคุณมีคำถามใด ๆ และขอให้โชคดี!


4
@ RobertHarvey - ฉันสับสน พวกเขาทั้งหมดถามโดยทั่วไปในสิ่งเดียวกันดังนั้นฉันควรทำยังไงดีนอกจากตอบคำถาม? บอกให้ใช้อย่างอื่นทุกครั้งหรือ ฉันใหม่ที่นี่ดังนั้นฉันไม่แน่ใจว่าฉันควรจะเชื่อมโยงไปยังคำตอบแรก?
Justin DoCanto

คำหลัก "แท็บเล็ต" กำลังสร้างปัญหาให้ฉันสำหรับบางส่วนหัวของ IE8 (PC) ที่มี "แท็บเล็ตพีซี 2.0" ตอบสนอง
Mladen Janjetovic

ทำไมต้องใช้ฟังก์ชั่นในการจัดเก็บสภาพแทนที่จะเป็นตัวแปรอย่างง่ายและทำif($isMobile) {}อย่างไร
D4V1D

10
นี่คือรุ่นที่ได้รับการอัปเดต: 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"]);นี่คือชุดของอุปกรณ์ใหม่บางอย่าง
Ivijan Stefan Stipić


16

ฉันพบว่าอุปกรณ์ตรวจจับมือถือนั้นเรียบง่ายและคุณสามารถใช้isMobile()ฟังก์ชั่นนี้ได้ :)


2
ฉันชอบที่คลาสนี้ดูเหมือนว่าจะอัปเดตเป็นประจำ การเปิดตัวล่าสุด 24 วันที่ผ่านมาเป็นความคิดเห็นนี้
showdev

7

เพียงคุณสามารถไปที่ลิงก์ มันง่ายมากและใช้งานง่ายมาก ฉันใช้สิ่งนี้ มันทำงานได้ดี

http://mobiledetect.net/

ใช้แบบนี้

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

7
function isMobileDev(){
    if(isset($_SERVER['HTTP_USER_AGENT']) and !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;
       }else{
          return false;
       };
    }else{
       return false;    
    };
}

7

ฉันสงสัยว่าจนถึงตอนนี้ทำไมบางคนไม่โพสต์คำตอบที่ได้รับการยอมรับเล็กน้อยเกี่ยวกับการใช้งานimplode()เพื่อให้สามารถอ่านรหัสได้ดีขึ้น ดังนั้นที่นี่มันจะไป:

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

6

ไม่มีวิธีที่เชื่อถือได้ คุณอาจดูที่สตริงตัวแทนผู้ใช้แต่สิ่งนี้สามารถปลอมแปลงหรือละเว้นได้ หรือคุณสามารถใช้บริการ GeoIP เพื่อค้นหาที่อยู่ IP ของลูกค้า แต่สามารถหลีกเลี่ยงได้อีกครั้ง


4
GeoIP ไม่ได้ช่วยจริงๆ แม้ว่าคุณจะสามารถระบุได้ว่า IP ของพวกเขาเป็นของเครือข่ายมือถือพวกเขาสามารถเชื่อมโยงการเชื่อมต่อกับคอมพิวเตอร์เดสก์ท็อป หากไม่ใช่เครือข่ายมือถือคุณจะไม่สามารถเชื่อมต่อผ่าน Wi-Fi ได้เลย นอกจากนี้คุณยังมีปัญหาในการรักษาฐานข้อมูลส่วนกลางของช่วง IP การใช้ตัวแทนผู้ใช้แม้ว่ามันจะไม่สมบูรณ์แบบ แต่ฉันก็ถือว่ามีความน่าเชื่อถือมากกว่า ไม่ใช่ว่าเป็นปัญหาด้านความปลอดภัยในการแสดงเนื้อหาเบราว์เซอร์ที่ไม่ถูกต้อง หากมีคนปลอมแปลง UA พวกเขาน่าจะรู้อยู่แล้วว่าพวกเขากำลังทำอะไรอยู่
Mike

3

คุณจะต้องรวมuser_agent.phpไฟล์ที่สามารถพบได้จากการตรวจจับอุปกรณ์มือถือในหน้าPHPและใช้รหัสต่อไปนี้

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

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

2

การตรวจจับอุปกรณ์ PHP จาก 51Degrees.comทำสิ่งที่คุณต้องการอย่างแท้จริง - ตรวจจับอุปกรณ์มือถือและคุณสมบัติต่าง ๆ ที่เกี่ยวข้องกับอุปกรณ์ที่ตรวจพบ มันใช้งานง่ายและไม่ต้องการการบำรุงรักษา การตั้งค่าทำได้ง่าย ๆ ใน 4 ขั้นตอน:

  1. ดาวน์โหลดไฟล์ Zip จาก http://sourceforge.net/projects/fiftyone/
  2. แตกไฟล์ลงในไดเรกทอรีในเซิร์ฟเวอร์ PHP ของคุณ
  3. จากนั้นเพิ่มรหัสต่อไปนี้ในหน้า PHP ของคุณ:
  4. require_once 'path/to/core/51Degrees.php';
    require_once 'path/to/core/51Degrees_usage.php';
  5. ข้อมูลอุปกรณ์ที่มีทั้งหมดจะอยู่ใน $ _51d array:
  6. if ($_51d['IsMobile'])
    {
        //Start coding for a mobile device here.
    }

51Degrees อุปกรณ์ตรวจจับไม่ได้ใช้การแสดงออกปกติสำหรับการตรวจสอบ มีการใช้เฉพาะส่วนที่สำคัญของส่วนหัว HTTP เพื่อจับคู่อุปกรณ์ ซึ่งทำให้โซลูชันนี้เร็วที่สุด (5 000 000 การตรวจจับต่อวินาทีบนฮาร์ดแวร์ปานกลาง) และแม่นยำที่สุด (ความแม่นยำ 99.97%) เนื่องจากมีการเพิ่มอุปกรณ์ใหม่หลายร้อยรายการลงในฐานข้อมูลรายสัปดาห์ (ประเภทอุปกรณ์ที่รองรับประกอบด้วยคอนโซลสมาร์ททีวี แท็บเล็ตและอื่น ๆ )

ซอฟต์แวร์เป็นโอเพนซอร์ซกระจายภายใต้ Mozilla Public License 2 และเข้ากันได้กับโครงการเชิงพาณิชย์และโอเพนซอร์ส ในฐานะที่เป็นโบนัส 51Degrees โซลูชั่นยังมีตัวปรับภาพ PHPเสริมที่สามารถปรับขนาดภาพโดยอัตโนมัติสำหรับอุปกรณ์มือถือ

ตามค่าเริ่มต้นตัวตรวจจับอุปกรณ์ PHP 51Degrees ใช้ไฟล์ข้อมูล Lite ซึ่งฟรีและมีอุปกรณ์มากกว่า 30000 รายการและคุณสมบัติ 50 รายการสำหรับแต่ละอุปกรณ์ ไฟล์ Lite จะอัปเดตทุกๆ 3 เดือน หากคุณต้องการรายละเอียดในระดับที่สูงขึ้นเกี่ยวกับการขออุปกรณ์มือถือไฟล์ข้อมูลระดับพรีเมียมและระดับองค์กรจะพร้อมใช้งาน พรีเมี่ยมมีอุปกรณ์มากกว่า 70000 รายการและคุณสมบัติ 100 รายการสำหรับอุปกรณ์แต่ละเครื่องพร้อมอัพเดตรายสัปดาห์ Enterprise อัปเดตทุกวันและมีอุปกรณ์มากกว่า 150000 รายการที่มีคุณสมบัติ 150 รายการสำหรับแต่ละรายการ

รายการคุณสมบัติของอุปกรณ์ทั้งหมด ไฟล์ข้อมูลเปรียบเทียบ


1
ซอฟต์แวร์นั้นน่ารำคาญ ไม่รองรับ IIS ไม่มีไลบรารี่ php เท่านั้น
Tschallacka

2

คุณสามารถใช้ API ของบุคคลที่สามเพื่อทำการตรวจจับอุปกรณ์ผ่านสตริงตัวแทนผู้ใช้ หนึ่งในบริการดังกล่าวเป็นwww.useragentinfo.co เพียงลงทะเบียนและรับโทเค็น api ของคุณและด้านล่างเป็นวิธีที่คุณได้รับข้อมูลอุปกรณ์ผ่าน 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;
?>

และนี่คือตัวอย่างการตอบสนองหากผู้เข้าชมใช้ 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"
}

มันใช้งานได้! และสคริปต์ง่ายๆนี้ดูเหมือนจะเป็นหนึ่งในสิ่งที่ดีที่สุดที่ฉันค้นพบ: (จนถึงตอนนี้) เป็นสคริปต์เดียวที่ฉันพบซึ่งสามารถตรวจจับแท็บเล็ต ASUS ZenPad ของฉันได้! แต่หมายเหตุ: พวกเขาเปลี่ยน $ url เป็นhttps://useragentinfo.co/deviceดูที่หน้าของพวกเขาhttps://useragentinfo.co : มันให้รหัสทุบตีเพื่อรันคำสั่ง curl แต่แน่นอนคุณสามารถแทนที่มันด้วยบรรทัด PHP ของคุณ อย่างไรก็ตามคุณควรละเว้นบรรทัด "การอนุญาต: โทเค็น .. " เนื่องจากดูเหมือนว่าไม่ต้องการอีกต่อไป (และฉันไม่เห็นวิธีรับคีย์ API นั้น)
Roelof Berkepeis

ไม่ได้รับคำตอบ เพิ่งแสดง {} ฉันคิดว่าจำเป็นต้องใช้โทเค็น API คุณสามารถแนะนำวิธีสร้างโทเค็นได้
Mohd Bashir

$ data = array ('user_agent' => $ useragent); มันควรจะเป็น: $ data = array ('useragent' => $ useragent);
Mohd Bashir

เกิดอะไรขึ้นถ้าโดเมนไม่สามารถเข้าถึงได้
ENSATE

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;

0

ในกรณีที่คุณสนใจขนาดหน้าจอคุณสามารถเก็บความกว้างของหน้าจอและความสูงเป็นค่าคุกกี้หากยังไม่มีขนาดหน้าจอจากนั้นทำการเปลี่ยนเส้นทางหน้าตัวเอง

ตอนนี้คุณมีคุกกี้ในฝั่งไคลเอ็นต์และเซิร์ฟเวอร์และสามารถใช้เพื่อตรวจสอบโทรศัพท์มือถือแท็บเล็ตและอุปกรณ์อื่น ๆ

ต่อไปนี้เป็นตัวอย่างโดยย่อว่าคุณสามารถใช้ JavaScript ได้อย่างไร คำเตือน! [รหัสนี้มีรหัสเทียม]

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

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');
}
?>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.