magic_quotes_gpc与magic_quotes_runtime的异同点

原创
2016/10/13 17:54
阅读数 189

相同:

在PHP中,当magic_quotes_gpc和magic_quotes_runtime设置为on时,数据遇到单引号(')和双引号("")以及反斜线(\)、null时,会自动加上反斜线进行自动转义。所以,这两个数据魔法引用函数的作用体现在,当你的数据中存在单引号、双引号、反斜线这些字符,并且要写入数据库里面,同时又不想被过滤掉的时候,开启这两个函数进行自动转义,可以防止溢出。

这在对数据库的数据进行转移的时候非常有用。

注: 默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

区别:

1、作用范围

magic_quotes_gpc:WEB客户服务端;

magic_quotes_runtime:从文件中读取的数据或执行exec()或从SQL查询中得到的数据;

2、作用时间

magic_quotes_gpc:请求开始的时候,例如当脚本运行时;

magic_quotes_runtime:每次当脚本访问运行状态中产生的数据时;

3、其他

尝试在运行时设置magic_quotes_gpc将不会生效,可以通过get_magic_quotes_gpc获取当前配置选项的设置值(返回0|1);

magic_quotes_runtime则可以通过set_magic_quotes_runtime进行设置更改值,格式如下:

bool set_magic_quotes_runtime(bool $new_setting)

由以上几点不同可以总结出:

magic_quotes_gpc不可在运行时设置配置状态,其设定值将会影响$_GET\$_POST\$_COOKIE获得的数据;

magic_quotes_runtime可以使用set_magic_quotes_runtime在代码中动态开启或关闭,其设定值将会影响从文件中读取的数据或从数据库查询中获取的数据;

后记:

一般情况下应该将这两个魔术数据函数关闭,否则从数据库中读取出来的单引号、双引号、”\“都会被自动加上“\“,导致显示不正常;

当magic_quotes_gpc为off时,需要手工对需要转义的数据进行addslashes转义,取出时使用stripslashes进行反引用;

magic_quotes_gpc自PHP 5.4.0起已经移除,所以get_magic_quotes_gpc函数始终返回false,而set_magic_quotes_runtime自5.3.0起已经废弃,官方文档强烈建议不要使用;如果你的PHP版本可能会在低于5.3.0版本中运行,可以进行如下设置:

if(version_compare(PHP_VERSION,'5.4.0','<')){
  ini_set('magic_quotes_runtime',0);
  define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc() ? true : false);  // 注意,这里不是设置magic_quotes_gpc的值,而是将其状态值赋给一个常量,用于后续代码判断
}else{
  define('MAGIC_QUOTES_GPC',false);  // 注意,这里不是设置magic_quotes_gpc的值,而是将其状态值赋给一个常量,用于后续代码判断
}

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部