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?
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?
Antworten:
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
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;
}
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';
}
}
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;
}
!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.
Wenn Sie nur mobile Geräte im Allgemeinen erkennen möchten, bietet Cake Unterstützung mit RequestHandler-> isMobile () ( http://book.cakephp.org/2.0/en/core-libraries/components/request-handling.html#) RequestHandlerComponent :: isMobile )
<?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;
}
?>
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.
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;
Es ist Arbeit für Iphone
<?php
$browser = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
if ($browser == true){
$browser = 'iphone';
}
?>