web-dev-qa-db-ja.com

$ _REQUEST、$ _ GET、および$ _POSTのうち、どれが最も速いですか?

これらのコードのどれがより高速になりますか?

$temp = $_REQUEST['s'];

または

if (isset($_GET['s'])) {
  $temp = $_GET['s'];
}
else {
  $temp = $_POST['s'];
}
172
kobra

$_REQUEST は、デフォルトで、$_GET$_POST、および$_COOKIEの内容を含みます。

しかし、それは variables_order に依存するデフォルトのみです。 Cookieを使用するかどうかわからない。

選択する必要がある場合は、おそらく$_REQUESTを使用せず、$_GETまたは$_POSTを選択します-アプリケーションの動作に応じて(すなわち、両方ではなく、どちらか一方):一般的に言えば:

  • 誰かがアプリケーションからデータfromを要求しているときに$_GETを使用する必要があります。
  • そして、誰かが(挿入または更新;または削除)データtoをプッシュしているときに$_POSTを使用する必要があります応用。

いずれにせよ、パフォーマンスに大きな違いはありません。スクリプトの残りの部分と比較して、違いはごくわずかです。

263
Pascal MARTIN

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に表示されないため、ページをブックマークすることはできません。

31
Zee Ken

$ _GETは、クエリ文字列またはURLから変数を取得します。>

$ _POSTは、(通常)フォームなどのPOSTメソッドから変数を取得します。

$ _REQUESTは$ _GETと$ _POSTのマージで、$ _ POSTは$ _GETをオーバーライドします。検証のために自己参照フォームで$ _REQUESTを使用すると便利です。

21
gewel

$_POST$_GETを明示的に使用することをお勧めします。

とにかく適切なサイト設計では$ _REQUESTを使用する必要はありません。また、CSRF/XSS攻撃やURLにデータを保存することによる他の愚かさを受け入れやすいなどの欠点もあります。

どちらの場合も速度の違いは最小限に抑える必要があります。

17
Daniel Bruce

REQUESTを使用します。このような単純な操作の速度を気にかける人はいませんし、コードもずっときれいです。

8

心配しないで。ただし、$_REQUESTにはセキュリティ上の問題があるため(この配列のソースは$_GET$_POSTだけではないため)、2番目のソリューションを使用する必要があります(さらに、これらの変数が存在しないことを確認します)。

昨日$_REQUESTの問題に関する投稿があったと思います。それを見つけに行かせてください。

EDIT:まあ、直接投稿ではありませんが、とにかくここにあります: http://kuza55.blogspot.com/ 2006/03/request-variable-fixation.html

7
Franz

$ _GETは、クエリ文字列またはURLから変数を取得します。>

$ _POSTは、(通常)フォームなどのPOSTメソッドから変数を取得します。

$ _REQUESTは$ _GETと$ _POSTのマージで、$ _ POSTは$ _GETをオーバーライドします。検証のために自己参照フォームで$ _REQUESTを使用すると便利です。

4
krunal panchal
if (isset($_GET['s'])) {
  $temp = $_GET['s'];
}
else {
  $temp = $_POST['s'];
}

それはより安全であり、顕著な速度差が生じないため、それを使用してください

4
Kristina Brooks

$ _GET、$ _ POST、または$ _REQUESTを使用してデータを取得したときの速度は関係ありません

ただし、場合によっては$_GETの代わりに$_POSTを使用することはできません。

いつ ??

  • ファイルをアップロードするとき。
  • uRLにデータを表示しない場合。

GETには、送信する情報の量にも制限があります。制限は約2000文字です。

他には、$_POSTを使用してデータを取得できない場合はほとんどありません

いつ ?

  • データがURLで渡されるとき。

休息サービス

`GET` - Provides a read only access to a resource.

`PUT` - Used to create a new resource.

$_REQUESTを使用しても問題はありません。

しかし、そのための方法は、$ _ POSTが空であることをGETに依存せずに、$ _ SERVER ['REQUEST_METHOD']を明示的にチェックすることです。

2
Parth Chavda

これを使って、

$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;

ステートメントは、$ _ REQUESTに複数のパラメーターがあるかどうかを検証します($ _REQUESTの最初のパラメーターは、必要なときに使用できるリクエストURIです。一部のPHPパッケージは$ _GETを返さないので、1デフォルトでは、$ _ POSTになります。

1
Cosmo Arun

$_POSTとは異なり、その内容は$_GETの影響を受けないため、$_REQUESTvariables_orderを使用します。
$_POSTおよび$_GETを使用するタイミングは、実行されている操作の種類によって異なります。サーバーから処理されるデータを変更する操作はPOSTリクエストを介して実行する必要があり、他の操作はGETリクエストを介して実行する必要があります。例として、ユーザーがリンクをクリックした後、ユーザーアカウントを削除する操作を直接実行しないでください。イメージを表示するにはリンクを使用します。

1
kiamlaluno

より明示的であるため、2番目の方法を使用します。そうでなければ、変数がどこから来たのかわかりません。

とにかくGETとPOSTの両方をチェックする必要があるのはなぜですか?どちらか一方を使用することは、より意味があります。

1
Orange Box

_GETまたは_POSTのみを使用します。制御したい。

OPのどちらのコードフラグメントについても私が嫌いなのは、どのHTTPメソッドが使用されたかに関する情報を破棄することです。そして、その情報は入力のサニタイズにとって重要です。

たとえば、スクリプトがDBに入力されるフォームからのデータを受け入れる場合、フォームはPOSTを使用する方が適切でした( べき等アクションのみにGETを使用 )。ただし、スクリプトがGETメソッドを介して入力データを受信した場合、(通常)拒否されます。私にとって、このような状況は、誰かが何かを試みている兆候であるため、セキュリティログをエラーログに書き込むことを保証するかもしれません。

OPのいずれかのコードフラグメントでは、このサニタイズは不可能です。

1
user213154

いため、コードをライブでプッシュするときの最終的なソリューションとしてはお勧めしませんが、残りの関数を作成する際に、「キャッチオール」パラメーターグラバーを用意すると便利な場合があります。

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」が設定されていることを前提としています。

0
Scott

あなたは時期尚早に最適化しています。また、セキュリティ上の理由から、POSTを実行しているものにGETを使用するかどうかについて、いくつかの点を検討する必要があります。

0
Alex Brasetvik