このサイトはPHPを独習する際に作成したスクリプトを基に、プログラム言語初心者のための入門講座として作成しました。PHPは初心者に親しみやすく、解りやすいプログラム言語です。これからプログラムを学ぶ人の参考になればと思います。
17-1 携帯とPCの判断
携帯のサイトを作ることになったのですが、色々調べて驚きました。HTMLは使えないタグもあるし、StyleSheetも使えません。 その上機種によって色々と制限があるのですね。 携帯のサイトをPCで見ると細長くてかっこ悪いです。同じURLで携帯とPC両方が綺麗に表示されるように作りたいものです。 そこで、PHPを使って、ユーザーが携帯なのかPCなのかを判断させ、2種類のHTMLを表示できるように作成します
ユーザー・エージェントを読み取る
ユーザー・エージェントとはサイトを見る側のパソコンや携帯の情報です。パソコンか携帯か、Internet ExplorerかFirefoxなのかを知ることができます。
$agent = $_SERVER['HTTP_USER_AGENT'];
これで現在使っているPCの情報を得ると、
Internet Explorerの場合は Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; FDM; InfoPath.2)
Firefoxの場合は Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.4) Gecko/20070515 Dealio Toolbar 3.1 Firefox/2.0.0.4
という結果がでました。()の中の情報はよくわからないものもありますが、Mozilla/x.xの部分がわかればいいのです。
Mozilla/4.0の場合は ・Internet Explorer 6.0 又は 7.0/ Windows XP ・Sleipnir 2.5.8 / Windows XP ・Lunascape 3.6.5 / Windows XP
Mozilla/5.0の場合は ・Firefox 2.0.0.1 / Windows XP ・Firefox 2.0.0.1 / Mac OS X ・Netscape 7.1 / Windows XP ・Safari 419.3 / Mac OS X
Operaの場合は ・Opera 9.10 / Windows XP Windows NT 5.1という表示が()の中にありますがこれはOSの種類です。
9x 4.1 → Windows 98 又は Windows 98SE 9x 4.9 → Windows Millennium Edition NT 5.0 → Windows 2000 NT 5.1 → Windows XP NT 5.2 → Windows Server 2003 又は Windows XP Professional x64 Edition NT 6.0 → Windows Vista
そこで、これが携帯なら DoCoMo とか SoftBank とか Vodafone という言葉がでくるはずです。
正規表現で同じものを探す
preg_match() は、ユーザー・エージエントの文字の中に同じモノがあるかを判断する正規表現の関数です。この名前の部分に各種携帯の名称を入れればパソコンか携帯の区別ができます。
preg_match("/名前/",$_SERVER['HTTP_USER_AGENT']);
正確にはpreg_match() はマッチした回数を返します。しかし、結果は0 回または 1 回です。 これは、最初にマッチした時点で検索を止めるためです。preg_match_all()は、終わりまで検索を続けます。
下の場合DoCoMo と Vodafone とそれ以外の区別をしていることになります。
if(preg_match("/DoCoMo/",$_SERVER['HTTP_USER_AGENT'])){ DoCoMoの場合のHTML }elseif(preg_match("/Vodafone/",$_SERVER['HTTP_USER_AGENT'])){ Vodafoneの場合のHTML }else{ 上2種以外やPCの場合のHTML }
|