PHP には、データを引用するのに便利な 2 つのマジック参照関数 magic_quotes_gpc と magic_quotes_runtime が用意されています。これらの 2 つの関数が php.ini で ON に設定されている場合、引用するデータには単一引用符 ' と二重引用符 ' が表示されます。これらは、シンボルを自動的に変換し、データ操作の正しい動作を保証するために自動的に追加されます。ただし、PHP のバージョンやサーバー構成が異なると、一部の magic_quotes_gpc と magic_quotes_runtime がオンに設定されます。作成するプログラムは、on と off の両方の条件に準拠する必要があります。では、magic_quotes_gpc と magic_quotes_runtime の違いは何でしょうか。次の説明を参照してください。
magic_quotes_gpc スコープは次のとおりです: WEB顧客サーバー。リクエストは、たとえば、スクリプトの実行時に開始されます。
magic_quotes_runtime
スコープ: ファイルから読み取られたデータ、または exec() の実行結果、または SQL クエリから取得されたデータ。実行状態で生成されたデータにアクセスします
したがって、magic_quotes_gpc の設定値は、Get/Post/Cookies を通じて取得されたデータに影響します。magic_quotes_runtime の設定値は、ファイルから読み取られたデータまたはデータベース クエリから取得されたデータに影響します。例:
<form action="" method="post" >STR:<input type="text" name="str"><input type="submit"></form><?php/* 我们在表单里填写: '" 这些符号,如果magic_quotes_gpc没有开启,那么他们不会被反斜杠转义 */echo '现在通过POST传递过来的值是:' ,$_POST['str'], '<br />';if (get_magic_quotes_gpc()) { // 检查magic_quotes_gpc是否打开,如果没有打开,用addslashes进行转义 $str = $_POST['str'];} else { $str = addslashes($_POST['str']);}echo '这里是转义过后的:' ,$str, '<hr />';$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; echo '被系统自带转义的' .$data;} else { echo '被addslashes转义了的' .$data = addslashes($data);}$sql = "INSERT INTO lastnames (lastname) VALUES ('$data')";echo '<br />SQL语句为:<br />' ,$sql;//---入库都转义了,但是多余了反斜杠,我们要读出来是原来的数据时候使用stripslashes()去掉反斜杠//---stripslashes()和addslashes()作用相反?>
最も重要な違いは、上記の2点です: 異なる処理オブジェクトを対象としています | magic_quotes_gpcの設定値は、Get/Post/Cookiesを通じて取得されたデータに影響します
set_magic_quotes_runtime():
magic_quotes_runtime 値を設定します。 0=off.1=on。デフォルトの状態は off です。echo phpinfo();
get_magic_quotes_gpc():
magic_quotes_gpc の値を表示します。0=off.1=on .
get_magic_quotes_runtime():
set_magic_quotes_gpc() 関数がないことに注意してください。つまり、magic_quotes_gpc の値はプログラム内で設定できません。