ホームページ  >  記事  >  バックエンド開発  >  PHP が WAP モバイル クライアントであるかどうかを判断する方法の詳細な説明

PHP が WAP モバイル クライアントであるかどうかを判断する方法の詳細な説明

WBOY
WBOYオリジナル
2016-07-25 08:56:211069ブラウズ
  1. // HTTP_X_WAP_PROFILE がある場合、それはモバイルデバイスである必要があります
  2. if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
  3. return true;
  4. }
コードをコピー

分析: クライアントから返される HTTP_X_WAP_PROFILE 情報を取得することで、それが携帯電話端末であることが判断できますが、すべての携帯電話がこの情報を返すことができるわけではありません。これは、後から取得するのと同じであり、端末とサービス プロバイダーの問題が関係します。 コード:

  1. //via 情報に wap が含まれている場合、一部のサービスプロバイダーはこの情報をブロックします
  2. if(isset($_SERVER['HTTP_VIA']))
  3. {
  4. //Find そうでない場合は false、それ以外の場合は 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. strto lower($_SERVER['HTTP_USER_AGENT'])))
  12. {
  13. return true;
  14. }
  15. }
コードをコピー

分析: これは、クライアントを使用して情報 [HTTP_USER_AGENT] を返し、モバイル端末のキーワードを設定します。正確に判断するにはすべての携帯電話のロゴをリストする必要があると想像してください。これは可能でしょうか?したがって、主流の携帯電話ブランドを列挙すれば基本的にはOKです。ただし、上記のコードの 1 つは ucweb を判定するものであり、判定することはできません。

なぜなら、私が取得した情報は Firefox から取得した情報と一致しており、ucweb キーワードが見つかりません。 したがって、ucweb ブラウザを使用して判断することは不可能であり、新しい方法の出現を待っています。 結局のところ、ucwebがユーザーの大部分を占めていますが、ucwebはPCブラウザの規格に基づいているため、PCブラウザと間違われても大丈夫です! コード:

  1. //プロトコルメソッドは不正確な可能性があるため最終判断にお任せします
  2. if (isset($_SERVER['HTTP_ACCEPT'])) {
  3. //wmlのみの場合サポートされているものとそうでないもの HTML をサポートしている場合は、モバイル デバイスである必要があります
  4. // wml と html をサポートしているが、wml が html の前にある場合、それはモバイル デバイスです
  5. if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd .wap.wml') !== false )
  6. && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false
  7. || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd .wap.wml')
  8. < strpos ($_SERVER['HTTP_ACCEPT'], 'text/html'))))
  9. {
  10. return true;
  11. }
  12. }
コードをコピー

分析: 結局のところ、それは合意ですが、まったく合意ではありません。 MIME タイプの判断です。wml ページを受信するだけの携帯電話はモバイル端末でなければならないことは言うまでもありませんが、そのような甘い考えは不可能です。なぜなら今、携帯電話は徐々にコンピュータの機能に近づいてきているからです。 ?ブラウザで受け入れられるページの種類は wml だけでなく、html もサポートされています。 wmlの受信はhtmlよりも上位に位置します。これは携帯電話向けとも言えますが、絶対的なものではありません。たとえば、Blueberry では、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. //via 情報に wap が含まれている場合、一部のサービスプロバイダーはこの情報をブロックします
  12. if(isset($_SERVER['HTTP_VIA']))。
  13. {
  14. // false が見つからない、そうでない場合は 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. strto lower($_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. < strpos($_SERVER['HTTP_ACCEPT'], 'text/html'))))
  40. {
  41. return true;
  42. }
  43. }
  44. return false;
  45. }
  46. ?>
コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。