Проверьте, доступна ли PHP-страница с устройства iOS


У меня есть простая веб-страница на PHP, и я хотел бы возвращать различный контент в зависимости от того, доступен ли он с iPhone/iPad или с веб-браузера. Как я могу это сделать?

Author: Snilleblixten, 2011-06-12

10 answers

Используйте агент пользователя из $_SERVER['HTTP_USER_AGENT'], а для простого обнаружения вы можете использовать этот скрипт:

<?php

//Detect special conditions devices
$iPod    = stripos($_SERVER['HTTP_USER_AGENT'],"iPod");
$iPhone  = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$iPad    = stripos($_SERVER['HTTP_USER_AGENT'],"iPad");
$Android = stripos($_SERVER['HTTP_USER_AGENT'],"Android");
$webOS   = stripos($_SERVER['HTTP_USER_AGENT'],"webOS");

//do something with this information
if( $iPod || $iPhone ){
    //browser reported as an iPhone/iPod touch -- do something here
}else if($iPad){
    //browser reported as an iPad -- do something here
}else if($Android){
    //browser reported as an Android device -- do something here
}else if($webOS){
    //browser reported as a webOS device -- do something here
}

?> 

Если вы хотите узнать более подробную информацию о пользовательском устройстве, я рекомендовал использовать одно из следующих решений: http://51degrees.mobi или http://deviceatlas.com

 139
Author: Haim Evgi, 2013-04-15 11:17:24
preg_match("/iPhone|Android|iPad|iPod|webOS/", $_SERVER['HTTP_USER_AGENT'], $matches);
$os = current($matches);

switch($os){
   case 'iPhone': /*do something...*/ break;
   case 'Android': /*do something...*/ break;
   case 'iPad': /*do something...*/ break;
   case 'iPod': /*do something...*/ break;
   case 'webOS': /*do something...*/ break;
}
 14
Author: Júlio Paulillo, 2014-03-12 22:03:06
$browser = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
 4
Author: Pwnna, 2011-06-12 13:15:20
function user_agent(){
    $iPod = strpos($_SERVER['HTTP_USER_AGENT'],"iPod");
    $iPhone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
    $iPad = strpos($_SERVER['HTTP_USER_AGENT'],"iPad");
    $android = strpos($_SERVER['HTTP_USER_AGENT'],"Android");
    file_put_contents('./public/upload/install_log/agent',$_SERVER['HTTP_USER_AGENT']);
    if($iPad||$iPhone||$iPod){
        return 'ios';
    }else if($android){
        return 'android';
    }else{
        return 'pc';
    }
}
 4
Author: MrBii, 2014-06-25 07:24:47

Если вы просто хотите обнаружить мобильные устройства в общем, Cake имеет встроенную поддержку с помощью RequestHandler->isMobile() (http://book.cakephp.org/2.0/en/core-libraries/components/request-handling.html#RequestHandlerComponent::isMobile)

 0
Author: bohoej, 2014-05-07 07:57:44
<?php
$iPhone = false;
$AndroidPhone = false;
$deviceType = 0;

$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
print "<br>".$ua;

if(strpos($ua,"iphone") !== false ){
    $iPhone = true;
}
if(strpos($ua,"android") !== false){

    if(strpos($_SERVER['HTTP_USER_AGENT'],"mobile")){
        $AndroidPhone = true;        
    }
}
if(stripos($_SERVER['HTTP_USER_AGENT'],"iPad")){
    $iPad = true;
    $Tablet = true;
    $iOS = true;
}   

if($AndroidPhone==true || $iPhone==true)
{
    $deviceType = 1;
}
?>
 0
Author: Mohini, 2015-10-29 11:35:45
function isIosDevice(){
    $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
    $iosDevice = array('iphone', 'ipod', 'ipad');
    $isIos = false;

    foreach ($iosDevice as $val) {
        if(stripos($userAgent, $val) !== false){
            $isIos = true;
            break;
        }
    }

    return $isIos;
}
 0
Author: Liuqing Hu, 2016-08-08 07:02:48

PHP-решение 51Degrees способно это сделать. вы можете получить бесплатный API с открытым исходным кодом здесь https://github.com/51Degrees/Device-Detection . Вы можете использовать свойство HardwareFamily, чтобы определить, является ли это iPad/iPod/iPhone и т.д.

Из-за особенностей пользовательских агентов Apple первоначальный результат вернет универсальное устройство, однако, если вас интересует конкретное устройство, вы можете использовать переопределение на стороне клиента JavaScript для определения конкретной модели.

Чтобы сделать это вы можете реализовать что-то похожее на следующую логику, как только определите, что это устройство Apple, в данном случае для iPhone.

// iPhone model checks.
function getiPhoneModel() {
// iPhone 6 Plus
if ((window.screen.height / window.screen.width == 736 / 414) && 
(window.devicePixelRatio == 3)) {
return "iPhone 6 Plus";
}
// iPhone 6
else if ((window.screen.height / window.screen.width == 667 / 375) && 
(window.devicePixelRatio == 2)) {
return "iPhone 6";
}
// iPhone 5/5C/5S or 6 in zoom mode
else if ((window.screen.height / window.screen.width == 1.775) && 
(window.devicePixelRatio == 2)) {
return "iPhone 5, 5C, 5S or 6 (display zoom)";
}
// iPhone 4/4S
else if ((window.screen.height / window.screen.width == 1.5) && 
(window.devicePixelRatio == 2)) {
return "iPhone 4 or 4S";
}
// iPhone 1/3G/3GS
else if ((window.screen.height / window.screen.width == 1.5) && 
(window.devicePixelRatio == 1)) {
return "iPhone 1, 3G or 3GS";
} else {
return "Not an iPhone";
};
}

Или для iPad

function getiPadVersion() {
var pixelRatio = getPixelRatio();
var return_string = "Not an iPad";
if (pixelRatio == 1 ) {
return_string = "iPad 1, iPad 2, iPad Mini 1";
}
if (pixelRatio == 2) {
return_string = "iPad 3, iPad 4, iPad Air 1, iPad Air 2, iPad Mini 2, iPad 
Mini 3";
}
return return_string;
}

Для получения дополнительной информации об исследованиях, проведенных 51Degrees в устройствах Apple, вы можете прочитать их сообщение в блоге здесь https://51degrees.com/blog/device-detection-for-apple-iphone-and-ipad.

Раскрытие информации: Я работаю на 51Degrees.

 0
Author: Zarwalski, 2017-04-12 09:48:18

В ответ на код Хаима Эвги я добавил !==false до конца, чтобы он работал на меня

$iPod    = stripos($_SERVER['HTTP_USER_AGENT'],"iPod") !== false;
$iPhone  = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone") !== false;
$iPad    = stripos($_SERVER['HTTP_USER_AGENT'],"iPad") !== false;
$Android = stripos($_SERVER['HTTP_USER_AGENT'],"Android") !== false;
 0
Author: Gloson, 2017-12-12 16:47:33

Это работа для Iphone

<?php
  $browser = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
  if ($browser == true){
    $browser = 'iphone';
  }
?>
 0
Author: Suresh Dhakal, 2018-08-24 09:29:22