UPDATE:2021年06月20日
PHP $_REQUEST(リクエスト変数)のすべて!【初心者向け基本】
$_REQUEST(リクエスト変数) 簡単まとめ
- $_REQUEST はPHPの定義済み変数(=スーパーグローバル変数)の1つ
- $_REQUEST は現在の $_GET、$_POST、$_COOKIE などの内容をまとめた変数
- $_REQUEST は 連想配列 として使用する
- $_REQUEST は、関数やメソッドの内部で使用する場合、global $_REQUEST; とする必要がない
- $_REQUEST は、PHPの設定ディレクティブ(php.ini)
variables_order (PHP5.3~)で仕様を決める - variables_order = "EGPCS"の場合、スーパーグローバル変数 ($_ENV、$_GET、$_POST、$_COOKIE、$_SERVER)の値が組み込まれ、左から順番に解析 後から登録した値が古い値を上書
$_REQUEST(リクエスト変数)とは
- $_REQUEST はPHPの定義済み変数(=スーパーグローバル変数)の1つ
- $_REQUEST は現在の $_GET、$_POST、$_COOKIE などの内容をまとめた変数
$_REQUESTは、PHPの定義済み変数のリクエスト変数です。データ型は配列です。この変数(配列変数)は、現在の$_GET、$_POST、$_COOKIEの内容をまとめた変数です。PHPディレクティブ(php.ini)の variables_order の設定によって $_ENV、$_SERVER を追加することもできます。このディレクティブの設定で登録順序も指定できます。$_REQUESTの仕様設定 request_order。初期値では COOKIE > POST > GET の順で優先されます。
簡単な例
以下の例では、$_POST の内容を $_REQUEST で表示させています。フォームで送信された $_POST['name'] は同じキーネームの連想配列 $_REQUEST ['name'] で受け取ることが可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="robots" content="all"> <title>PHPの変数 $_REQUEST ( リクエスト変数 ) | WEPICKS!</title> </head> <body> <h1>PHPの変数 $_REQUEST ( リクエスト変数 )</h1> <hr/> <?php if(isset($_POST['name'])) //htmlentities()等でエスケープ処理を行いブラウザに出力 echo "送信されました。<br>\n名前は、".htmlentities($_REQUEST['name'], ENT_QUOTES, 'UTF-8')."さんです。<br>\n"; ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 名前:<input type="text" name="name" size="10" value="山田" /><br> <input type="submit" value="送信"> </form> <hr/> </body> </html> |
名前は、山田さんです。
※注意:
$_REQUEST の値は $_POST や $_GET など、ユーザーが入力した値が直接設定されているので、汚染されている値が格納されている場合があります。$_REQUEST の値を使用する場合は適切にフィルタリングを行う必要があります。フィルタリングについてはこちらを参照下さい。
$_REQUESTはPHPの定義済み変数
(PHPには定義済みの定数というものもあります。詳細はこちらを参照下さい。)
PHPの定義済み変数(=スーパーグローバル変数)
$GLOBALS (グローバル変数) | ・グローバルスコープで使用可能なすべての変数への参照 ・連想配列として使用 |
---|---|
$_SERVER (サーバー変数) | ・サーバ情報および実行時の環境情報 ・連想配列として使用 |
$_GET (ゲット変数) | ・HTTP GET 変数 ・連想配列として使用 |
$_POST (ポスト変数) | ・HTTP POST 変数 ・連想配列として使用 |
$_FILES (ファイル変数) | ・HTTP ファイルアップロード変数 ・連想配列として使用 |
$_REQUEST (リクエスト変数) | ・HTTP リクエスト変数 ・連想配列として使用 |
$_SESSION (セッション変数) | ・セッション変数 ・連想配列として使用 |
$_ENV (環境変数) | ・環境変数 ・連想配列として使用 |
$_COOKIE (クッキー変数) | ・HTTP クッキー ・連想配列として使用 |
これら、PHPの定義済み変数は、プログラムコード中何処からでも使用することができます。関数の内部でも globalキーワードを使用せず呼び出すことが出来ます。このように、スーパーグローバル変数は非常に便利なものです。
通常、変数には有効範囲などのルールがあります。このルールは、PHPにおいて変数のスコープという宣言の場所とそれによる有効範囲として定められています。スコープには、「グローバルスコープ」「ローカルスコープ」「スタティック変数」「関数の引数」の4種類ありますが、これらすべてのスコープを持っているのがスーパーグローバル変数です。
変数のスコープについてはこちらを参照下さい。
※注意:
ただし、スーパーグローバル変数は、関数やクラスメソッドの中の 可変変数 として使用することはできません。
可変変数についてはこちらを参照下さい。
$_REQUESTの送受信
- $_REQUESTは、連想配列として使用する
- $_REQUEST は、関数やメソッドの内部で使用する場合、global $_REQUEST; とする必要がない
- $_REQUESTは、PHPの設定ディレクティブ(php.ini)
variables_order (PHP5.3~)で仕様を決める - variables_order = "EGPCS"の場合、
スーパーグローバル変数 ($_ENV、$_GET、$_POST、$_COOKIE、$_SERVER)の値が組み込まれ、左から順番に解析 後から登録した値が古い値を上書
$_REQUESTは現在の $_GET、$_POST、$_COOKIE などの内容をまとめた変数
$_REQUESTは、連想配列で使用します。
$_REQUESTは、スーパーグローバル変数なので、スクリプトのコード中どこからでも使用することが出来る変数です。関数やメソッドの内部で使用する場合にも global $_REQUEST; とする必要はありません。
$_POST と $_REQUEST
以下は $_POST の値を $_REQUEST で表示させています。
1 2 3 4 5 6 7 8 9 | <?php if(isset($_POST['name'])) //htmlentities()等でエスケープ処理を行いブラウザに出力 echo '送信されました。<br>名前は、'.htmlentities($_REQUEST['name'], ENT_QUOTES, 'UTF-8').'さんです。<br>'."\n"; ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 名前:<input type="text" name="name" size="10" value="山田" /><br> <input type="submit" value="送信"> </form> |
送信した結果は、
結果は
名前は、山田さんです。
となります。
$_GET と $_REQUEST
$_GET の値を $_REQUEST で表示させています。
1 2 3 4 5 6 7 8 9 | <?php if(isset($_GET['name'])) //htmlentities()等でエスケープ処理を行いブラウザに出力 echo '送信されました。<br>名前は、'.htmlentities($_REQUEST['name'], ENT_QUOTES, 'UTF-8').'さんです。<br>'."\n"; ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET"> 名前:<input type="text" name="name" size="10" value="鈴木" /><br> <input type="submit" value="送信"> </form> |
送信した結果は、
結果は
名前は、鈴木さんです。
となります。
$_REQUESTは連想配列として使用する
次の例では、 $_POST['name'] を $_REQUEST['name'] で呼び出しています。
1 2 3 4 5 6 7 8 9 | <?php if(isset($_POST['name'])) //htmlentities()等でエスケープ処理を行いブラウザに出力 echo '送信されました。<br>名前は、'.htmlentities($_REQUEST['name'], ENT_QUOTES, 'UTF-8').'さんです。<br>'."\n"; ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 名前:<input type="text" name="name" size="10" value="山田" /><br> <input type="submit" value="送信"> </form> |
$_POST のキー名が $_REQUEST のキー名になっています。
$_REQUESTを関数やメソッドの内部で使用する場合
$_REQUESTは、スーパーグローバル変数なので、スクリプトのコード中どこからでも使用することが出来る変数です。関数やメソッドの内部で使用する場合にも global $_REQUEST; とする必要はありません。
通常、関数外部で宣言された変数は global キーワードで引き渡さなければ、関数内部で利用できません。
例えば、
1 2 3 4 5 6 7 | <?php $name = '山田'; function hello(){ echo 'こんにちは、'.$name.'さん<br>'."\n"; } hello(); ?> |
結果は
となります。
global キーワードで関数内部へ変数を引き渡すと
1 2 3 4 5 6 7 8 | <?php $name = '山田'; function hello(){ global $name; echo 'こんにちは、'.$name.'さん<br>'."\n"; } hello(); ?> |
結果は
となります。
ですが、$_REQUESTを使用すると global $_REQUEST; と宣言しなくても関数内部で使用できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php //関数定義 function hello(){ echo 'こんにちは、'.htmlentities($_REQUEST['name'], ENT_QUOTES, 'UTF-8').'さん。<br>'."\n"; } //送信された場合関数実行 if(isset($_POST['name'])) echo '送信されました。<br>'.hello(); ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 名前:<input type="text" name="name" size="10" value="山田" /><br> <input type="submit" value="送信"> </form> |
結果は
となります。
$_REQUESTの仕様設定 variables_order
variables_order の設定内容を確認する場合は、phpinfo() 関数を利用します。
この関数を実行させて表示させた情報の中に variables_order の表記があります。
例えば、
variables_order = "EGPCS"
とした場合、
スーパーグローバル変数 ($_ENV、$_GET、$_POST、$_COOKIE、$_SERVER )の値が組み込まれ、左から順番に解析されます。例えば variables_order を “SP” に設定すると、PHP は スーバーグローバル変数 $_SERVER と $_POST を作成しますが、$_ENV、$_GET、 $_COOKIE は作成しません。空 “” に設定すると、スーパーグローバル変数を設定しません。
$_REQUESTの仕様設定 request_order
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <h3>POST変数の送信とREQUEST変数の取得</h3> このページに 「posttime」という名前で「値」は現在時刻の POST変数 を送信します。<br> 送信したPOST変数の値をREQUEST変数で出力します。<br> <form action="http://www.wepicks.net/code-example/php/3-5-8.php" method="post"> <input type="text" name="posttime" value="<?php echo '現在時刻は:'.date('Y/m/d H:i:s'); ?>" size="60"> <input type="submit" value="送信"> </form> <div style="background-color:#ffffff;margin:10px; padding:10px; border:solid #efefef 1px;"> <?php //$_REQUEST['posttime']が存在していれば if(isset($_POST['posttime'])){ echo '<strong>$_POST[\'posttime\']が送信されました。値は[ '.htmlentities($_POST['posttime'], ENT_QUOTES, 'UTF-8').' ]です。'."</strong><br>\n"; echo '<strong>$_REQUEST[\'posttime\']で取得しました。値は[ '.htmlentities($_REQUEST['posttime'], ENT_QUOTES, 'UTF-8').' ]です。'."</strong><br>\n"; ?> <form action="http://www.wepicks.net/code-example/php/3-5-8.php" method="post"> <input type="submit" value="クリア"> </form> <?php }else{ echo '<strong>$_POST[\'posttime\']はまだ送信されていません。'."</strong><br>\n"; } ?> </div> <h3>GET変数の送信とREQUEST変数の取得</h3> このページに 「gettime」という名前で「値」は現在時刻の GET変数 を送信します。<br> 送信したGET変数の値をREQUEST変数で出力します。<br> 以下のURLがGET変数を送信するURLです。URLをクリックして送信して下さい。<br> 値はurlencode()されています。<br> <a href="http://www.wepicks.net/code-example/php/3-5-8.php?gettime=<?php echo urlencode('現在時刻は:'.date('Y/m/d H:i:s')); ?>">http://www.wepicks.net/code-example/php/3-5-8.php?gettime=<?php echo urlencode('現在時刻は:'.date('Y/m/d H:i:s')); ?></a><br> <div style="background-color:#ffffff;margin:10px; padding:10px; border:solid #efefef 1px;"> <?php //$_GET['gettime']が存在していれば if(isset($_GET['gettime'])){ echo '<strong>$_GET[\'gettime\']が送信されました。値は[ '.htmlentities($_GET['gettime'], ENT_QUOTES, 'UTF-8').' ]です。'."</strong><br>\n"; echo '<strong>$_REQUEST[\'gettime\']で取得しました。値は[ '.htmlentities($_REQUEST['gettime'], ENT_QUOTES, 'UTF-8').' ]です。'."</strong><br>\n"; ?> <a href="http://www.wepicks.net/code-example/php/3-5-8.php">クリア</a> <?php }else{ echo '<strong>$_GET[\'gettime\']はまだ送信されていません。'."</strong><br>\n"; } ?> </div> |
タグ(=記事関連ワード)
日付
最終更新日:2021年06月20日