【PHP】スーパーグローバル変数 SERVER編

php PHP

はじめに

前回に続きPHPスーパーグローバル変数の記事を書いていきます。
今回は$_SERVERの勉強です。

$_SERVER

$_SERVERにはヘッダ情報が配列型式で格納されています。
ヘッダ情報はフィールドと値のペアとして「フィールド名:値」のように扱われます。

リクエストヘッダのフィールド

ヘッダフィールド 内容
Host リクエスト先のサーバー名。
User-Agent Webブラウザの情報。
Accept 利用可能なアプリケーションやメディアタイプ。
Accept-Language クライアントが利用可能な言語。複数指定し、優先度をつけることが可能。
Accept-Encoding 利用可能なエンコーディング型式。
Accept-Charset 利用可能な文字セット。
Referer 直前にリンクされていたURL。
Cookie クライアントに保存されているクッキーデータ。

レスポンスヘッダのフィールド

ヘッダフィールド 内容
Location リダイレクト先のURL。クライアントに別のURLへの移動を促す。
Server サーバーアプリケーションの種類。
WWW-Authenticate クライアントに認証を要求。
Etag エンティティタグ。リソースを特定するための情報。

エンティティヘッダのフィールド

ヘッダフィールド 内容
Content-Type リソースのタイプ。
Content-Encoding リソースコンテンツのエンコード方法。
Content-Length コンテンツのサイズ。単位はバイト。
Expiires コンテンツの有効期限。
Last-Modified コンテンツの最終更新日時。

一般ヘッダのフィールド

ヘッダフィールド 内容
Cache-Control キャッシュの取扱に必要な指示や情報。
Connection 接続の永続性情報。
Date コンテンツの作成日時。
Transfer-Encoding コンテンツの転送エンコーディング型式。

リクエストメッセージからヘッダー情報を抜き出す

mb_strpos()関数

文字列の中に指定した文字列が最初に現れる位置を返します。

構文

mb_strpos ($haystack, $needle [$offset, $encoding])
パラメーター 内容
$haystack(string型) 調べたい文字列。
$needle(string型) 検索する文字列。
$offset(int型) 検索オフセット。省略した場合0。
$encoding(string型) 文字エンコーディング。省略した場合、内部で使用されている文字エンコーディングを使用する。

戻り値:int型の値
文字列の中で検索文字列が最初に現れる位置を数値で返す。
見つからない場合はFALSEを返す。

サンプルプログラム

RequestHeader.php
<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="utf-8" />
        <title>sample</title>
    </head>
    <body>
        <table border="1">
            <?php require_once 'Escape.php'; ?>
            <?php
            foreach ($_SERVER as $key => $value) {
                if (mb_stripos($key, 'HTTP_') === 0 ) {
            ?>
               <tr>
                   <th align="left"><?php es($key); ?></th?
                   <td align="left"><?php es($value); ?></td>
               </tr>
            <?php
                }
            }
            ?>
        </table>
    </body>
</html>

上記で作成たページへアクセスするとリクエストヘッダーの情報が表示されます。

レスポンスヘッダーを設定して別のURLへリダイレクトさせる

リダイレクトの流れ
リダイレクト.png

header()関数

HTTPヘッダーを送信します。

構文

header ($str[,$replace, $http_response_code])
パラメーター 内容
$str(string型) ヘッダーフィールドとその値を「フィールド名:値」の型式で指定する。
$replace(boolean型) オプション。前に送信された類似のヘッダーを置換するか、同じ形式の二番目のヘッダーを追加するか指定する。
デフォルトはTRUEで置換を行う。
$http_response_code(int型) オプション。ステータスコードを強制的に指定する。

サンプルコード

location.php
<?php
    header('Location: http://localhost/sample/RequestHeader.php');
?>

location.phpへアクセスするとリダイレクト先のRequestHeader.phpが表示されます。
(header()のパラメータは自身の環境に合わせてください)

最後に

MANPでは正常に動作しませんでした。
私はIntelliJPHP Built-in Web Serverで動作確認をしました。
参考:IntelliJですばやくPHP開発環境を構築する