php判斷是否wap手機客戶端的方法詳解

WBOY
發布: 2016-07-25 08:56:21
原創
1069 人瀏覽過
  1. // 如果有HTTP_X_WAP_PROFILE則一定是行動裝置
  2. if (isset($_SERVER['HTTP_X_AP_AP_FAP_FAP_FAP_FAP_FAP_AP_WAP_FAP_FAP_FAP_FAP_FAP_AP_WAP_FAP_FAP_FAP_AP_WAP_FAP_FAP_FAP_AP_WAP_FAP_FAP_FAP_FAP_AP4AP))) { >return true;
  3. }
複製程式碼
解析: 透過獲到客戶端返回的HTTP_X_WAP_PROFILE訊息,可以判斷一定是手機終端,但是並不是所有手機都能返回這個訊息,這個和等下的獲取via是一樣的,這涉及到終端和服務商問題! 代碼:

  1. //如果via資訊含有wap則一定是行動裝置,部分服務商會封鎖該資訊
  2. if(isset( $_SERVER['HTTP_VIA']))
  3. {
  4. //找不到為flase,否則為true
  5. return stristr($_SERVER['HTTP_VIA'],"wap") ? true : false;
  6. }
複製程式碼
分析: 這個HTTP_VIA裡面,包含有服務商提供一些個人信息,如果由這個去判斷是最為準確的,但是比如說移動就屏蔽了這個信息。因此,只對部分服務商有效。 代碼:

  1. //腦殘法,判斷手機發送的客戶端標誌,相容性有待提高
  2. if(isset($_SERVER ['HTTP_USER_AGENT']))
  3. {
  4. $clientkeywords = array('nokia','sony','ericsson','mot','samsung',
  5. 'htc','sgh', 'lg','sharp','sie-','philips','panasonic','alcatel',
  6. 'lenovo','iphone','ipod','blackberry','meizu','android ','netfront',
  7. 'symbian','ucweb','windowsce','palm','operamini','operamobi',
  8. 'openwave','nexusone','cldc','midp ','wap','mobile');
  9. // 從HTTP_USER_AGENT中尋找手機瀏覽器的關鍵字
  10. if (preg_match("/(".implode('|',$clientkeywords).") /i",
  11. strtolower($_SERVER['HTTP_USER_AGENT'])))
  12. {
  13. return true;
  14. }
  15. }
複製代碼}

複製代碼

}

複製程式碼>
    分析: 這個透過客戶端回傳訊息[HTTP_USER_AGENT]來配置手機終端關鍵字。試想下,要列出所有的手機標識,才能準確判斷,這個可行嗎?所以,只要列舉主流的手機品牌,這樣就基本上OK了。不過,上在的程式碼有一個是判斷ucweb的,這個是判斷不了的。
  1. 因為,我取得的資訊和取得firefox的資訊是一致的,也找不到ucweb的關鍵字。 所以使用ucweb瀏覽器就無法進行判斷,有待新方法出現。 畢竟,ucweb佔用絕大部分用戶,但ucweb是以pc瀏覽器標準靠攏的,因為些被誤認為是pc瀏覽器也可以吧! 代碼:
  2. //協議法,因為有可能不準確,放到最後判斷
  3. if (isset($_SERVER[' HTTP_ACCEPT'])) {
  4. // 如果只支援wml且不支援html那一定是行動裝置
  5. // 如果支援wml和html但是wml在html之前則是行動裝置
  6. if ((strpos ($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false)
  7. && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false
|| (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml')
{return true;
}}複製程式碼

分析: 最後就是協議,也不是什麼協議了。就是mime類型判斷,只接收wml頁面的手機,不用說一定是行動終端,但是這麼天真的想法是不可能的。因為,現在手機都漸漸可以跟電腦的功能接近了! ?瀏覽器上可接受的頁面類型也不只是wml,html也同樣支援。接收wml排在html前面,這個可以說也是手機,但不是絕對。比如說,藍莓就是html排在前,wml排在後面。這樣就無法做出判斷了。

綜上所述,就寫出下面的php判斷頁面程式。

  1. /**
  2. *程 序:iswap.php判斷是否是透過手機存取
  3. *程式回傳:@return bool 是否為行動裝置
  4. */
  5. function isMobile()
  6. {
  7. // 如果有HTTP_X_WAP_PROFILE則一定是行動裝置
  8. if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
  9. return true;
  10. }
  11. //如果viaviaviaviamvia則是如果資訊含有行動設備,部分服務商會屏蔽該資訊
  12. if(isset($_SERVER['HTTP_VIA']))
  13. {
  14. //找不到為flase,否則為true
  15. return stristr($_SERVER ['HTTP_VIA'],"wap") ? true : false;
  16. }
  17. //腦殘法,判斷手機發送的客戶端標誌,相容性有待提高
  18. if(isset($ _SERVER['HTTP_USER_AGENT']))
  19. {
  20. $clientkeywords = array('nokia','sony','ericsson','mot','samsung',
  21. 'htc','sgh' ,'lg','sharp','sie-','philips','panasonic','alcatel',
  22. 'lenovo','iphone','ipod','blackberry','meizu',' android','netfront',
  23. 'symbian','ucweb','windowsce','palm','operamini','operamobi',
  24. 'openwave','nexusone','cldc',' midp','wap','mobile');
  25. // 從HTTP_USER_AGENT中尋找手機瀏覽器的關鍵字
  26. if (preg_match("/(".implode('|',$clientkeywords)." )/i",
  27. strtolower($_SERVER['HTTP_USER_AGENT']))
  28. {
  29. return true;
  30. }
  31. }
  32. //協定法,因為有可能不準確,放到最後判斷
  33. if (isset($_SERVER['HTTP_ACCEPT'])) {
  34. // 如果只支援wml且不支援html那一定是行動裝置
  35. // 如果支援wml和html但是wml在html之前則是行動裝置
  36. if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false)
  37. && (strpos($ _SERVER['HTTP_ACCEPT'], 'text/html') === false
  38. || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml')
  39. {
  40. return true;
  41. }
  42. }
  43. return false;
  44. }
  45. >>>?
複製程式碼


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!