PHPマニュアル要点まとめ #3【実用的な例】
この記事の動画版はこちら(画像クリックでYoutubeに飛びます)
※この記事はPHPマニュアルの解説です。
実用的な例【要点まとめ】
マニュアルはこちら
このページでは、さらに実用的な例として「ページを見ているユーザーのブラウザの種類を表示するPHPプログラム」が紹介されています。
ユーザーがページを閲覧する際、「user agent」という文字列として、ブラウザの種類やバージョン情報を送信しています。
PHPでは以下のように書くと、user agentの内容を取得することが出来ます。
$_SERVER['HTTP_USER_AGENT']
つまり、PHPのecho命令で画面に出力するようにすると
echo $_SERVER['HTTP_USER_AGENT'];
ブラウザの画面上には、このようにページを見ているユーザーのブラウザの情報が表示されるという訳ですね。
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
これは、PHPの「変数」というものを使っており、PHPの変数は必ずドル記号 $ で始まります。
さらに、今回使ったような、$の後にアンダースコアが書かれている変数は、PHPの特別な予約変数となっており「スーパーグローバル」と呼ばれます。
これらはPHPのバージョン4.1.0で導入され、それ以前では「$HTTP_SERVER_VARS」のような別の名前の変数が使われていましたが、現在はそれら古い変数目は使用出来ないので注意しましょう。
スーパーグローバルには、今回使ったサーバー以外にも多くのものがあり、「定義済みの変数」のページにまとまっています。
前回行った「phpinfo()」関数でも、定義済みの変数のリストを確認することが出来ます。
PHPの変数には様々な型があり、上記の例では「配列」という形を使っています。
PHPのタグの中には、1つだけでなくこのように複数の命令を書くことも出来ます。
<?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { echo 'あなたはInternet Explorerを使用しています<br />'; } ?>
ここでは新しい書き方が2つ登場しています。
新しい書き方①「if文」
if文は、C言語など多くのプログラミング言語で使用される基本構文で、条件判定を行うためのものです。
この例では、先ほど取得したuser agentの内容を確認し、文字列内に「MSIE」という文字が含まれるかどうかという判定を行っています。
もしこの判定にマッチしたら、波括弧{}の中の命令が実行されます。
echo 'あなたはInternet Explorerを使用しています<br />';
つまり、user agentの内容に「MSIE」という文字が含まれていたら、画面に「あなたはInternet Explorerを使用しています」と表示されるプログラムですね。
新しい書き方②「strpos」
これはPHPにあらかじめ用意されている「標準関数」というもので、便利ツールのようなものです。
この「strpos」という標準関数を使うと「ある文字列の中に指定した文字列が含まれているかどうか」をチェックしてくれます。
今回の場合は、ある文字列というのはuser agentの文字列、つまり最初に表示させたこれですね。
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
この文字列の中に「MSIE」という文字が含まれているかどうかをチェックしています。
この例の場合は含まれているので、関数の結果として「その文字が登場する位置」が返されます。
もし、別の種類のブラウザでアクセスした場合は「MSIE」という文字が含まれていませんので「false」という結果が返されます。
そして、このif文では「結果がfalseでなければ(つまり文字列が含まれていれば)、このecho命令を実行」と書かれているため
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)
MSIEいう文字が含まれている場合にだけ、echo命令が実行されるという訳ですね。
if文の使い方や、strposを始めとするPHPの標準関数の使い方は以下のページにまとまっています。
if文
https://www.php.net/manual/ja/control-structures.if.php
関数リファレンス
https://www.php.net/manual/ja/funcref.php
なお、if文では「else」というように書くと、if文の条件に「マッチしなかった場合」に実行させる処理を書くことも出来ます。
つまりこのように書くと
<?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ?> <h3>strposが非falseを返しました</h3> <center><b>あなたはInternet Explorerを使用しています</b></center> <?php } else { ?> <h3>strposがfalseを返しました</h3> <center><b>あなたはInternet Explorerを使用していません</b></center> <?php } ?>
if文に「マッチした場合」と「マッチしなかった場合」で処理を分けることが出来ます。
また、この例ではHTMLを出力する際に先ほどのようにecho命令を使うのではなく、直接HTMLを記述しています。
このようにPHPモードを一度終わらせることでHTMLモードに戻り、直接HTMLを書くことも出来ます。
どちらの方法でも処理結果は同じなので、例えば多くのHTMLを書かなければならない場合など、毎回echo命令を書くのが大変な時は、上記のように一度PHPモードを終わらせるといったように使い分けるようにしましょう。