PHP 8.4.0 RC4 available for testing

実用的な例

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

注意:

$_SERVER は、 Web サーバー関連情報を全て保持する PHP の特別な予約変数です。詳細は、 スーパーグローバル を参照ください。

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

例1 変数を出力する (配列要素)

<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>

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

Mozilla/5.0 (Linux) Firefox/112.0

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

$_SERVER は、PHP で自動的に利用可能な変数のひとつに過ぎません。マニュアルの 定義済の変数 のセクションでリストを参照することができます。 あるいは、完全なリストを取得するには、さきほどのセクションで使用した phpinfo() 関数の出力を確認します。

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

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

<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
echo
'あなたはFirefoxを使用しています';
}
?>

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

あなたはFirefoxを使用しています

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

二番目の新しい概念は、str_contains() 関数のコールです。 str_contains() は PHP に組み込まれた関数で、 指定された文字列が、別の文字列に含まれているかを判定します。この場合、 $_SERVER['HTTP_USER_AGENT'] (いわゆる干し草の山 【haystack】) の中で "Firefox" (いわゆる針【needle】) を探しています。 この文字列が見つかった場合、 この関数は true を返し、 見つからなかった場合には false を返します。 この関数が true を返すと、 if 文は true と評価し、その{波括弧}の中のコードが実行されます。 そうでない場合は、実行されません。 if, elsestrtoupper()strlen() のような他の関数で、似たような例を作ってみてください。 関連するマニュアルの各ページにも例が載っています。 関数の使用法に自信がない場合には、マニュアルの 関数定義の読み方および PHP関数のセクションの両方を 読んでみると良いでしょう。

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

例3 HTML および PHP モードの両方を混在させる

<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
?>
<h3>str_contains() がtrueを返しました</h3>
<center>あなたはFirefoxを使用しています</center>
<?php
} else {
?>
<h3>str_contains()がfalseを返しました</h3>
<center>あなたはFirefoxを使用していません</center>
<?php
}
?>

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

<h3>str_contains() がtrueを返しました</h3>
<center>あなたはFirefoxを使用しています</center>

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

add a note

User Contributed Notes 1 note

up
170
Declan Kelly
10 years ago
Please note that Internet Explorer 11 no longer contains MSIE in its user agent string, for example on Windows 8 with IE11 I get the following:

Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko

So if you want to include a test for IE11, the code above changes to:

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE ||
strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== FALSE) {
echo
'You are using Internet Explorer.<br />';
}
?>
To Top