ホームページ  >  記事  >  バックエンド開発  >  PHP での $_REQUEST の使用の詳細に注意してください

PHP での $_REQUEST の使用の詳細に注意してください

WBOY
WBOYオリジナル
2016-06-20 13:01:071422ブラウズ

PHP で $_REQUEST を使用する場合は詳細に注意してください

レポート プログラムでは、$_REQUEST は特定の条件をクエリするデータを受け取るために使用されます。$_REQUEST['from'] が渡されない場合 (デフォルト)、既存のデータの from が取得されます。 1つ。作成後、ローカルでテストを実行して合格し、サーバーに転送するとテストが合格します。

受け入れ中にバグが発生しました。そのバグは非常に奇妙なものでした。同じプログラムが同じサーバー、同じ Web サイト、同じ URL に配置され、異なるコンピュータ上に置かれ、私のコンピュータではデフォルトで開かれました。一部のマシンで開いた場合、デフォルトではデータがありません。

クライアント ブラウザ間の違いを排除するために、プログラム内でデータ配列 print_r を出力しました。結果は、ここで大量のデータを出力できましたが、コンピューターで表示した場合と同じでした。以前にデータがなかった場合、空の配列が出力されます。

多くの友人がこの要件に遭遇したことがあるかもしれません。特定のパラメータを渡すとき、フォーム POST が来た場合は $_POST の値を使用し、そうでない場合は $_GET で値を取得します。多くの人は $_REQUEST を思い浮かべるでしょう。$_GET と $_POST の両方に同じ名前のパラメータがある場合、$_REQUEST のパラメータは $_POST であり、$_POST を優先する必要性が満たされます (どちらを優先するかは実際に設定されています)。 php.ini では、デフォルトでは POST が GET より優先されます)。

しかし、便利なものには常に隠れた危険が伴います。多くの人は、$_REQUEST を使用するときに $_COOKIE を忘れ、$_REQUEST が $_GET と $_POST を組み合わせた配列であると考えています。 $_REQUEST が何で、どれが優先されるかは、実際には php.ini の variables_order パラメータ (デフォルトでは「EGPCS」) に基づいて決定されます。

私の場合、一部のマシンには、特定のサブサイトのプログラムで from という名前の COOKIE があり、スコープは *.primary ドメイン名であるため、マシン上の $_REQUEST にはコンテンツが含まれます。はい、$_COOKIE の from です。で、これを使ってデータを確認すると、当然消えています(笑)。

コードを書くときは、利便性を求めないでください。自分自身に厳しくすることによってのみ、より堅牢なプログラムを書くことができます。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。