ホームページ  >  記事  >  バックエンド開発  >  magic_quotes_gpc が動的に閉じられるのはなぜ無効ですか?

magic_quotes_gpc が動的に閉じられるのはなぜ無効ですか?

小云云
小云云オリジナル
2018-02-24 14:41:191408ブラウズ

この記事では主に、PHP での magic_quotes_gpc の無効な動的クローズの問題について説明します。この種の問題の解決に役立つことを願っています。

昨日オンライン プロジェクトを閲覧していると、問題を発見しました。一部のテキスト出力では、引用符の前に余分なバックスラッシュがあります。たとえば、次のとおりです。

引用符内の「バックスラッシュ」が多すぎます

に表示された結果から判断すると、ページでは、PHP の magic_quotes_gpc 設定がオンになっているためだと思われます。次に、プログラムを確認したところ、エントリ ファイルで次の設定が動的に閉じられていることがわかりました。

ini_set('magic_quotes_gpc', 'Off'); なぜ有効にならなかったのですか?

いくつか検索した結果、同僚が理由を見つけるのを手伝ってくれました。この構成を動的に変更する前にリクエストが解析されていたため、現在のリクエストには変更が反映されなかったことがわかりました。

詳細については、次の Web ページを参照してください。同僚も同じ問題に遭遇しました。

https://bugs.php.net/bug.php?id=32867

magic_quotes_gpc は、PHP スクリプトが取得される前のリクエストの解析中に適用されます。コントロールなので、スクリプトでこの設定を変更できますが、何の効果もありません。

サーバー上に複数のプロジェクトがあることを考えると、他のプロジェクトに影響を与えないように、php.ini の設定を直接変更することはできません。 、そのため、Molu vs. Recall によって書かれたコードを採用し、gpc コンテンツを再帰的に処理します:

if (ini_get('magic_quotes_gpc')) {
function stripslashesRecursive(array $array)
{
foreach ($array as $k => $v) {
if (is_string($v)) {
$array[$k] = stripslashes($v);
} else if (is_array($v)) {
$array[$k] = stripslashesRecursive($v);
}
}
return $array;
}
$_GET = stripslashesRecursive($_GET);
$_POST = stripslashesRecursive($_POST);
}

関連する推奨事項:

php get_magic_quotes_gpc() 関数の使用方法

PHP の自動エスケープの問題、magic_quotes_gpc によって残された歴史的問題について設定

PHPのget_magic_quotes_gpc関数の使い方の紹介

以上がmagic_quotes_gpc が動的に閉じられるのはなぜ無効ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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