PHP マニュアル
前のページ | 第 2章簡易チュートリアル | 次のページ

# 実用的な例

次により実用的なことをしてみましょう。ページを見ているユーザが使用 しているブラウザの種類を確認してみます。これを行なうには、ブラウザが HTTPリクエストの一部として送信したuser agent文字列を調べます。 この情報は、変数に 保存されています。PHPでは、変数名は常にドル記号で始まります。 ここで使用する変数は、`$_SERVER['HTTP_USER_AGENT']` です。

> 注意: $_SERVER は、 Webサーバ関連情報を全て保持するPHPの特別な予約変数です。詳細は、 オートグローバル (スーパーグローバルとも呼ばれます) を参照して下さい。 これらの特別な変数は、4.1.0 で導入されました。これ以前は、 `$HTTP_SERVER_VARS`のような古い配列 `$HTTP_*_VARS`を代わりに使用していました。古い とはいえ、これらの変数はまだ存在しています。 (古いコードに関する注記も 参照して下さい。)

この変数を表示するには、以下のようにします。

例 2-2. 変数を出力する (配列要素)

`<?php echo $_SERVER["HTTP_USER_AGENT"]; ?>`

このスクリプトの出力例は以下のようになります。

    Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)

PHPで利用可能な変数の型 には多くの種類があります。上の例では、 配列 の要素を 出力しています。配列は、非常に有用です。

`$_SERVER` は、自動的にPHPで利用可能な 変数の一つに過ぎません。マニュアルの 予約変数のセクションで リストを参照することができます。また、以下のようなファイルを作成する ことにより、完全なリストを入手することができます。

例 2-3. phpinfo()で定義済みの変数を全て表示する

`<?php phpinfo(); ?>`

ブラウザにこのファイルを読み込むと、利用可能な全ての変数のリストとともに PHPに関する全ての情報を参照することができます。

PHPタグの中に複数のPHP命令を置くことができ、echo文以上のことを行なう コードブロックを作成することができます。 例えば、インターネット・エクスプローラかどうかを調べたい場合は、 以下のようにします。

例 2-4. 制御構造 および 関数の使用例

`<?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { echo 'あなたはInternet Explorerを使用しています<br />'; } ?>`

このスクリプトの出力例は以下のようになります。

    あなたはInternet Explorerを使用しています<br />

ここで、新しい概念をいくつか導入します。 if 文を使用しています。 C言語の基本構文を知っているとしたら、理解できると思います。 C言語や上記の構文を使用する他の言語をあまり知らない場合には、 PHPの入門書を手にとって最初の数章を読むか、このマニュアルの 言語リファレンスの部分を読むべきです。 http://www.php.net/books.phpでPHP関連の 本のリストを参照することができます。

二番目の新しい概念は、strstr()関数のコールです。 strstr() はPHPに組み込まれた関数で、 文字列の中である文字列を探します。この場合、 `$_SERVER['HTTP_USER_AGENT']`の中で `"MSIE"`を探しています。この文字列が見つかった場合、 この関数は `TRUE` を返し、見つからなかった場合には `FALSE`を返します。 この関数が`TRUE`を返し、if 文が`TRUE`と評価すると、その{波括弧}の中のコードが実行されます。 そうでない場合は、実行されません。 if, else と strtoupper() や strlen() のような他の関数で、似たような例を作ってみてください。 関連するマニュアルの各ページにも例がのっています。 関数の使用法に自信がない場合には、マニュアルの 関数定義の読み方および PHP関数のセクションの両方を 読んでみると良いでしょう。

この例を少し発展させて、PHPブロックの中からでもPHPモードから出たり 入ったりすることができることを以下に示します。

例 2-5. HTMLおよびPHPモードの両方を混在させる

`<?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 } ?>`

この例の出力は以下のようになります。

    <h3>strstrが非falseを返しました</h3>
    <center><b>あなたはInternet Explorerを使用しています</b></center>

何かを出力する際にPHPのecho文を使用する代わりに、PHPモードを抜けて、 通常のHTMLを送信しています。ここで注意すべき重要で強力な点は、 スクリプトの論理フローが損なわれないということです。 strstr() が `TRUE` または `FALSE`のどちらを 返すか、言い換えると`MSIE` が見つかったかどうかに 基づき、HTMLブロックだけが見る側に送信されることになります。

前のページ | ホーム | 次のページ
PHPを使用する初めてのページ | 上に戻る | フォームの処理