実用的な例
次に、より実用的なことをしてみましょう。
ページを見ているユーザーが使用しているブラウザの種類を確認してみます。
これを行なうには、ブラウザが
HTTP リクエストの一部として送信した user agent 文字列を調べます。
この情報は、変数
に保存されています。PHP では、変数名は常にドル記号で始まります。
ここで使用する変数は、$_SERVER['HTTP_USER_AGENT']
です。
注意:
$_SERVER
は、 Web サーバー関連情報を全て保持する PHP の特別な予約変数です。詳細は、 スーパーグローバル を参照してください。 これらの特別な変数は、» 4.1.0 で導入されました。これ以前は、$HTTP_SERVER_VARS
のような古い配列$HTTP_*_VARS
を代わりに使用していました。 PHP 5.4.0 で、これらの古い変数は削除されました (古いコードに関する注記も 参照してください)。
この変数を表示するには、以下のようにします。
例1 変数を出力する (配列要素)
<?phpecho $_SERVER['HTTP_USER_AGENT'];?>
このスクリプトの出力例は以下のようになります。
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
PHP で利用可能な変数の型 には多くの種類があります。上の例では、 配列 の要素を出力しています。配列は、非常に有用です。
$_SERVER
は、PHP
で自動的に利用可能な変数のひとつに過ぎません。マニュアルの
定義済の変数
のセクションでリストを参照することができます。
あるいは、完全なリストを取得するには、さきほどのセクションで使用した
phpinfo() 関数の出力を確認します。
PHP タグの中に複数の PHP 命令を置くことができ、echo 文以上のことを行なうコードブロックを作成することができます。 例えば、インターネット・エクスプローラかどうかを調べたい場合は、 以下のようにします。
<?phpif (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { echo 'あなたはInternet Explorerを使用しています<br />';}?>
このスクリプトの出力例は以下のようになります。
あなたはInternet Explorerを使用しています<br />
ここで、新しい概念をいくつか導入します。 if 文を使用しています。 C 言語の基本構文を知っているとしたら、理解できると思います。 C 言語や上記の構文を使用する他の言語をあまり知らない場合には、 PHP の入門書を手にとって最初の数章を読むか、このマニュアルの 言語リファレンスの部分を読むべきです。
二番目の新しい概念は、strpos() 関数のコールです。
strpos() は PHP に組み込まれた関数で、
文字列の中である文字列を探します。この場合、
$_SERVER['HTTP_USER_AGENT']
(いわゆる干し草の山
【haystack】) の中で
"MSIE"
(いわゆる針【needle】) を探しています。
この文字列が見つかった場合、
この関数はこの関数は文字列の相対的な位置を返し、
見つからなかった場合には false
を返します。
この関数が false
を返さなければ、
if
文は true
と評価し、その{波括弧}の中のコードが実行されます。
そうでない場合は、実行されません。
if,
else と
strtoupper() や strlen()
のような他の関数で、似たような例を作ってみてください。
関連するマニュアルの各ページにも例が載っています。
関数の使用法に自信がない場合には、マニュアルの
関数定義の読み方および
PHP関数のセクションの両方を
読んでみると良いでしょう。
この例を少し発展させて、PHP ブロックの中からでも PHP モードから出たり入ったりすることができることを以下に示します。
例3 HTML および PHP モードの両方を混在させる
<?phpif (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}?>
この例の出力は以下のようになります。
<h3>strposが非falseを返しました</h3> <center><b>あなたはInternet Explorerを使用しています</b></center>
何かを出力する際に PHP の echo 文を使用する代わりに、PHP
モードを抜けて通常の HTML を送信しています。ここで注意すべき重要で強力な点は、
スクリプトの論理フローが損なわれないということです。
strpos() が true
または false
のどちらを返すか、言い換えるとMSIE
が見つかったかどうかに基づき、HTML
ブロックだけが見る側に送信されることになります。