>  기사  >  백엔드 개발  >  PHP函数详解:magic_quotes_gpc()

PHP函数详解:magic_quotes_gpc()

WBOY
WBOY원래의
2016-07-25 08:46:402455검색
取得 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
  1.         define('SYS_MAGICGPC', get_magic_quotes_gpc());
  2.        
  3.         $_POST = magic_gpc($_POST);
  4.        
  5.         function magic_gpc($string) {
  6.                 if(SYS_MAGICGPC) {
  7.                         if(is_array($string)) {
  8.                                 foreach($string as $key => $val) {
  9.                                         $string[$key] = magic_gpc($val);
  10.                                 }
  11.                         } else {
  12.                                 $string = stripslashes($string);
  13.                         }
  14.                 }
  15.                 return $string;
  16.         }
  17.        
  18.         echo 'get_magic_quotes_gpc的值: '.get_magic_quotes_gpc();
  19.         echo '
    ';
  20.         echo '直接输出POST变量: '.$_POST['nowamagic'];
  21.         echo '
    ';
  22.         echo '经过magic_gpc处理: '.magic_gpc($_POST['nowamagic']);
  23. ?>


  24.    
  25.          

  26.                
  27.                
  28.          

  29.        
  30.    
复制代码

程序输出:
get_magic_quotes_gpc的值: 1直接输出POST变量: no'wamagic.net经过magic_gpc处理: no'wamagic.net再来个例子:

  1.         echo 'get_magic_quotes_gpc: '.get_magic_quotes_gpc();
  2.         echo '
    ';
  3.         echo '直接输出POST变量: '.$_POST['nowamagic'];
  4.         echo '
    ';
  5.         echo 'addslashes: '.addslashes($_POST['nowamagic']);
  6.        
  7.         if (!get_magic_quotes_gpc()) {
  8.                 $nowamagic = addslashes($_POST['nowamagic']);
  9.         }
  10.         else {
  11.                 $nowamagic = $_POST['nowamagic'];
  12.         }
  13.        
  14.         echo '
    ';
  15.         echo '处理后输出: '.$nowamagic;
  16. ?>


  17.    
  18.          

  19.                
  20.                
  21.          

  22.        
  23.    
复制代码

程序输出:
get_magic_quotes_gpc: 1直接输出POST变量: no'wa\magic.netaddslashes: no\'wa\\magic.net处理后输出: no'wa\magic.net
基础知识


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.