誰かの PHP コードを見直したことがありますが、彼はすべての GET 変数と POST 変数を 1 つのプレーンな古いオブジェクトにまとめて渡すことができる関数またはクラス メソッドを持っていました。同じ名前と値のペアが GET と POST の両方にある場合、POST が優先されます。
正確にこれを行う適切にコーディングされた PHP アドオンはありますか?
誰かの PHP コードを見直したことがありますが、彼はすべての GET 変数と POST 変数を 1 つのプレーンな古いオブジェクトにまとめて渡すことができる関数またはクラス メソッドを持っていました。同じ名前と値のペアが GET と POST の両方にある場合、POST が優先されます。
正確にこれを行う適切にコーディングされた PHP アドオンはありますか?
を使用することもできます$_REQUEST
が、、、、の内容が含まれていること$_GET
、$_POST
および$_COOKIE
このスーパーグローバル内の変数の存在(および上書き目的の順序)は実行環境での構成の影響を受けることに注意してください。
これが問題を引き起こしている場合は、単純なバージョンをロールアップすることをお勧めします。その核心は次のようになります。
$requestData = array_merge( $_GET, $_POST );
次に、これを何らかの方法でまとめることができます。たとえば、stripslashes()
を使用してマングルされた値に自動的に適用したりmagic_quotes
、欠落している変数のデフォルト値を提供したりするなど、追加の便利な機能を提供します。
両方の変数をマージする (または代わりにグローバルを使用$_REQUEST
する)と、その値のソースを明確に特定できないため、セキュリティ上の欠陥が発生する可能性があります。そのため、アクセスするときに$_REQUEST['foobar']
、値が URL、POST ボディ、または Cookie を介して送信されたかどうかを判断できません。これにより、スクリプトがクロスサイト リクエスト フォージェリに対して脆弱になる可能性があります。
そのため、快適さよりもセキュリティを優先し、値が得られると思われる変数を使用することをお勧めします。$_GET
URL で渡されることが予想される引数、$_POST
POST で渡される引数、および$_COOKIE
Cookie 用。
$_GET
と混同するのは悪い習慣だと思い$_POST
ます。それらは完全に異なるものを対象としており、それらを同等に扱うことで、HTTPプロトコルを効果的に誤用しています。述べたように、$_REQUEST
あなたが望むことをしますが、少し予測不可能です。同じことを行うために、独自のグローバル関数を簡単に作成できます。
function param($name, $default = null) {
return isset($_POST[$name])
? $_POST[$name]
: (isset($_GET[$name])
? $_GET[$name]
: $default);
}
しかし、本当に..それは悪い習慣です。
$_REQUEST グローバル変数を使用できます。これは、アプリケーションが Web sapi (CGI や Web サーバー モジュールなど) で実行されている場合にデフォルトで解釈される PHP によって定義されます。これは、PHP を使用して Web ベースのアプリケーションを作成している場合のアプリケーションの場合です。$_REQUEST は、$_GET および $_POST 内のすべてのデータの連想配列であり、デフォルトで定義されています。それを使用するために拡張機能/ライブラリは必要ありません。
これは、アプリ全体でグローバルを処理するフレームワークのクラスです。ここでは、変数の処理は行われません。
class stGlobal
{
//instance
private static $instance;
//global settings
public $post = '';
public $get = '';
public $files = '';
public $request = '';
private function initialize()
{
$this->post = $_POST;
$this->get = $_GET;
$this->files = $_FILES;
$this->request = $_REQUEST;
}
public function getInstance()
{
if (!isset(self::$instance))
{
$class = __CLASS__;
self::$instance = new $class();
self::$instance->initialize();
}
return self::$instance;
}
}
どこでも使えるように
$myObj = stGlobal::getInstance();