PHPでアクセスしているデバイスを表示する

(1/1)
PHPでアクセスしているデバイスを表示する
ホームページを作成する際、アクセスしてきているデバイスがスマホかPCかによって作り方を変える場合がある。
PHPでユーザー・アクセス情報を表示する」で解説したサーバ変数 HTTP_USER_AGENT を使えば、アクセスしてきているデバイスやOSを識別することができる。そこで今回は、アクセスしているデバイスを判定し表示するプログラムを作ってみることにする。

(2024年2月11日)isKeitai()→getDevice() デバイス名を返す

サンプル・プログラムの実行

プログラムを実行(QRコード)
QRコード

目次

サンプル・プログラム

圧縮ファイルの内容
isKeitai.phpサンプル・プログラム本体
isKeitai.php 更新履歴
バージョン 更新日 内容
4.0.0 2024/02/11 isKeitai()→getDevice() デバイス名を返す
3.01 2022/07/02 bug-fix
3.0 2022/05/15 大幅改訂,PHP8対応
2.0 2008/09/09 ロジック見直し
1.2 2007/02/04 通常・携帯サイトを1つのプログラムにまとめた

解説:アクセスしているデバイス名を返す

  79: /**
  80:  * アクセスしているデバイス名を返す.
  81:  * 現在判明している HTTP_USER_AGENT の値を利用
  82:  * @param   なし
  83:  * @return  bool TRUE:ケータイである/FALSE:ケータイでない
  84: */
  85: function getDevice() {
  86:     //HTTP_USER_AGENT パターン
  87:     static $table = array(
  88:         array('ドコモ携帯電話',         '/DoCoMo/'),
  89:         array('au携帯電話',             '/PDXGW/'),
  90:         array('ソフトバンク携帯電話',   '/SoftBank/'),
  91:         array('J-PHONE携帯電話',        '/J-PHONE/'),
  92:         array('ボーダフォン携帯電話',   '/Vodafone/'),
  93:         array('ボーダフォン携帯電話',   '/UP\.Browser/'),
  94:         array('ASTEL携帯電話',          '/ASTEL/'),
  95:         array('DDIポケット携帯電話',    '/DDIPOCKET/'),
  96:         array('MOT携帯電話',            '/MOT/'),
  97:         array('イーモバイル携帯電話',   '/emobile/'),
  98:         array('BlackBerry',             '/BlackBerry/'),
  99:         array('iPhone',                 '/CPU\s+iPhone/'),
 100:         array('iPod',                   '/iPod.+CPU\s+iPhone/'),
 101:         array('iPad',                   '/iPad.+\;CPU/'),
 102:         array('Android',                '/Linux\;\s*Android.+Mobile/'),
 103:         array('Windows CE',             '/Windows\*CE/'),
 104:         array('Windows',                '/Windows/'),
 105:         array('macOS',                  '/Macintosh\;.+mac\s*os/i'),
 106:         array('Linux',                  '/Linux/'),
 107:         array('Linux',                  '/FreeBSD/'),
 108:         array('Linux',                  '/SunOS/'),
 109:         array('PlayStation|PSP',        '/PlayStation/i'),
 110:         array('任天堂ゲーム機',         '/Nintendo/i'),
 111:     );
 112: 
 113:     $res = 'unknown';
 114:     //HTTP_USER_AGENT にマッチしたらループ脱出
 115:     foreach ($table as $items) {
 116:         if (preg_match($items[1], $_SERVER['HTTP_USER_AGENT']) > 0) {
 117:             $res = $items[0];
 118:             break;
 119:         }
 120:     }
 121:     return $res;
 122: }

プログラムは簡単で、ユーザー関数 getDevice の中で、HTTP_USER_AGENT に特徴的な文字列があるかどうかを判定している。

なお、ブラウザやプログラムによって HTTP_USER_AGENT の値を偽装できるものがある。したがって、getDevice の戻り値は絶対正しいとは言い切れない。あくまで目安としてご利用いただきたい。

参考サイト

(この項おわり)
header