PHP函数补完:get_magic_quotes_gpc()

判断PHP有没有自动调用addslashes
服务器君一共花费了260.547 ms进行了7次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

get_magic_quotes_gpc

取得 PHP 环境变数 magic_quotes_gpc 的值,属于 PHP 系统功能。

语法: long get_magic_quotes_gpc(void);

返回值: 长整数

这个函数做什么的?

本函数取得 PHP 环境配置的变量 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。返回 0 表示关闭本功能;返回 1 表示本功能打开。当 magic_quotes_gpc 打开时,所有的 ' (单引号), " (双引号), (反斜线) and 空字符会自动转为含有反斜线的溢出字符。

在php的配置文件中,有个布尔值的设置,就是magic_quotes_runtime。当它打开时,php的大部分函数自动的给从外部引入的(包括数据库或者文件)数据中的溢出字符加上反斜线。 当然如果重复给溢出字符加反斜线,那么字符串中就会有多个反斜线,所以这时就要用set_magic_quotes_runtime()与get_magic_quotes_runtime()设置和检测php.ini文件中magic_quotes_runtime状态。

为了使自己的程序不管服务器是什么设置都能正常执行。可以在程序开始用get_magic_quotes_runtime检测该设置的状态决定是否要手工处理,或者在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉该设置。

magic_quotes_gpc设置是否自动为GPC(get,post,cookie)传来的数据中的'"\加上反斜线。可以用get_magic_quotes_gpc()检测系统设置。如果没有打开这项设置,可以使用addslashes()函数添加,它的功能就是给数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。

一般用法如下:

if(!get_magic_quotes_gpc())
{
    addslashes($prot);
}

在手册中string addslashes ( string str )介绍的时候有这样一句话说明了get_magic_quotes_gpc的用法以及作用。默认情况下,PHP 指令 magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

其实这个函数就是判断PHP有没有自动调用addslashes 这个函数:

最土团购系统里的magic_gpc

<?php
	define('SYS_MAGICGPC', get_magic_quotes_gpc());
	
	$_POST = magic_gpc($_POST);
	
	function magic_gpc($string) {
		if(SYS_MAGICGPC) {
			if(is_array($string)) {
				foreach($string as $key => $val) {
					$string[$key] = magic_gpc($val);
				}
			} else {
				$string = stripslashes($string);
			}
		}
		return $string;
	}
	
	echo 'get_magic_quotes_gpc的值: '.get_magic_quotes_gpc();
	echo '<br />';
	echo '直接输出POST变量: '.$_POST['nowamagic'];
	echo '<br />';
	echo '经过magic_gpc处理: '.magic_gpc($_POST['nowamagic']);
?>

<html>
    <body>
          <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
               <input type="text" name="nowamagic" value="no'wamagic.net">
               <input type="submit" value="提交">
          </form>
    </body>    
    
</html>

程序输出:

get_magic_quotes_gpc的值: 1
直接输出POST变量: no'wamagic.net
经过magic_gpc处理: no'wamagic.net

再来个例子:

<?php

	echo 'get_magic_quotes_gpc: '.get_magic_quotes_gpc();
	echo '<br />';
	echo '直接输出POST变量: '.$_POST['nowamagic'];
	echo '<br />';
	echo 'addslashes: '.addslashes($_POST['nowamagic']);
	
	if (!get_magic_quotes_gpc()) {
		$nowamagic = addslashes($_POST['nowamagic']);
	} 
	else {
		$nowamagic = $_POST['nowamagic'];
	}
	
	echo '<br />';
	echo '处理后输出: '.$nowamagic; 
?>

<html>
    <body>
          <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
               <input type="text" name="nowamagic" value="no'wamagic.net">
               <input type="submit" value="提交">
          </form>
    </body>    
    
</html>

程序输出:

get_magic_quotes_gpc: 1
直接输出POST变量: no'wa\magic.net
addslashes: no\'wa\\magic.net
处理后输出: no'wa\magic.net

延伸阅读

此文章所在专题列表如下:

  1. PHP函数补完:get_magic_quotes_gpc()
  2. PHP函数补完:error_reporting()
  3. PHP函数补完:preg_match()
  4. PHP函数补完:urlencode()
  5. PHP函数补完:array_multisort()
  6. PHP函数补完:array_splice()
  7. PHP函数补完:isset()
  8. PHP函数补完:getenv()
  9. PHP函数补完:header()
  10. PHP函数补完:mysql_num_rows()
  11. PHP函数补完:list()
  12. PHP函数补完:mysql_query()
  13. PHP函数补完:mysql_fetch_array()
  14. PHP函数补完:number_format()
  15. PHP函数补完:explode()
  16. PHP函数补完:call_user_func()
  17. PHP函数补完:ImageCopyResamples()
  18. PHP函数补完:import_request_variables()
  19. PHP函数补完:parse_url()
  20. PHP函数补完:移除HTML标签strip_tags()
  21. PHP函数补完:输出数组结构与内容var_dump()
  22. PHP函数补完:var_export()
  23. PHP函数补完:判断变量是否为数字is_numeric()
  24. PHP函数补完:session_name()
  25. PHP函数补完:session_id()
  26. PHP函数补完:nl2br()与nl2p()函数
  27. PHP函数补完:shuffle()取数组若干个随机元素
  28. PHP函数补完:http_build_query()构造URL字符串
  29. PHP函数补完:stream_context_create()模拟POST/GET

本文地址:http://www.nowamagic.net/librarys/veda/detail/1012,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/1012

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《大话数据结构》 程杰 (作者)

《大话数据结构》主要内容包含:数据结构介绍、算法推导大O阶的方法;顺序结构与链式结构差异、栈与队列的应用;串的朴素模式匹配、KMP模式匹配算法;二叉树前中后序遍历、赫夫曼树及应用;图的深度、广度遍历;最小生成树两种算法、最短路径两种算法;拓扑排序与关键路径算法;折半查找、插值查找、斐波那契查找等静态查找;稠密索引、分块索引、倒排索引等索引技术;二叉排序树、平衡二叉树等动态查找;B树、B+树技术,散列表技术;冒泡、选择、插入等简单排序;希尔、堆、归并、快速等改进排序。

更多计算机宝库...