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