ホームページ >バックエンド開発 >PHPチュートリアル >PHP_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 (入力と同じ)
命令: 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 ステートメントを正常に実行できるようになります
が、データベースにはデータとして入力されません。データベースは、私たちが想像していた雪ではなく、雪を保存します。
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 は、データベースに書き込もうとしている一重引用符を ' に変換します。後者の変換は、
データベースにデータとして書き込まれます。データベースは雪を保存します。''''sun
は次のように要約されます:
1. magic_quotes_gpc=on の場合、
入力および出力データベースの文字列データに対して
addslashes() およびtripslashes() 操作を実行できません。となり、データは正常に表示されます。
この時点で入力データに対してaddslashes()を実行する場合、
出力時にstripslashes()を使用して余分なバックスラッシュを削除する必要があります。
2. magic_quotes_gpc=off の場合
入力データを処理するために addslashes() を使用する必要がありますが、addslashes() はバックスラッシュをまとめてファイルに書き込まないため、出力をフォーマットするためにstripslashes() を使用する必要はありません
データベースでは、これは 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 が用意されています。 ini が ON に設定されている場合、引用符で囲むデータには一重引用符 ' と二重引用符 ' が含まれ、記号を自動的に変換してデータ操作が正しく行われるようにするためにバックスラッシュが自動的に追加されますが、異なるバージョンの PHP またはサーバー構成が異なるため、magic_quotes_gpc と magic_quotes_runtime の一部はオンに設定され、一部はオフに設定されるため、作成するプログラムはオンとオフの両方の状況に準拠する必要があります。それでは、magic_quotes_gpc と magic_quotes_runtime の 2 つの関数の違いは何でしょうか?以下の説明を参照してください:
magic_quotes_gpc
範囲: WEB クライアント サーバー;
アクションの時間: リクエストは、たとえばスクリプトの実行時に開始されます。
magic_quotes_runtime
スコープ: ファイルから読み取られたデータ、exec() の実行結果、または SQL クエリから取得されたデータ。
アクション時間: スクリプトが実行状態で生成されたデータにアクセスするたび。
したがって、
magic_quotes_gpc の設定値は、Get/Post/Cookies を通じて取得されるデータに影響します
magic_quotes_runtime の設定値は、ファイルから読み取られるデータ、またはデータベースクエリから取得されるデータに影響します
例:
コンテンツをクリップボードにコピーする
コード:
<フォームアクション=""メソッド="ポスト"> STR:<入力タイプ="テキスト" 名前="str">
<フォーム
/* フォームに入力します: " " これらの記号は、magic_quotes_gpc がオンになっていない場合、バックスラッシュでエスケープされません*/
echo 現在 POST で渡される値は次のとおりです: ,$_POST[ str],
;
if(get_magic_quotes_gpc()) { // magic_quotes_gpc がオンになっているかどうかを確認し、オンになっていない場合は、addslashes を使用してエスケープします
$str = $_POST[str]
} else {
$str = addedlashes($_POST[str]);
}
echo エスケープされたバージョンは次のとおりです: ,$str,
get_magic_quotes_gpc():
magic_quotes_gpc 値を表示します。0=off.1=on.
get_magic_quotes_runtime():
magic_quotes_runtime 値を表示します。 0=オフ、1=オン。
set_magic_quotes_gpc() 関数がないことに注意してください。つまり、magic_quotes_gpc の値をプログラムで設定することはできません。
http://www.bkjia.com/PHPjc/478754.html
www.bkjia.com