ホームページ >バックエンド開発 >PHPチュートリアル >magic_quotes_gpc と magic_quotes_runtime_PHP チュートリアルに基づく違いと使い方の紹介

magic_quotes_gpc と magic_quotes_runtime_PHP チュートリアルに基づく違いと使い方の紹介

WBOY
WBOYオリジナル
2016-07-21 15:11:45841ブラウズ

データベースに書き込みたいデータに「 」などの文字が含まれているが、除外したくない場合に非常に便利です。
などの文字がこれらの文字の前に自動的に追加されます。中国の広大な土地と豊富な資源"笑"
China\地大物博"笑"
は、set_maginc_quotes_runtime(0)を使用してオフにすることができます。もちろん、php.iniで直接設定することもできます
get_magic_quotes_runtime()は、PHPの値を取得します。環境変数 magic_quotes_runtime

magic_quotes_gpc がオンになっていると、主にすべての GET、POST、COOKIE データに対してaddlashes() が自動的に実行されます。これは二重レベルのエスケープを引き起こすため、magic_quotes_gpc によってエスケープされた文字列に対しては使用しないでください。この状況に遭遇した場合は、 get_magic_quotes_gpc() 関数を使用して

この 2 つは異なります

set_magic_quotes_runtime() を使用すると、プログラマーはコード内で magic_quotes_runtime を動的にオンまたはオフにすることができます。

set_magic_quotes_runtime(1) はオンにすることを意味し、set_magic_quotes_runtime(0) はオフにすることを意味します。 set_magic_quotes_runtime(1) が使用されると、データベースから、または fread などの関数を通じて読み取られたテキストは、オーバーフローを防ぐために ' " とバックスラッシュを自動的にエスケープします。これは、データベースからデータを転送するときに非常に便利です。ただし、一般的には、これを有効にする必要があります。オフにすると、データベースから読み取られたデータに一重引用符、二重引用符、バックスラッシュが追加され、Discuz や PHPWind などのパブリック ファイルで異常な表示が発生します。 set_magic_quotes_runtime(0) をヘッダーに追加して、magic_quotes_runtime を強制的に閉じます。
magic_quotes_gpc

アクションの範囲: WEB クライアント サーバー;

アクションの時間: たとえば、スクリプトの実行時にリクエストが開始されます。


magic_quotes_runtime

アクションの範囲: ファイルから読み取られたデータ、exec() の実行結果、または SQL クエリから取得されたデータ。

アクションの時間: スクリプトが実行状態で生成されたデータにアクセスするたび。


それで

magic_quotes_gpc の設定値は、Get/Post/Cookies を通じて取得されるデータに影響します。

magic_quotes_runtime の設定値は、ファイルから読み取られるデータ、または

magic_quotes_gpc が渡すデータに影響します。通常、データをデータベースに保存する前にエスケープする必要があります。
magic_quotes_gpc をコード内で動的にオンまたはオフにするには、php.ini に移動する必要があります。
コード内で get_magic_quotes_gpc を使用して、magic_quotes_gpc のステータスを取得できます。
magic_quotes_gpc がオフの場合、データを手動で追加する必要があります。コードは次のとおりです。


コードをコピーします。 コードは次のとおりです。 if (!get_magic_quotes_gpc()) { new_addslashes($) _GET);
new _addslashes($_COOKIE);

function new_addslashes($string) {
if (is_array($string)) {
foreach ($string as $key => $value) {
$string[ $key] = new_addslashes($value); $string



コードをコピー

コードは次のとおりです。


$data1 = $_POST['aaa']
$data2 = implode(file('1.txt'));

if (get_magic_quotes_gpc()) {
//データ $data1 を直接データベースに書き込みます
} else {
$data1 =addslashes($data1);
//データ $data1 をデータベースに書き込みます
} if (get_magic_quotes_runtime()){ //データ $data2 をデータベースに直接書き込みます //データベースから読み取ったデータは、stripslashes() の後に 1 回出力する必要があります
} else {
$data2 =addlashes($data2);
// データ $data2 をデータベースに書き込みます
// データベースから読み取られたデータは直接出力されます
}

++++++++++++++++++++++++++++++++++++++++++++++ ++

経験の概要:

1. GPC の場合、システムで magic_quotes_gpc がオンになっているかどうか (つまり、php.ini で magic_quotes_gpc = On) に関係なく、get、post、cookie の内容をエスケープするために、一律に magic_quotes_gpc をオンにします。 。動作は以下の通りです。
(uchomeシステムより抜粋)

コードをコピー コードは以下の通りです:

function sawdslashes($string) {
if (is_array($string)) {
foreach ($string as $key => ; $val) {

$magic_quote = get_magic_quotes_gpc();
if(empty($magic_quote)) {
$_GET = saddslashes($_GET);
$_POST = sawdslashes($_POST);
}

//COOKIE 、意味
$prelength = strlen($_SC['cookiepre'])
foreach ($_COOKIE as $key => $val) {
if(substr($key, 0, $prelength) == $_SC[' cookiepre']) {
$_SCOOKIE[(substr($key, $prelength))] = empty($magic_quote) ? maddslashes($val) : $val; オフにします。つまり、set_magic_quotes_runtime(0) は、データベースから読み取られたデータに一重引用符、二重引用符、バックスラッシュを自動的に追加できません。このように、データベースに対する操作は次のようになります。データベースにデータを追加する前に、データに対して手動で addslashes() を実行し、データベースからデータをフェッチするときに、逆の操作、つまり、stripslashes() を実行します。 。

3. コンテンツをシリアル化するには、裸のデータを保持し、エスケープ、stripslashes() を削除してから、シリアル化されたコンテンツをデータベースに保存します (シリアル化されたコンテンツには単一の引用符 (' )、二重引用符 (")、バックスラッシュ ())、例は次のとおりです:
$feedarr['body_data'] = Serialize(stripslashes($body_data));

++++++++++++++++++++++++++++++++++++++++++++++ ++++++

関数 set_magic_quotes_runtime() が非推奨であるという問題が発生しますか?

非推奨: PHPCMS のインストール時に set_magic_quotes_runtime() 関数が非推奨であるというエラーが発生しました。ネットワークと情報を確認したところ、set_magic_quotes_runtime() 関数は PHP5.3 および PHP6.0 以降に削除されたことがわかりました。
次の代替手段を使用できます:
ソースプリントを表示しますか?
@set_magic_quotes_runtime(0);
または

sourceprint を表示? ini_set("magic_quotes_runtime", 0);

または

sourceprint を表示しますか?
if (phpversion() set_magic_quotes_runtime(0)
}

;

http://www.bkjia.com/PHPjc/326823.html


www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/326823.html

技術記事

データベースに書き込むデータに「 」のような文字が含まれていて、それらを除外したくない場合に非常に便利です。中国語などの文字の前に自動的に追加されます...

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