ホームページ  >  記事  >  バックエンド開発  >  PHPにおけるmagic_quotes_gpcとmagic_quotes_runtimeの違い、機能、使用法

PHPにおけるmagic_quotes_gpcとmagic_quotes_runtimeの違い、機能、使用法

WBOY
WBOYオリジナル
2016-06-13 13:18:16815ブラウズ

PHP
におけるmagic_quotes_gpcとmagic_quotes_runtimeの違い、機能、使用法 マジック クオートは、$_GET、$_POST、$_COOKIE が渡されたときに有効になります。
1.
条件: magic_quotes_gpc=off
データベースに書き込まれる文字列は、いかなる方法でもフィルタリングされていません。データベースから読み取られた文字列は一切処理されません。
データ: ?$data="snow"''sun"; (snow と sun の間には 4 つの連続した単一引用符があります)。
操作: 文字列を書き込みます: "snow"''sun" データベース、
結果: SQL ステートメント エラーが発生し、mysql は SQL ステートメントを正常に完了できず、データベースへの書き込みに失敗しました。
データベース保存形式: データなし。
出力データ形式: データなし。
注: 未処理の一重引用符は、データベースに書き込まれるときに SQL ステートメントでエラーを引き起こします。
2.
条件: magic_quotes_gpc=off
データベースに書き込まれた文字列は、関数 addlashes() によって処理されます。データベースから読み取られた文字列は一切処理されません。
データ: ?$data="snow"''sun"; (snow と sun の間には 4 つの連続した単一引用符があります)。
操作: 文字列を書き込みます: "snow"''sun" データベース、
結果: SQL ステートメントが正常に実行され、データがデータベースに正常に書き込まれました。
データベース保存形式: Snow"''sun (入力と同じ)
出力データ形式: Snow"''sun (同じinput) )
説明: addslashes() 関数は、SQL ステートメントが正常に実行できるように単一引用符をエスケープ文字に変換します。
ただし、データベースはデータとして保存されません。 「太陽」と「それは雪ではありません」私たちが想像していた太陽
3.
条件: magic_quotes_gpc=on
データベースに書き込まれた文字列はいかなる方法でも処理されません 🎜>データ: ?$data。 =”snow””sun”; (snow と sun の間には 4 つの連続した単一引用符があります)。
操作: 文字列:”snow”''sun” をデータベースに書き込みます。
結果: SQL ステートメントは正常に実行され、データはデータベースに正常に書き込まれました。
データベース保存形式: Snow"'sun (入力と同じ)
出力データ形式: Snow"'sun (入力と同じ)
説明: magic_quotes_gpc=on は、SQL ステートメントが正常に実行できるように単一引用符をエスケープ文字に変換します。
ただし、データベースには、私たちが想像したものではなく、snow"''sun が保存されます。 ''''太陽。
4.
条件: magic_quotes_gpc=on
データベースに書き込まれた文字列は、関数 addlashes() によって処理されます。データベースから読み取られた文字列は一切処理されません。
データ: ?$data="snow"''sun"; (snow と sun の間には 4 つの連続した単一引用符があります)。
操作: 文字列を書き込みます: "snow"''sun" データベース、
結果: SQL ステートメントが正常に実行され、データがデータベースに正常に書き込まれました。
データベースの保存形式: Snow''''sun (エスケープ文字を追加)
出力データ形式: Snow''''sun (エスケープ文字が追加されました)
説明: magic_quotes_gpc=on は、SQL ステートメントが正常に実行できるように、一重引用符を 'エスケープ文字に変換します。
addslashes は、データベースに書き込もうとしている一重引用符を ' に変換します。
データベースにデータとして書き込まれ、データベースは Snow''''sun
を保存します。 概要は次のとおりです。
1. magic_quotes_gpc=on の場合、
は入力できません。文字列データに対して
addslashes() およびtripslashes() 操作を実行すると、データは正常に表示されます。
この時点で入力データに対してaddslashes()を実行する場合、
出力時に余分なバックスラッシュを削除するにはstripslashes()を使用する必要があります。
2. magic_quotes_gpc=off
の場合、addslashes() を使用して入力データを処理する必要がありますが、addslashes() は出力
をフォーマットするために使用する必要はありません。バックスラッシュをまとめてください。 データベースへの書き込みは、mysql が SQL ステートメントの実行を完了するのに役立つだけです。
補足:
magic_quotes_gpc のスコープは次のとおりです: WEB クライアント サーバー; アクション時間: スクリプトの実行時など、リクエストの開始時。
magic_quotes_runtime スコープ: ファイルから読み取られたデータ、exec() の実行結果、または SQL クエリから取得されたデータ; アクション時間: 実行状態で生成されたデータにスクリプトがアクセスするたび
=== === ====== magic_quotes_gpc と magic_quotes_runtime の違いと使い方 =============
PHP には、データを引用するのに便利な 2 つのマジック参照関数 magic_quotes_gpc と magic_quotes_runtime が用意されています。この関数が php.ini で ON に設定されていると、一重引用符 ' と二重引用符 ' およびバックスラッシュが出現したときに、引用符で囲んだデータにバックスラッシュが自動的に追加され、シンボルが自動的に変換され、異なるバージョンでもデータ操作が正しく実行されるようになります。 PHP または別のサーバー構成では、いくつかの magic_quotes_gpc と magic_quotes_runtime がオンに設定され、いくつかはオフに設定されるため、作成するプログラムは両方の条件に準拠する必要があります。 次に、magic_quotes_gpc と magic_quotes_runtime の 2 つの関数の違いは何ですか?以下の説明:
magic_quotes_gpc
スコープ: WEB クライアント サーバー;
アクション時間: リクエストは、たとえばスクリプトの実行時に開始されます。アクションの範囲: ファイルから読み取られたデータ、exec() の実行結果、または SQL クエリから取得されたデータ。
アクションの時間: スクリプトが実行状態で生成されたデータにアクセスするたび。
つまり
magic_quotes_gpc の設定値は、Get/Post/Cookies を通じて取得されるデータに影響します
magic_quotes_runtime の設定値は、ファイルから読み取られるデータまたはデータベース クエリから取得されるデータに影響します
例:
コンテンツをクリップボードにコピー
コード:


STR: ;


/* これらの記号は、magic_quotes_gpc が有効でない場合に入力します。の場合、バックスラッシュはエスケープされません*/
echo POST で渡される値は次のとおりです: ,$_POST[str],
;

if( get_magic_quotes_gpc()) { / / magic_quotes_gpc がオンになっているかどうかを確認します。オンになっていない場合は、addslashes を使用してエスケープします。
$str = addlashes($_POST[str]); 🎜>}

echo エスケープされたバージョンは次のとおりです: ,$str,
;
$sql = "INSERT INTO lastnames (lastname) VALUES ($str )";
//========================================== === ===========================================
/ /-- ---magic_quotes_gpc はエスケープのみを行います: Get/Post/Cookies を通じて取得されたデータ
//-----magic_quotes_runtime はエスケープします: ファイルから読み取られたデータまたは exec() の実行結果、または SQL クエリから取得されたデータ
//======================================== ======= =========================================
$data = implode(file (try.php)); // テストのために文字 "" を書き込みます。
echo これは try.php のデータです。
if (get_magic_quotes_runtime( )) {
$data = $data;
エコーは system.$data;
によってエスケープされます。
エコーは addslashes.$data = addlashes($ data) によってエスケープされます。

$sql = "INSERT INTO lastnames (lastname) VALUES ($data)";
echo
SQL ステートメントは次のとおりです:
入力はエスケープされていますが、余分なバックスラッシュがあります。元のデータを読み取りたい場合は、stripslashes() を使用してバックスラッシュを削除します
//-- -stripslashes() とaddslashes() は逆の効果があります
? >

最も重要な違いは、上記の 2 点です。対象となる処理オブジェクトが異なります
magic_quotes_gpc の設定値は、Get/Post/Cookies を通じて取得されたデータに影響します
設定値magic_quotes_runtime の値は、ファイルから読み取ったデータ、またはデータベース クエリから取得したデータに影響します
ちなみに、関連付ける関数をいくつか示します:
set_magic_quotes_runtime():
magic_quotes_runtime を設定する値は 0=off、1=on。magic_quotes_runtime は echo phpinfo(); で確認できます。0=off.1=on。 >get_magic_quotes_runtime():
magic_quotes_runtime 値を表示します。 0=オフ、1=オン。
set_magic_quotes_gpc() 関数がないことに注意してください。つまり、magic_quotes_gpc の値をプログラムで設定することはできません。

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