Überprüfen Sie, ob von einem iOS-Gerät aus auf die PHP-Seite zugegriffen wird

72

Ich habe eine einfache PHP-Webseite und möchte unterschiedliche Inhalte zurückgeben, je nachdem, ob über ein iPhone / iPad oder einen Webbrowser darauf zugegriffen wird. Wie kann ich das machen?

Snilleblixten
quelle

Antworten:

170

Verwenden Sie den Benutzeragenten von $_SERVER['HTTP_USER_AGENT'], und zur einfachen Erkennung können Sie dieses Skript verwenden:

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

?> 

Wenn Sie weitere Details zum Benutzergerät erfahren möchten, empfehle ich die Verwendung einer der folgenden Lösungen: http://51degrees.mobi oder http://deviceatlas.com

Haim Evgi
quelle
5
Aber es stimmte nicht wirklich, fand ich heraus. Diese Header stammen nur von Safari im Telefon. Wenn Sie eine Verbindung über eine App herstellen, sieht dies ungefähr so ​​aus: App% 20name / 1.0 CFNetwork / 485.13.8 Darwin / 11.0.0. Vielleicht kann ich stattdessen nach CFNetwork oder Darwin oder dem Namen der App suchen.
Snilleblixten
2
Ich arbeite nicht für mich Ich bekomme 1.1 CFNetwork / 548.0.3 Darwin / 11.0.0 für iPhone und iPad: S wie soll ich jetzt zwischen ihnen unterscheiden ???
Asad Khan
1
@AsadKhan trug u Tests aus dem Simulator? Ich bekomme den gleichen Http_user_agent
Kishor Kundan
1
Update für neues: $ iPadOS = stripos ($ _ SERVER ['HTTP_USER_AGENT'], "Macintosh");
Fadi
1
Perfekt arbeiten. Getestet auf 2 iPhones, Ipad. Danke es ist 2020 !!
Rodrigo Zuluaga
17
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;
}
Júlio Paulillo
quelle
7
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';
    }
}
MrBii
quelle
4
$browser = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
Pwnna
quelle
2
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;
}
Liuqing Hu
quelle
1
Sie sollten ein !empty($_SERVER['HTTP_USER_AGENT'])Da hinzufügen, $_SERVER['HTTP_USER_AGENT']das nicht festgelegt ist, wenn der Client überhaupt keinen Benutzeragenten sendet. Ihre Funktion stürzt dann ab / zeigt einen Hinweis an.
Thomas Kekeisen
0
<?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;
}
?>
Mohini
quelle
0

Die PHP-Lösung von 51Degrees ist dazu in der Lage. Sie können die kostenlose Open Source API hier https://github.com/51Degrees/Device-Detection herunterladen . Mit der HardwareFamily-Eigenschaft können Sie feststellen, ob es sich um ein iPad / iPod / iPhone usw. handelt.

Aufgrund der Art der Benutzeragenten von Apple gibt das erste Ergebnis ein generisches Gerät zurück. Wenn Sie jedoch an dem bestimmten Gerät interessiert sind, können Sie mithilfe einer clientseitigen JavaScript-Überschreibung ein bestimmtes Modell ermitteln.

Zu diesem Zweck können Sie etwas Ähnliches wie die folgende Logik implementieren, sobald Sie festgestellt haben, dass es sich um ein Apple-Gerät handelt, in diesem Fall für ein 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";
};
}

Oder für ein 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;
}

Weitere Informationen zur Forschung, die 51Degrees an Apple-Geräten durchgeführt hat, finden Sie in ihrem Blogbeitrag unter https://51degrees.com/blog/device-detection-for-apple-iphone-and-ipad .

Offenlegung: Ich arbeite für 51 Grad.

Zarwalski
quelle
0

Als Antwort auf Haim Evgis Code habe ich! == false bis zum Ende hinzugefügt, damit es für mich funktioniert

$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;
Gloson
quelle
Fügen Sie dies am besten als Kommentar zu seiner Antwort hinzu, obwohl ich weiß, dass es einige Zeit her ist, seit Sie einen Kommentar abgegeben haben. Danke für den Code!
Brian C
1
@ BrianC Seufz, Stack Overflow sagt, ich muss 50 Ruf haben, um zu kommentieren.
Gloson
0

Es ist Arbeit für Iphone

<?php
  $browser = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
  if ($browser == true){
    $browser = 'iphone';
  }
?>
Suresh Dhakal
quelle