PHP入門 PHPでリクエスト情報の扱いについて

PHPでリクエスト情報を扱うスーパーグローバル変数について解説しています。

リクエスト情報とは

クライアントからサーバーに送信される情報のことをリクエスト情報と呼びます。また、HTTPとはサーバーとクライアントがお互いに通信する際に利用するプロトコルのことで、クライアントの要求に対してサーバーが応答するときの、情報のやり取りの手段を決めています。

HTTPプロトコルのリクエスト/レスポンスは以下の表の部分から構成されます。

HTTP通信の構成

分類項目概要
リクエストHTTPメソッドサーバーに対する直接の要求と取得するパス
リクエストヘッダーリクエストの構成情報、クライアント情報など
リクエストボディ送信されたデータ
レスポンスHTTPステータスサーバーでの処理結果を表すコードとメッセージ
レスポンスヘッダーコンテンツの構成情報、サーバー情報など
レスポンスボディコンテンツ本体

HTTPメソッドとHTTPステータス

HTTPメソッドは、クライアントからサーバーに対して発行する直接の命令で、メソッド名、プロトコル情報で構成されます。

GETは、指定したコンテンツを取得するための命令で、HTTPで用意されている命令の中でも最も基本的なものです。HTTPメソッドがクライアントからサーバーへの指示を表すのに対して、サーバーでの処理結果を表すのがHTTPステータスです。

「200 OK」は、サーバーでの処理が正しく終了して応答が返されたことを表すメッセージです。

HTTPで利用可能なHTTPステータス

分類HTTPステータス意味
100(情報)100 Continue接続可能
200(成功)200 OK成功
201 Created成功(サーバー側に新しいリソースを生成)
202 Accepted受付完了(未処理)
300(リダイレクト)301 Moved Permanentlyリソースが恒久的に移動した
302 Foundリソースが一時的に移動した
303 See Otherリソースが別の場所に存在する
304 Not Modifiedリソースが変更されていない
400(クライアントエラー)400 Bad Request不正なリクエスト
401 UnauthorizedHTTP認証を要求
403 Forbidfdenアクセスを拒否
404 Not Foundリソースが見つからない
405 Method Not AllowedHTTPメソッドが不許可
407 Proxy Authentication Requiredプロキシで認証の必要がある
408 Request Time-outリクエストタイムアウト
500(サーバーエラー)500 Internal Server Errorサーバーエラー
501 Not Implemented応答に必要な機能が未実装
503 Service UnavailableHTTPサーバーが利用不可

スーパーグローバル変数

PHPでは、リクエスト情報を取得/操作するためにスーパーグローバル変数という特別な変数を公開しています。特別というのは、スーパーグローバル変数が他の変数と違って自分で用意する必要のない変数だからです。PHPが自動的にリクエスト情報などを解析し、必要な情報をスーパーグローバル変数として用意してくれます。そのため、スクリプト側ではこれを参照するだけで必要な情報を取得することができます。

スーパーグローバル変数は、どのスコープでも有効という性質があります。関数の内外にかかわらず、スーパーグローバル変数には無条件でアクセスできます。

PHPで利用可能なスーパーグローバル変数

変数名内容
$_POSTPOST形式のHTMLフォームから渡された情報
$_GETクエリ情報(~?キー名=値)経由で渡された情報
$_FILESアップロードされたファイルに関数情報
$_SERVERリクエストヘッダー、またはサーバー固有の変数情報
$_ENVサーバー側で定義された環境変数
$_COOKIEクッキー経由で渡された情報
$_SESSIONセッション経由で渡された情報
$_REQUEST$_GET、$_POST、$_COOKIEの値をまとめて管理

$_REQAUESTは、$_GET/$_POST/$_COKIEの値をまとめて扱えて便利そうですが、次の理由から原則利用すべきではありません。

  • 同名のキーがあった場合に、片方のキーが上書きされてしまう
  • どこから受け取ったデータなのかあいまいになりやすい