PHPでユーザーエージェント判定

PHPでユーザーエージェント判定
Image by Sammy-Sander from Pixabay

2022.07.07(更新日:2022.07.07)

通常スマホかPCか判定するのはjavascritpでuseragentなんか取得して行うのが常。
とある案件でスマホとPCでデザインを変えるという条件があったので、安易にその方法を使ったら…プラグインのコードとバッティングしてしい表示が不可能に。そんなこんなで見つけたのがPHPで判定する方法だ。

この記事は1年以上経過しています。内容的に古い場合があります。

JSなら「navigator.userAgent」

大抵検索するとこんな感じで丁寧に説明されていると思う。もしブラウザ幅でしたいなら「window.matchMedia」を使うだろう。

/* javascript */
(function($) {
  // navigator.userAgentを使うなら幅を指定して…
  if ( navigator.userAgent.match(/(iPhone|Android.*Mobile)/i ) ) {
    // 上記条件に当てはまる(スマホ)時
  } else {
    // 上記条件に当てはまらない(タブレット/PC)時
  }
  // window.matchMediaを使うなら幅を指定して…
  if ( window.matchMedia( "(min-width: 768px)").matches ){
    // プラウザ幅が768px以上の処理
  } else {
    // プラウザ幅が767px以下の処理
  }
})(jQuery);

この分岐でPCならトップページ、スマホなら固定ページと飛ばす仕様。問題なく動作したのだが…よくある「仕様変更追加」で機能を追加することに。
プラグインの機能でカバー出来るようだったので安心していたのだが、プラグインのJSとぶつかって思いっきりバグる! 時間はないし、プラグイン自体変更はしたくない。分岐でJSを使うのは諦めるしかないか…

PHPでのユーザーエージェントを簡単に判定するMobile_Detect

現実的にJSが使えないならPHP。そして見つけたのがPHPクラスライブラリ「Mobile_Detect」だ。(助かった…)

使用方法は簡単。兎にも角にもファイルをダウンロードしてfunctions.phpの最後にでも読み込む指定をする。

/* functions.php */
// require_onceでも何でもいいので読み込む
include ( 'Mobile_Detect.php' );

あとは分岐が必要なテンプレートごとに指定を書くだけ。今回はスマホとタブレット、PCが分岐出来れば良いので

/* Templete */
$detect = new Mobile_Detect; // 絶対必要なおまじない
if( $detect->isMobile() && !$detect->isTablet() ) {
  // スマホ時の処理
} else {
  // それ以外の処理
}

分岐条件も多彩

絞り込む条件もOS、端末、ブラウザ等で細かく指定も出来るみたいだ。
これを元に分岐条件を含めたものを関数化したり、それぞれ分岐後の処理部分をテンプレート化して読み込む指定をしたりすると、ファイルの整理もかなり出来るんじゃないかな。
ん〜便利! ダウンロードは以下から。