第8章 リクエスト情報 / 第1回 模擬試験
`$_SERVER`グローバル配列に関する次の記述のうち誤っているものはどれか。
`$_SERVER['PHP_SELF']`要素は、現在のリクエストのURLのパス名部分を保持する。
Webブラウザが現在のページをリクエストするのに使ったHTTPメソッドは、`$_SERVER['REQUEST_METHOD']`に保持される。
`$_SERVER['REMOTE_ADDR']`要素は、Webサーバにリクエストを行ったユーザのIPアドレスを保持する。
`$_SERVER['QUERY_STRING']`要素は、URLの疑問符`?`の前に続くURLパラメータを保持する。
正解
解説
`$_SERVER['QUERY_STRING']`要素は、URLの疑問符`?`の後ろに続くパラメータ部分(例: `https://example.com/page?id=1&sort=asc`の`id=1&sort=asc`)を保持します。「前に続く」は誤りです。
他の選択肢が正しい理由は次の通りです。
・`$_SERVER['PHP_SELF']`は、実行中スクリプトのドキュメントルートからの相対パス(クエリ文字列を含まないパス部分)を保持します。
・`$_SERVER['REQUEST_METHOD']`には`GET`、`POST`、`PUT`など、リクエストに使われたHTTPメソッドの文字列が入ります。
・`$_SERVER['REMOTE_ADDR']`には、リクエスト元クライアントのIPアドレスが入ります(リバースプロキシ経由の場合は別途`X-Forwarded-For`などを確認する必要があります)。
例:
```
// https://example.com/page.php?id=1&sort=asc へのアクセス
echo $_SERVER['QUERY_STRING']; // id=1&sort=asc
```
(参照: 独習PHP 第4版 第8章 リクエスト情報 8.4節 ヘッダー情報——$_SERVER p.368)