フルスタックエンジニアのノウハウ
2020.12.08    2021.02.25

PHPマニュアルを一緒に読み解こう!#3【実用的な例】

PHPマニュアルを一緒に読み解こう!#3【実用的な例】

この記事の動画版はこちら

チャンネル登録お願いします!


※この記事は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モードを終わらせるといったように使い分けるようにしましょう。


おすすめ記事