回答:
$_REQUEST
デフォルトでは、内容が含まれ$_GET
、$_POST
そして$_COOKIE
。
しかし、これはデフォルトにすぎず、これはに依存しvariables_order
ます。Cookieを使用したいかどうかわからない。
私が選択しなければならなかった場合、私はおそらく使用しないだろう$_REQUEST
、と私は選ぶだろう$_GET
か$_POST
- 私のアプリケーションは、何をすべきかに応じて (すなわち、1つまたは他の、両方ではない):一般的に言えば:
$_GET
誰かがアプリケーションからデータを要求しているときに使用する必要があります。$_POST
、誰かがアプリケーションにデータをプッシュ(挿入または更新、または削除)するときに使用する必要があります。どちらの方法でも、パフォーマンスに関してはそれほど大きな違いはありません。スクリプトの残りの部分と比べて、違いはごくわずかです。
GETとPOST
1)GETとPOSTの両方で配列が作成されます(例:array(key => value、key2 => value2、key3 => value3、...))。この配列はキーと値のペアを保持します。キーはフォームコントロールの名前、値はユーザーからの入力データです。
2)GETとPOSTはどちらも$ _GETと$ _POSTとして扱われます。これらはスーパーグローバルです。つまり、スコープに関係なく常にアクセスできます。特別なことをしなくても、関数、クラス、ファイルからアクセスできます。
3)$ _GETは、URLパラメーターを介して現在のスクリプトに渡される変数の配列です。
4)$ _POSTは、HTTP POSTメソッドを介して現在のスクリプトに渡される変数の配列です。
GETを使用する場合
GETメソッドを使用してフォームから送信された情報は、誰でも見ることができます(すべての変数名と値がURLに表示されます)。GETでは、送信する情報の量にも制限があります。制限は約2000文字です。ただし、変数はURLに表示されるため、ページをブックマークすることが可能です。これは、場合によっては役立ちます。
GETは、機密ではないデータの送信に使用できます。
注:GETは、パスワードやその他の機密情報の送信には使用しないでください。
いつPOSTを使用するのですか?
POSTメソッドを使用してフォームから送信された情報は、他の人には見えず(すべての名前/値はHTTPリクエストの本文に埋め込まれています)、送信する情報の量に制限はありません。
さらに、POSTは、ファイルをサーバーにアップロードする際のマルチパートバイナリ入力のサポートなどの高度な機能をサポートします。
ただし、URLには変数が表示されないため、ページをブックマークすることはできません。
$ _GETは、クエリ文字列またはURLから変数を取得します。>
$ _POSTは、(一般に)フォームなどのPOSTメソッドから変数を取得します。
$ _REQUESTは$ _GETと$ _POSTのマージであり、$ _ POSTは$ _GETをオーバーライドします。検証用の自己参照フォームで$ _REQUESTを使用すると便利です。
GET
クエリ文字列POST
から、フォーム送信から)。
REQUESTを使用します。そのような単純な操作の速度を気にする人は誰もいませんし、コードがよりすっきりしています。
$_REQUEST
は、使用することは間違った結論です。私の答えを見てください。
心配しないで。ただし、セキュリティ上の問題があるため$_REQUEST
($_GET
および$_POST
その配列の唯一のソースではないため)、2番目のソリューション(およびこれらの変数が存在しないことに対する追加のチェック)を使用する必要があります。
$_REQUEST
昨日の問題についての投稿があったと思います。探しに行こう。
編集:まあ、直接の投稿ではありませんが、とにかくここにあります:http : //kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
安全で、目立った速度の違いが発生しないため、これを使用してください
$_REQUEST
ますが、同じスクリプトにどちらの方法でもアクセスできます(私の場合、同じスクリプトが異なる「アクション」で使用され、$ _ GETで問題ない場合もあれば、$が必要な場合もあります_POST(データの非表示/保護)。
ハッカーが$ _POSTまたは$ _GETの値を上書きするCookieを設定できるため、セキュリティ上の懸念が伴います。機密データを扱う場合、$ _ REQUESTの使用はお勧めしません。– Xandor
場合によっては、の$_GET
代わりに使用することはできません$_POST
。
いつ ??
GET
送信する情報量にも制限があります。制限は約2000文字です。
他のことはあなたがを使用してデータを取得できない場合がほとんどないことです $_POST
いつ ?
休憩サービス
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
使用に問題はありません$_REQUEST
。
ただし、これを行う方法は、$ _ SERVER ['REQUEST_METHOD']を明示的にチェックすることであり、GETで$ _POSTが空であることに依存しません。
$_SERVER['REQUEST_METHOD']
してスクリプトが呼び出されるかどうかを確認するためのの使用に関する良いアドバイス。しかし、何も問題$_REQUEST
がないと言うことは100%真実ではありません。ハッカーが$ _POSTまたは$ _GET値をオーバーライドするCookieを設定できるため、セキュリティ上の懸念事項がいくつかあります。機密データを扱う場合は、の使用はお勧めしません$_REQUEST
。
$ _GETは、クエリ文字列またはURLから変数を取得します。>
$ _POSTは、(一般に)フォームなどのPOSTメソッドから変数を取得します。
$ _REQUESTは$ _GETと$ _POSTのマージであり、$ _ POSTは$ _GETをオーバーライドします。検証用の自己参照フォームで$ _REQUESTを使用すると便利です。
request_order
はCookieの値に依存しており、Cookieの値も含まれている可能性があります。そのため、この機能は信頼性が低く、便利な機能でもありません。
2番目の方法は、より明確であるため、使用します。そうでなければ、変数がどこから来ているのかわかりません。
とにかくGETとPOSTの両方を確認する必要があるのはなぜですか?確かにどちらか一方を使用することはより意味があります。
GET
1つの項目(移動など)とPOST
複数の項目(チェックボックスのあるフォーム)に使用されています。
_GETまたは_POSTのみを使用します。私はコントロールすることを好みます。
OPのどちらのコードフラグメントについても、どのHTTPメソッドが使用されたかに関する情報を破棄するのが嫌いです。そして、その情報は入力サニタイズのために重要です。
たとえば、スクリプトがDBに入力されるフォームからデータを受け入れる場合、フォームはPOSTを使用することをお勧めします(べき等アクションに対してのみGETを使用します)。しかし、スクリプトがGETメソッドを介して入力データを受け取った場合、それは(通常)拒否されます。私にとって、このような状況は、誰かが何かを試みている兆候であるため、セキュリティ違反をエラーログに書き込む必要があるかもしれません。
OPのどちらのコードフラグメントでも、このサニタイズは不可能です。
あなたは時期尚早に最適化しています。また、セキュリティ上の理由から、POSTする対象にGETを使用するかどうかについても十分に検討する必要があります。
これは醜いので、コードをライブでプッシュするときの最終的な解決策としてはお勧めしませんが、残りの関数を構築するときに、「キャッチオール」パラメーターグラバーを用意すると便利です。
public static function parseParams() {
$params = array();
switch($_SERVER['REQUEST_METHOD']) {
case "PUT":
case "DELETE":
parse_str(file_get_contents('php://input'), $params);
$GLOBALS["_{$_SERVER['REQUEST_METHOD']}"] = $params;
break;
case "GET":
$params = $_GET;
break;
case "POST":
$params = $_POST;
break;
default:
$params = $_REQUEST;
break;
}
return $params;
}
コマンドラインパラメータやIDEからのデータを処理するために、クリエイティブに追加することもできます。特定のREST関数が何を実行するかを決定したら、その特定の呼び出しに適切なものを1つ選択して、デプロイバージョンに必要なものを確実に取得できます。これは、「REQUEST_METHOD」が設定されていることを前提としています。
!isset($_REQUEST['s'])
。