在帝国CMS后台总览页面中的“服务器信息”一栏中,有一个“魔术引用”状态,如下图所示:
1.开启方法
在php系统配置文件php.ini中找到magic_quotes_gpc变量,将其值设置为on即可。
网上有很多人反映找不到php.ini文件。此文件属于php的系统配置文件,它在php系统的安装目录中,而不是在帝国CMS的安装目录中,默认下是在…phpphp5文件夹中。如果你的网站系统是自己搭建的,可以直接更改这个文件。如果你使用的是其它供应商提供的虚拟主机,一般说来没有这个文件的读写权力,此变量的值是不可更改的。从下面的介绍中你可以看出此变量是php为了方便程序的编写和数据的输入而设置的一个变量,它对网站的使用和安全性并没有太大影响。
2.魔术引用简介
在php.ini文件中对magic_quotes_gpc的官方解释是: “Input data is no longer escaped with slashes so that it can be sent into SQL databases without further manipulation. Instead, you should use the function addslashes() on each input element you wish to send to a database.”也就是当开启魔术引用时,会对进入服务器的get/post/cookie数据做自动转换。
2.1 addslashes函数
为了更深刻地了解魔术引用,先介绍php的addslashes函数。
该函数返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线()与 NUL(NULL 字符)。
一个使用 addslashes() 的例子是当你要往数据库中输入数据时。例如,将名字 O'reilly 插入到数据库中,这就需要对其进行转义。大多数据库使用 作为转义符:O'reilly。这样可以将数据放入数据库中,而不会插入额外的 。当 PHP 指令 magic_quotes_sybase 被设置成 on 时,意味着插入 O'reilly字符串时,无需使用对’进行转义,php将自动为你进行转义。
默认情况下,PHP 指令 magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数get_magic_quotes_gpc() 进行检测。
例如,如下语句:
<?php
$str = "Is your name O'reilly?";
echo addslashes($str);
?>
将在网页上显示字符串Is your name O'reilly?
2.2 魔术引用magic_quotes_gpc
当开启了魔术引用时,也就相当于系统自带对你存入数据库的字符串执行addslashes()操作。例如,当向数据库加入I'm Androidyue时,它会自动将字符串转变为I'mandroidyue。当然了,如果我们在php文件利用诸如$name=$_REQUEST['name'];这种语句来获取字符串时,执行输出得到的结果也会是I'm androidyue。这当然不是我们想要的结果,如果想去掉反斜杠,可以使用stripslashes()函数,此函数和addslashes()函数执行相反的操作。如$name=stripslashes($name);这样我们再执行输出时得到的会是正常的字符串I'm androidyue。