携帯電話向けサイトでのPHPの応用・端末振り分け(1)。
PHPはHTML文書に埋め込まれるものなので、HTML以外のリソースを扱う事は出来ないと思い込んでいました。しかし、header函数などを用いる事で、HTML以外のテキスト系リソースを扱ったり別のリソースを送出する事も出来るようです。
下記は、この特徴を用いて、主な携帯端末向けにページを振り分けるものです。
- 当サイトで利用しているスクリプトとは異なります。
- ソフトバンクブランドの端末にも対応しました(平成18年 8月17日)。
ソースコードと解説。
<?php $title="サイト名称"; $page_e='EZウェブ専用ページのURL'; $page_j='ボーダフォン専用ページのURL'; $page_i='一般携帯電話対応ページのURL'; $page_h='H"リンク専用対応ページのURL'; $i=$_SERVER['HTTP_USER_AGENT'];//EZウェブHDML機か。if (preg_match("/UP\.Browser\/[3-5]/",$i)) { header('Content-Type: text/x-hdml;charset=shift_jis'); echo('<hdml version="3.0" markable="TRUE" public="TRUE">'); echo('<nodisplay markable="TRUE" public="TRUE" title="'.$title.'">'); echo('<action type="ACCEPT" task="GO" dest="'.$page_e.'">'); echo('</nodisplay>'); echo('</hdml>'); exit(); }//ボーダフォン在来機か。if (preg_match("/J-PHONE\//",$i)) { header("Location: $page_j"); exit(); }//H"リンクか。if (preg_match("/PDXGW\//",$i)) { header("Content-Type: text/plain"); echo("From: $page_h\n"); echo("Subject: $title\n"); echo("Content-Type:Text/X-PmailDX\n"); echo("\n"); echo("<SEL=99;$page_h>\n"); echo("<BODY=000000;BG=FFFFFF>\n"); echo("$title\n"); echo("\n"); echo(" いらっしゃいませ。ご訪問ありがとうございます。\n"); echo(" ------------\n"); echo("99⇒メニュー\n"); echo("「99」を入力して下さい。\n"); exit(); }//iモード/EZウェブ次世代機/エアーH"フォンなどの携帯端末一般。if (preg_match("/DoCoMo\//",$i) || preg_match("/Opera[\s\/]/",$i) && !(preg_match("/(Win|Mac|Linux|FreeBSD|OS\/2|Solaris)/i",$i)) || preg_match("/UP\.Browser/",$i) || preg_match("/\AVodafone/",$i) || preg_match("/\ASoftBank/",$i) || preg_match("/\AMOT-/",$i) || preg_match("/DDIPOCKET;/",$i) || preg_match("/WILLCOM;/",$i) || preg_match("/L-mode\/\//",$i)) { header("Location: $page_i"); exit(); } ?>(以下、PC向けトップページのHTMLが続く)
ボーダフォン在来機は一般の携帯電話向けとは異なるリソースとなる為、HTTP応答ヘッダのLocationフィールドを出力する事で別々のページに移動させます。EZウェブHDML機及び- 追記(平成16年 4月22日)。
- オペラブラウザ搭載の携帯機器に対応するため、ユーザエージェント文字列に「Opera」が含まれ、且つ「Win」「Mac」「linux」などのデスクトップOS名をいずれも含まない場合(つまり、これらのOSではない場合)は一般携帯端末向けのページへリダイレクトさせるようにしました。
- 追記(平成15年12月16日)。
- EZウェブのHDMLブラウザのヴァージョンによっては、Locationフィールドに依るリダイレクトではリダイレクト先の相対アドレスを正しく処理できないものがあります(勿論、Locationフィールドの値は絶対アドレスにしなければならない事は言うまでもありませんが、正しく絶対アドレスで表記しても正常に処理できないのです)。このため、HDML独自のリダイレクト機能を持つHDMLデッキを発行します。
- H"リンクに関しては、HTTP応答ヘッダにおけるLocationフィールドが機能しないので、オープンネットコンテンツフォーマットのリンクページを発行しています。
- PHPはHTMLに埋め込むものですので、ここではPC向けのトップページに埋め込んでいるものとしていますが、PCも一般携帯端末と同じページを見せるのであれば、「
//iモード/EZウェブ次世代機/エアーH"フォンなどの携帯端末一般。」から「?>」直前行までは不要となります。 - このスクリプトの前には絶対にHTML文書を記述してはいけません。HTML文書がある場合は必ずこのスクリプトの後に記述して下さい。