-
-
// 如果有HTTP_X_WAP_PROFILE則一定是行動裝置
- 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;
- }
複製程式碼
解析:
透過獲到客戶端返回的HTTP_X_WAP_PROFILE訊息,可以判斷一定是手機終端,但是並不是所有手機都能返回這個訊息,這個和等下的獲取via是一樣的,這涉及到終端和服務商問題!
代碼:
-
//如果via資訊含有wap則一定是行動裝置,部分服務商會封鎖該資訊
- if(isset( $_SERVER['HTTP_VIA']))
- {
- //找不到為flase,否則為true
- return stristr($_SERVER['HTTP_VIA'],"wap") ? true : false;
- }
-
複製程式碼
分析:
這個HTTP_VIA裡面,包含有服務商提供一些個人信息,如果由這個去判斷是最為準確的,但是比如說移動就屏蔽了這個信息。因此,只對部分服務商有效。
代碼:
-
//腦殘法,判斷手機發送的客戶端標誌,相容性有待提高
- if(isset($_SERVER ['HTTP_USER_AGENT']))
- {
- $clientkeywords = array('nokia','sony','ericsson','mot','samsung',
- 'htc','sgh', 'lg','sharp','sie-','philips','panasonic','alcatel',
- 'lenovo','iphone','ipod','blackberry','meizu','android ','netfront',
- 'symbian','ucweb','windowsce','palm','operamini','operamobi',
- 'openwave','nexusone','cldc','midp ','wap','mobile');
- // 從HTTP_USER_AGENT中尋找手機瀏覽器的關鍵字
- if (preg_match("/(".implode('|',$clientkeywords).") /i",
- strtolower($_SERVER['HTTP_USER_AGENT'])))
- {
- return true;
- }
- }
-
複製代碼 }
複製代碼 }
複製程式碼>
分析:
這個透過客戶端回傳訊息[HTTP_USER_AGENT]來配置手機終端關鍵字。試想下,要列出所有的手機標識,才能準確判斷,這個可行嗎?所以,只要列舉主流的手機品牌,這樣就基本上OK了。不過,上在的程式碼有一個是判斷ucweb的,這個是判斷不了的。 -
- 因為,我取得的資訊和取得firefox的資訊是一致的,也找不到ucweb的關鍵字。
所以使用ucweb瀏覽器就無法進行判斷,有待新方法出現。
畢竟,ucweb佔用絕大部分用戶,但ucweb是以pc瀏覽器標準靠攏的,因為些被誤認為是pc瀏覽器也可以吧!
代碼:
-
-
-
-
-
-
//協議法,因為有可能不準確,放到最後判斷
- if (isset($_SERVER[' HTTP_ACCEPT'])) {
- // 如果只支援wml且不支援html那一定是行動裝置
- // 如果支援wml和html但是wml在html之前則是行動裝置
- if ((strpos ($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false)
- && (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判斷頁面程式。
-
-
/**
- *程 序:iswap.php判斷是否是透過手機存取
- *程式回傳:@return bool 是否為行動裝置
- */
- function isMobile()
- {
- // 如果有HTTP_X_WAP_PROFILE則一定是行動裝置
- if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
- return true;
- }
-
- //如果viaviaviaviamvia則是如果資訊含有行動設備,部分服務商會屏蔽該資訊
- if(isset($_SERVER['HTTP_VIA']))
- {
- //找不到為flase,否則為true
- return stristr($_SERVER ['HTTP_VIA'],"wap") ? true : false;
- }
-
- //腦殘法,判斷手機發送的客戶端標誌,相容性有待提高
- if(isset($ _SERVER['HTTP_USER_AGENT']))
- {
- $clientkeywords = array('nokia','sony','ericsson','mot','samsung',
- 'htc','sgh' ,'lg','sharp','sie-','philips','panasonic','alcatel',
- 'lenovo','iphone','ipod','blackberry','meizu',' android','netfront',
- 'symbian','ucweb','windowsce','palm','operamini','operamobi',
- 'openwave','nexusone','cldc',' midp','wap','mobile');
- // 從HTTP_USER_AGENT中尋找手機瀏覽器的關鍵字
- if (preg_match("/(".implode('|',$clientkeywords)." )/i",
- strtolower($_SERVER['HTTP_USER_AGENT']))
- {
- return true;
- }
- }
-
- //協定法,因為有可能不準確,放到最後判斷
- if (isset($_SERVER['HTTP_ACCEPT'])) {
- // 如果只支援wml且不支援html那一定是行動裝置
- // 如果支援wml和html但是wml在html之前則是行動裝置
- if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false)
- && (strpos($ _SERVER['HTTP_ACCEPT'], 'text/html') === false
- || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml')
- {
- return true;
- }
- }
-
- return false;
- }
- >>>?
複製程式碼
|