Nasıl PHP ile bir mobil cihaz olup olmadığını belirler?

8 Cevap php

PHP ile bir web sitesi yazıyorum. Bu internet erişimi için ağdaki herkes tarafından erişilebilir olması gerekir çünkü ben bir mobil sürümünü oluşturmak zorunda. Bir mobil cihaz ise en iyi nasıl kontrol edebilirim? Ben iPhone desteklemek istiyoruz sadece bu yana sonunda 50 cihazlarla bir switch bildirimde istemiyorum.

Ben kullanabilirsiniz bir PHP sınıfı var mı?

8 Cevap

Bu tür User_Agent ve HTTP_ACCEPT gibi istemci gönderir çeşitli başlıkları, kontrol etmeniz gerekir. PHP mobil kullanıcı-ajanlar için kapsamlı bir algılama komut dosyası için this article göz atın.

Sen Tera-WURFL, bir PHP & olduğu bakmak gerekir Mobil cihazlar ve onların yeteneklerini algılar MySQL tabanlı yazılım paketi. Burada ziyaret cihaz, mobil olmadığını algılamak için kullanmak istiyorsunuz Tera-WURFL kodu:

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

Başka bir şey düşünmek: siteleri bir sürü aslında mobil cihazlar için farklı bir URL sunacak. http://m.facebook.com, örnek olarak bkz. Cihazların bu gün artan yeteneği ile, bu kullanıcıların bir seçenek sunar. Aslında (yakınlaştırma ve etajer kullanarak) güzel tam bir web sitesi işleyebilir bir cihaz üzerinde iseniz, o zaman muhtemelen belli bir düzen içine zorla oldukça rahatsız olsun istiyorum.

Yönlendirme parçası için, ben kullanılan

$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();
}

Benim implmentation daha fazla ayrıntı için, http://haibuihoang.blogspot.com/2012/11/how-to-redirect-mobile-users-to-your.html bloguma lütfen okuyun

Geleneksel mobil cihazlar bilinen cep UA dizeleri bir listesini karşı HTTP User-Agent başlığını karşılaştırılarak tespit edilmiştir. Daha sonra mobil olması gereken bir masaüstü işletim sistemi olarak değil bulunan şey - yeni bir yaklaşım yerine bir masaüstü işletim varlığını algılamaya çalışır.

Bu çok daha az yanlış pozitif sonuçlanır.

I've written a post with sample code in Python here: http://notnotmobile.appspot.com

İşte snippet'idir:

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()

Isteği kullanıcı aracısı bir karar vermek için yeterli bilgi verir misiniz?

İyi bir var list of user agents here.

User-Agent dayalı tespiti için WURFL database. En azından, kapsamlı ve sürekli güncellenen bulunuyor.

Eğer sadece high-end (imsi) telefonları hedef varsa, o zaman sadece embed appropriate mobile stylesheets, tüm bunları algılamak gerek olmayabilir.

Bir mobil cihaz nedir? Zayıf CPU? Düşük bant genişliği? Gerçekte, aşağıda 320x240 ve renk derinliği 24 altında çözünürlüğü olan bir ekrana sahip.

You have to use Javascript also. This link will give you an idea: http://www.w3schools.com/js/tryit.asp?filename=tryjs_browsermonitor

And, this link will teach you what is what: http://www.w3schools.com/htmldom/dom_obj_screen.asp