当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP魔法函数应用详解

PHP
利用discuz实现PHP大文件上传应用实例代码
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
php在字符串中查找另一个字符串
php下HTTP Response中的Chunked编码实现方法
PHP实现定时生成HTML网站首页实例代码
PHP下一个非常全面获取图象信息的函数
PHP strtr() 函数使用说明
php 删除无限级目录与文件代码共享
php AJAX实例根据邮编自动完成地址信息
php miniBB中文乱码问题解决方法
cmd下运行php脚本
PHP 遍历XP文件夹下所有文件
php 移除数组重复元素的一点说明
discuz论坛 用户登录 后台程序代码
Optimizer与Debugger兼容性问题的解决方法
Zend Studio 无法启动的问题解决方法
php 页面执行时间计算代码
php smarty的预保留变量总结
php获取网页内容方法总结
php读取msn上的用户信息类

PHP魔法函数应用详解


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 258 ::
收藏到网摘: n/a

PHP提供两个方便我们引用数据的魔法引用函数magic_quotes_gpc和magic_quotes_runtime,这两个函数如果在 php.ini设置为ON的时候,就会为我们引用的数据碰到单引号'和双引号"以及反斜线 \ 是自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行,可是我们在php不同的版本或者不同的服务器配置下,有的 magic_quotes_gpc和magic_quotes_runtime设置为on,有的又是off,所以我们写的程序必须符合on和off两种情况。那么magic_quotes_gpc和magic_quotes_runtime两个函数有什么区别呢?看下面的说明:

magic_quotes_gpc

作用范围是:WEB客户服务端;
作用时间:请求开始是,例如当脚本运行时.

magic_quotes_runtime

作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;
作用时间:每次当脚本访问运行状态中产生的数据.

所以 magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据;magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据。

例子说明:

<form action="" method="post" >
STR:<input type="text" name="str">
<input type="submit">
</form>
<?php
/* 我们在表单里填写:    '"\    这些符号,如果magic_quotes_gpc没有开启,那么他们不会被反斜杠转义 */
echo '现在通过POST传递过来的值是:' ,$_POST['str'], '<br />';

if (get_magic_quotes_gpc()) {      // 检查magic_quotes_gpc是否打开,如果没有打开,用addslashes进行转义
      $str = $_POST['str'];
} else {
      $str = addslashes($_POST['str']);
}

echo '这里是转义过后的:' ,$str, '<hr />';
$sql = "INSERT INTO lastnames (lastname) VALUES ('$str')";

//=====================================================================================
//-----magic_quotes_gpc只会转义:     通过Get/Post/Cookies获得的数据
//-----magic_quotes_runtime会转义:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的
//=====================================================================================
$data = implode(file('try.php'));      // 我们在里面依然写'"\这几个字符,用来测试
echo '这里是try.php的数据,';
if (get_magic_quotes_runtime()) {
      $data = $data;
      echo '被系统自带转义的' .$data;
} else {
      echo '被addslashes转义了的' .$data = addslashes($data);
}

$sql = "INSERT INTO lastnames (lastname) VALUES ('$data')";
echo '<br />SQL语句为:<br />' ,$sql;
//---入库都转义了,但是多余了反斜杠,我们要读出来是原来的数据时候使用stripslashes()去掉反斜杠
//---stripslashes()和addslashes()作用相反
?>最关键的区别是就是上面提到的2点:他们针对的处理对象不同magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据在这里顺便在提几个想关联的函数:set_magic_quotes_runtime():设置magic_quotes_runtime值. 0=关闭.1=打开.默认状态是关闭的.可以通过 echo phpinfo(); 查看magic_quotes_runtimeget_magic_quotes_gpc():查看magic_quotes_gpc值.0=关闭.1=打开.get_magic_quotes_runtime():查看magic_quotes_runtime值。0=关闭.1=打开.注意的是没有 set_magic_quotes_gpc()这个函数,就是不能在程序里面设置magic_quotes_gpc的值。