13 Stimmen

Wie kann ich feststellen, ob es sich um ein mobiles Gerät mit PHP handelt?

Ich schreibe gerade eine Website mit PHP. Da jeder im Netzwerk auf die Website zugreifen muss, um Zugang zum Internet zu erhalten, muss ich eine mobile Version erstellen. Wie kann ich am besten überprüfen, ob es sich um ein mobiles Gerät handelt? Ich möchte nicht am Ende eine Switch-Anweisung mit 50 Geräten haben, da ich nicht nur das iPhone unterstützen möchte.

Gibt es eine PHP-Klasse, die ich verwenden kann?

15voto

Eran Galperin Punkte 84916

Sie müssen mehrere Header überprüfen, die der Client sendet, z. B. USER_AGENT und HTTP_ACCEPT. Prüfen Sie dieser Artikel für ein umfassendes Erkennungsskript für mobile Benutzer-Agenten in PHP.

0 Stimmen

Wenn sie ihre eigene Erkennung verwenden, dann ist sie defekt. Mir wurde gesagt, dass mein Opera 10 auf Mac OS X ein mobiler Browser ist.

0 Stimmen

Ich habe ihr Skript nicht debuggt, falls Sie das wissen wollen :) Natürlich sollte man immer alles testen, was man im Internet liest, aber das Prinzip ist da

1 Stimmen

Dieser Artikel ist vier Jahre alt und lässt viele neuere Geräte außer Acht.

5voto

Steve Kamerman Punkte 146

Sie sollten sich ansehen Tera-WURFL Es handelt sich um ein PHP- und MySQL-basiertes Softwarepaket, das mobile Geräte und deren Fähigkeiten erkennt. Hier ist der Tera-WURFL-Code, den Sie verwenden würden, um zu erkennen, ob das besuchte Gerät mobil ist:

<?php
require_once("TeraWurfl.php");
$wurflObj = new TeraWurfl();
$wurflObj->GetDeviceCapabilitiesFromAgent();
if($wurflObj->capabilities['product_info']['is_wireless_device']){
    // this is a mobile device
}else{
    // this is a desktop device
}
?>

4voto

nickf Punkte 517253

Und noch etwas ist zu bedenken: Viele Websites bieten eine andere URL für mobile Geräte an. Siehe http://m.facebook.com als Beispiel. Mit der zunehmenden Fähigkeit der Geräte heutzutage, gibt dies Ihren Nutzern eine Option. Wenn sie ein Gerät benutzen, das eine vollständige Website gut handhaben kann (mit Zoomen und so weiter), dann würden sie sich wahrscheinlich ziemlich ärgern, wenn sie in ein bestimmtes Layout gezwungen werden.

1 Stimmen

Wie gesagt, es ist ein Portal für die Leute zum Einloggen, ich kann nicht erwarten, dass sie die Adresse des Login-Servers kennen

3voto

haibuihoang Punkte 161

Für den Teil der Umleitung habe ich

$arr = explode('.', $_SERVER['SERVER_NAME'], 2);
$sub=$arr[0];
$need_redirect=false;
if (!isset($_SERVER['HTTP_REFERER'])){
    $need_redirect=true;
}else{
    $domain = parse_url($_SERVER['HTTP_REFERER']);   
    $host = $domain['host'];
    if (!preg_match('/romajidesu\.com/', $host)){
        $need_redirect=true;        
    }    
}
if ($need_redirect && ($sub!='m') && is_mobile() ){
    $old_url=$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
    $new_url='http://'.str_replace('www.', 'm.', $old_url);
    header("Location:".$new_url);die();
}

Weitere Einzelheiten zu meiner Implantation finden Sie in meinem Blog unter http://haibuihoang.blogspot.com/2012/11/how-to-redirect-mobile-users-to-your.html

2voto

jb. Punkte 9827

Bisher wurden mobile Geräte erkannt, indem der HTTP User-Agent Header mit einer Liste bekannter mobiler UA-Strings verglichen wurde. Ein neuartiger Ansatz versucht stattdessen, das Vorhandensein eines Desktop-Betriebssystems zu erkennen - alles, was nicht als Desktop-Betriebssystem erkannt wird, muss dann mobil sein.

Dies führt zu weit weniger Fehlalarmen.

Ich habe hier einen Beitrag mit Beispielcode in Python geschrieben: http://notnotmobile.appspot.com

Hier ist ein Ausschnitt:

import re

# Some mobile browsers which look like desktop browsers.
RE_MOBILE = {
    "iphone" : re.compile("ip(hone|od)", re.I),
    "winmo" : re.compile("windows\s+ce", re.I)}

RE_DESKTOP = {
    "linux" : re.compile(r"linux", re.I),
    "windows" : re.compile(r"windows", re.I),
    "mac" : re.compile(r"os\s+(X|9)", re.I),
    "solaris" : re.compile(r"solaris", re.I),
    "bsd" : re.compile(r"bsd", re.I)}

# Bots that don't contain desktop OSs.
RE_BOT = re.compile(r"(spider|crawl|slurp|bot)")

def is_desktop(user_agent):
  # Anything that looks like a phone isn't a desktop.
  for regex in RE_PHONE.values():
    if regex.search(user_agent) is not None:
      return False

  # Anything that looks like a desktop probably is.
  for regex in RE_DESKTOP.values():
    if regex.search(user_agent) is not None:
      return True

  # Bots get the desktop view.
  if RE_BOT.search(user_agent) is not None:
    return True

  # Anything else is probably a phone!
  return False

def get_user_agent(request):
  # Some browsers put the User-Agent in a HTTP-X header
  if 'HTTP_X_OPERAMINI_PHONE_UA' in request.headers:
    return request.headers['HTTP_X_OPERAMINI_PHONE_UA']
  elif:
    # Skyfire / Bolt / other mobile browsers
    ...
  else:
    return request.headers.get('HTTP_USER_AGENT', '')

def view(request):
  user_agent = get_user_agent(request)
  if is_desktop(user_agent):
    return desktop_response()
  else:
    return mobile_response()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X