LoginSignup
0
2

More than 5 years have passed since last update.

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

Posted at

はじめに

前回に続き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開発環境を構築する

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2