基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
当你的数据中有一些 \ ” ‘
这样的字符要写入到数据库里面,又想不被过滤掉的时候,它就很有用,会在这些字符前自动加上\,如
中国\地大物博”哈哈”
中国\\地大物博\”哈哈\”
可以使用set_maginc_quotes_runtime(0)关闭掉,当然你也可以直接在php.ini中设置。
get_magic_quotes_runtime() 取得 PHP 环境变量 magic_quotes_runtime 的值。
magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
两者不同
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 是对通过GET、POST、COOKIE传递的数据进行转义,一般在数据入库前要先进行转义,
magic_quotes_gpc不能在代码中动态开启或关闭,需要到php.ini将magic_quotes_gpc设置为on或off,
代码中可以用get_magic_quotes_gpc获取magic_quotes_gpc的状态。
当magic_quotes_gpc为off时,需要手工对数据进行addslashes,代码如下:
复制代码 代码如下:
if (!get_magic_quotes_gpc()) {
new_addslashes($_GET);
new_addslashes($_POST);
new_addslashes($_COOKIE);
}
function new_addslashes($string) {
if (is_array($string)) {
foreach ($string as $key => $value) {
$string[$key] = new_addslashes($value);
}
} else {
$string = addslashes($string);
}
return $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()之后输出
} else {
$data2 = addslashes($data2);
//把数据$data2写入数据库
//从数据库读出的数据直接输出
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++
经验总结:
一、对于GPC,不管系统有没有开启magic_quotes_gpc(即php.ini中magic_quotes_gpc = On),我们统一开启 magic_quotes_gpc,对get、post、cookie的内容进行转义。操作如下:
(摘自uchome系统)
复制代码 代码如下:
function saddslashes($string) {
if (is_array($string)) {
foreach ($string as $key => $val) {
$string[$key] = saddslashes($val);
}
} else {
$string = addslashes($string);
}
return $string;
}
//GPC过滤
$magic_quote = get_magic_quotes_gpc();
if(empty($magic_quote)) {
$_GET = saddslashes($_GET);
$_POST = saddslashes($_POST);
}
//COOKIE,给cookie值转义
$prelength = strlen($_SC['cookiepre']);
foreach ($_COOKIE as $key => $val) {
if(substr($key, 0, $prelength) == $_SC['cookiepre']) {
$_SCOOKIE[(substr($key, $prelength))] = empty($magic_quote) ? saddslashes($val) : $val;
}
}
二、对于magic_quotes_runtime,我们统一关闭它,即set_magic_quotes_runtime(0);不让从数据库读取出来的数据的单引号、双引号和反斜杠都自动被加上\。这样,对数据库的操作如下:添加数据到数据库之前,我们手动对数据进行addslashes(),而从数据库取出数据时,则作相反操作,即stripslashes()。
三、对于要序列化的内容,要保持裸数据,即要去掉转义,stripslashes(),然后在把序列化过的内容保存到数据库当中(注意,序列化过的内容是不带单引号(')、双引号(”)、反斜线(\)的),示例如下:
$feedarr['body_data'] = serialize(stripslashes($body_data));
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
出现Function set_magic_quotes_runtime() is deprecated 问题?
在安装PHPCMS出现Deprecated: Function set_magic_quotes_runtime() is deprecated 错误,查了一下网络及资料发现是PHP5.3和PHP6.0之后移除了set_magic_quotes_runtime()函数。
我可以使用如下方案替代:
view sourceprint?
@set_magic_quotes_runtime(0);
或
view sourceprint?
ini_set("magic_quotes_runtime", 0);
或
view sourceprint?
if (phpversion() set_magic_quotes_runtime(0);
}

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Photoshopでパスワードで保護されたPDFをエクスポート:画像ファイルを開きます。 [ファイル]&gtをクリックします。 「エクスポート」> 「PDFとしてのエクスポート」。 「セキュリティ」オプションを設定し、同じパスワードを2回入力します。 [エクスポート]をクリックして、PDFファイルを生成します。

H5。ミニプログラムとアプリの主な違いは次のとおりです。技術アーキテクチャ:H5はWebテクノロジーに基づいており、ミニプログラムとアプリは独立したアプリケーションです。経験と機能:H5は軽量で使いやすく、機能が限られています。ミニプログラムは軽量で、インタラクティブが良好です。アプリは強力で、スムーズな経験があります。互換性:H5はクロスプラットフォーム互換性があり、アプレットとアプリはプラットフォームによって制限されています。開発コスト:H5には、開発コストが低く、中程度のミニプログラム、最高のアプリがあります。適用可能なシナリオ:H5は情報表示に適しており、アプレットは軽量アプリケーションに適しており、アプリは複雑な機能に適しています。

Vueアプリケーションを開発するときに、ルーターフォルダーの下にindex.jsファイルにvuerouterを登録する必要性があるため、ルーティング構成で問題が発生することがよくあります。特別...

Centosとubuntuの重要な違いは次のとおりです。起源(CentosはRed Hat、for Enterprises、UbuntuはDebianに由来します。個人用のDebianに由来します)、パッケージ管理(CentosはYumを使用し、安定性に焦点を当てます。チュートリアルとドキュメント)、使用(Centosはサーバーに偏っています。Ubuntuはサーバーやデスクトップに適しています)、その他の違いにはインストールのシンプルさが含まれます(Centos is Thin)

JavaScriptのDOMノードの下でのXpath検索方法の詳細な説明、XPath式に基づいてDOMツリーから特定のノードを見つける必要があることがよくあります。あなたがする必要があるなら...

and:mysql:Alter table_name add column_name data_type; postgresql:column column_name data_typeを変更するcolumn column_name datape; oracle:alter table_name add(column_name data_type);

H5とMINIプログラムのプロモーション方法には違いがあります。プラットフォーム依存:H5はブラウザに依存し、MINIプログラムは特定のプラットフォーム(WeChatなど)に依存しています。ユーザーエクスペリエンス:H5エクスペリエンスは貧弱で、ミニプログラムはネイティブアプリケーションと同様のスムーズな体験を提供します。通信方法:H5はリンクを介して広がり、ミニプログラムはプラットフォームで共有または検索されます。 H5プロモーション方法:ソーシャル共有、電子メールマーケティング、QRコード、SEO、有料広告。ミニプログラムプロモーション方法:プラットフォームプロモーション、ソーシャル共有、オフラインプロモーション、ASO、他のプラットフォームとの協力。

LaravelとThinkPhpはどちらも人気のあるPHPフレームワークであり、開発における独自の利点と短所を持っています。この記事では、2つの深さを比較し、アーキテクチャ、機能、パフォーマンスの違いを強調して、開発者が特定のプロジェクトのニーズに基づいて情報に基づいた選択を行うのに役立ちます。
