これらのコードのどれがより高速になりますか?
$temp = $_REQUEST['s'];
または
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
$_REQUEST
は、デフォルトで、$_GET
、$_POST
、および$_COOKIE
の内容を含みます。
しかし、それは variables_order
に依存するデフォルトのみです。 Cookieを使用するかどうかわからない。
選択する必要がある場合は、おそらく$_REQUEST
を使用せず、$_GET
または$_POST
を選択します-アプリケーションの動作に応じて(すなわち、両方ではなく、どちらか一方):一般的に言えば:
$_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を使用すると便利です。
$_POST
と$_GET
を明示的に使用することをお勧めします。
とにかく適切なサイト設計では$ _REQUESTを使用する必要はありません。また、CSRF/XSS
攻撃やURLにデータを保存することによる他の愚かさを受け入れやすいなどの欠点もあります。
どちらの場合も速度の違いは最小限に抑える必要があります。
REQUESTを使用します。このような単純な操作の速度を気にかける人はいませんし、コードもずっときれいです。
心配しないで。ただし、$_REQUEST
にはセキュリティ上の問題があるため(この配列のソースは$_GET
と$_POST
だけではないため)、2番目のソリューションを使用する必要があります(さらに、これらの変数が存在しないことを確認します)。
昨日$_REQUEST
の問題に関する投稿があったと思います。それを見つけに行かせてください。
EDIT:まあ、直接投稿ではありませんが、とにかくここにあります: http://kuza55.blogspot.com/ 2006/03/request-variable-fixation.html
$ _GETは、クエリ文字列またはURLから変数を取得します。>
$ _POSTは、(通常)フォームなどのPOSTメソッドから変数を取得します。
$ _REQUESTは$ _GETと$ _POSTのマージで、$ _ POSTは$ _GETをオーバーライドします。検証のために自己参照フォームで$ _REQUESTを使用すると便利です。
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
それはより安全であり、顕著な速度差が生じないため、それを使用してください
$ _GET、$ _ POST、または$ _REQUESTを使用してデータを取得したときの速度は関係ありません
ただし、場合によっては$_GET
の代わりに$_POST
を使用することはできません。
いつ ??
GET
には、送信する情報の量にも制限があります。制限は約2000文字です。
他には、$_POST
を使用してデータを取得できない場合はほとんどありません
いつ ?
休息サービス
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
$_REQUEST
を使用しても問題はありません。
しかし、そのための方法は、$ _ POSTが空であることをGETに依存せずに、$ _ SERVER ['REQUEST_METHOD']を明示的にチェックすることです。
これを使って、
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
ステートメントは、$ _ REQUESTに複数のパラメーターがあるかどうかを検証します($ _REQUESTの最初のパラメーターは、必要なときに使用できるリクエストURIです。一部のPHPパッケージは$ _GETを返さないので、1デフォルトでは、$ _ POSTになります。
$_POST
とは異なり、その内容は$_GET
の影響を受けないため、$_REQUEST
とvariables_order
を使用します。$_POST
および$_GET
を使用するタイミングは、実行されている操作の種類によって異なります。サーバーから処理されるデータを変更する操作はPOSTリクエストを介して実行する必要があり、他の操作はGETリクエストを介して実行する必要があります。例として、ユーザーがリンクをクリックした後、ユーザーアカウントを削除する操作を直接実行しないでください。イメージを表示するにはリンクを使用します。
より明示的であるため、2番目の方法を使用します。そうでなければ、変数がどこから来たのかわかりません。
とにかくGETとPOSTの両方をチェックする必要があるのはなぜですか?どちらか一方を使用することは、より意味があります。
_GETまたは_POSTのみを使用します。制御したい。
OPのどちらのコードフラグメントについても私が嫌いなのは、どのHTTPメソッドが使用されたかに関する情報を破棄することです。そして、その情報は入力のサニタイズにとって重要です。
たとえば、スクリプトがDBに入力されるフォームからのデータを受け入れる場合、フォームはPOSTを使用する方が適切でした( べき等アクションのみにGETを使用 )。ただし、スクリプトがGETメソッドを介して入力データを受信した場合、(通常)拒否されます。私にとって、このような状況は、誰かが何かを試みている兆候であるため、セキュリティログをエラーログに書き込むことを保証するかもしれません。
OPのいずれかのコードフラグメントでは、このサニタイズは不可能です。
いため、コードをライブでプッシュするときの最終的なソリューションとしてはお勧めしませんが、残りの関数を作成する際に、「キャッチオール」パラメーターグラバーを用意すると便利な場合があります。
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から提供されるものを処理することもできます。特定の休憩機能の動作を決定したら、その特定の呼び出しに適切なものを1つ選択して、展開バージョンに必要なものを確実に取得できます。これは、「REQUEST_METHOD」が設定されていることを前提としています。
あなたは時期尚早に最適化しています。また、セキュリティ上の理由から、POSTを実行しているものにGETを使用するかどうかについて、いくつかの点を検討する必要があります。