最近ではあまり使わなくなったかも知れないMSIEとNNのブラウザによる分岐をさせてみましょう。
それには if 〜 else 文を使います。名のとおり、「もし〜なら**、そうじゃないなら**」という意味です。
簡単な例−変数$aが5以上なら上の文を表示します
if ($a > 5) { echo "aは5よりも大きい"; } else { echo "aは5よりも大きくない"; }
で、今回「もしMSIEならindex.htmlへジャンプ、そうじゃない(IE以外)ならindex2.htmlへジャンプ」というのを作成してみます。
「もしMSIEなら」という部分の判別には、「もし変数$HTTP_USER_AGENT(ブラウザ情報)に文字列’MSIE’が含まれていたら」と置き換えることが出来ます。
文字列’MSIE’を判別するには、正規表現関数 の ereg() を使ってマッチさせます。
ページへジャンプさせるには、header()
関数をつかってリダイレクトさせます。
まとめると次のようになります。exitはプログラムの終了です
if ( ereg ("MSIE", $_SERVER["HTTP_USER_AGENT"])){ header("Location: index.html"); exit; } else { header("Location: index2.html"); exit; }注:文字列の判定にeregを使ってますが、正規表現を使わない場合はstrstr関数でいいと思います。
if ( strstr ($_SERVER["HTTP_USER_AGENT"], "MSIE")){←書き方が逆
今度は携帯電話のブラウザ種類によるページ分岐を作ってみましょう。 サンプルはこちら
<? 1|$ua = $_SERVER["HTTP_USER_AGENT"]; 2|if(ereg("DoCoMo",$ua)){ 3| header("Location: http://example.com/i.php"); 4| exit; 5|}elseif(ereg("J-PHONE",$ua)){ 6| header("Location: http://example.com/j.php"); 7| exit; 8|}elseif(ereg("UP\.Browser",$ua)){ 9| header("Location: http://example.com/ez.php"); 10| exit; 11|}elseif(ereg("PDXGW",$ua)){ 12| header("Location: http://example.com/h.php"); 13| exit; 14|}else{ 15| header("Location: index.php"); 16| exit; 17|}?>
いきなり答え書いてしまいましたが、1行目から見ていきましょう。
1|$ua = $_SERVER["HTTP_USER_AGENT"];
のちのち書きやすくする為、ブラウザ変数$_SERVER["HTTP_USER_AGENT"]を $ua という変数に入れます。
2|if(ereg("DoCoMo",$ua)){
3| header("Location: http://example.com/i.php");
4| exit;
i-modeの判別をします。「DoCoMo」という文字がブラウザ情報にあれば、i.phpにリダイレクトさせます。
5|}elseif(ereg("J-PHONE",$ua)){
ここで elseif というのが出てきました。elseif は if 文でマッチしなかった後でさらに評価したい場合に使います。
この場合「DoCoMo」という文字が入ってなかって、さらにもし「J-PHONE」という文字があるかどうか評価します。
つづいて、Ez-Web、H"の分岐をさせます。
UP\.Browser これは'.'(ドット)が正規表現で任意の一文字を表すのでエスケープします。
14|}else{
15|header("Location: index.php");
16|exit;
17|}?>
最後にどの携帯ブラウザにもマッチしなかったら、index.phpにリダイレクトさせます。
尚このスクリプトは試してないので、実際にうまく動くかわかりません
if 文はこんな感じですが、次のように書くこともできます。
if($aaa) echo '$aaa には何か値が入ってます。TRUEです'; if(!$bbb) echo '$bbb には何もはいってません。FALSEです'; // ↑のは次の式と同じ意味です。一行なら括弧は省略できます if($aaa==TRUE){ echo '$aaa には何か値が入ってます。TRUEです'; } if($bbb==FALSE){ echo '$bbb には何もはいってません。FALSEです'; }
変数のセット関する評価は次の式を参考にして下さい
$var = 0; if ( empty($var) ) { // trueと評価された場合 print '$var は 0 か 空です'; } if ( !isset($var) ) { // falseと評価された場合 print '$var は 設定されてません'; }
ついでにループ処理も覚えてしまいましょう。ループ処理とは、くりかえしの作業をひとつにまとめてしまう事です。
forループは次のようになります
for ( $i=1; $i<=10; $i++ ){ echo $i; }実行すると 12345678910 と表示します。式の意味は「最初に1を代入して($i=1)、10より小さい間($i<=10)、$iを1ずつ増やしていく($i++)」という事です
つまり括弧の中(echo $i;)を10回繰り返すのです。
forを使って、配列の中身をすべて表示させるには次のように書けます
$arr = array(1,2,3,4,5,6,7,8,9,10); for ( $i=0; $i<sizeof($arr); $i++){ echo $arr[$i]; }sizeof()は配列の数をかぞえる関数です。配列は[0]からなので $i=0 から始めます。ここでsizeof($arr)の値は10となります。0からスタートしたので、9でループを終わるためには $i<sizeof($arr)[10] とすればいいのです。
forの括弧の中身には、別に$iをいれなくてもOKです。10回"アホ"と出力されます
for($i=0; $i<10; $i++){ echo "アホ"; }
whileループもforと同じ動作をします。以下は1から10を表示します
$i = 1; while ($i <= 10) { echo $i; $i++; }
forより解釈は単純です「$i が10以下の間、括弧の中をくりかえす」
詳しく書くと、最初$iに1を代入して表示。1足して10以下なので括弧の中実行。つまり2表示1足して3。10以下なので・・・ という具合です。
whileの場合は括弧の中で$i増やさないとダメです。
while($j<10){ echo "バカ";$j++; }
if文でちょっと追加。よく使う演算子を紹介します。
if($a == $b){ echo "$aと$bは等しい"; }
if($a != $b){ echo "$aと$bは等しくない"; }
if($a && $b){ echo "$aと$bはともにTRUE"; }
if($a || $b){ echo "$aと$bのどちらかがTRUE"; }
よく使うのはこの4つです。「&&」の変わりに「and」、「||」の変わりに「or」が使えます「eq」は使えません。
優先順位をつける場合は括弧を使いましょう。詳しくは第10章演算子をご覧下さい
某所で使用している携帯振り分けの方法です。
$host = gethostbyaddr(getenv('REMOTE_ADDR')); if(preg_match("/\.(ido|ezweb)\.ne\.jp$/",$host)){ $env = "au"; // EZweb WAP2.0 端末用の処理 }elseif(preg_match("/docomo\.ne\.jp$/",$host)){ $env = "i"; // i-mode 用の処理 }elseif(preg_match("/vodafone\.ne\.jp$/",$host)){ $env = "v"; // Vodafone 用の処理 }elseif(preg_match("/jp-[cdhknqrst]\.ne\.jp$/",$host)){ $env = "j"; // Vodafone 旧機種用の処理 }else{ $env = "pc"; // それ以外 }
この他に良く使う構文としてforeach構文があります。foreach構文は配列を展開するためにつかいます。
$arr = array(1,2,3,4,5,6,7,8,9,10); foreach ($arr as $num){ echo "$num<br>"; } // 配列のキーも使う場合 $arr['赤'] = '#FF0000'; $arr['緑']='#00FF00'; $arr['青'] = '#0000FF'; // 上と同じ意味です //$arr = array('赤'=>'#FF0000','緑'=>'#00FF00','青'=>'#0000FF'); foreach ($arr as $key=>$val){ echo "<option value='$val'>$key</option>\n"; }
$logfile="tt3";include("short.php");?> |