2011-11-13 7 views
1
나는이 스크립트에서이 통지 "Undefined variable: _ in magic_quotes_gpc.php on line 43"납니다

: 나는 모든 값을 게시 에코 사용 if (is_array($$_VAR[$k]))
이 아니라 하나의 1 _입니다 :"정의되지 않은 변수 : _"오류

<?php 
$HTTP_VARs = array(
    'HTTP_GET_VARS' => '_GET', 
    'HTTP_POST_VARS' => '_POST', 
    'HTTP_COOKIE_VARS' => '_COOKIE', 
    'HTTP_SERVER_VARS' => '!_SERVER', 
    'HTTP_ENV_VARS' => '!_ENV', 
    'HTTP_POST_FILES' => '!_FILES' 
); 

if (!isset($HTTP_GET_VARS) && isset($_GET)) { 
    foreach ($HTTP_VARs as $HTTP_VAR => $_VAR) { 
     $_VAR = ($_VAR[0] == '!' ? str_replace('!', '', $_VAR) : $_VAR); 

     if (isset($$_VAR)) 
      $$HTTP_VAR = $$_VAR; 
    } 
} 

function strip_magic_quotes($array) 
{ 
    foreach ($array as $key => $value) 
     $array[$key] = (is_array($value) ? strip_magic_quotes($value) : stripslashes($value)); 

    return $array; 
} 

foreach ($HTTP_VARs as $HTTP_VAR => $_VAR) { 
    if ($_VAR[0] != '!') { 
     if (get_magic_quotes_gpc()) { 
      if (!empty($$_VAR)) 
       $$_VAR = strip_magic_quotes($$_VAR); 
     } else { 
      if (is_array($$_VAR)) { 
       foreach ($$_VAR as $k => $v) { 
        if (is_array($$_VAR[$k])) { 
         foreach ($$_VAR[$k] as $k2 => $v2) 
          $$_VAR[$k][$k2] = addslashes($v2); 

         @reset($$_VAR[$k]); 
        } else 
         $$_VAR[$k] = addslashes($v); 
       } 

       @reset($$_VAR); 
      } 
     } 
    } 
} 
?> 

라인 (43)이있다 .

나는이 변수 _이 어디에서 왔는지를 보았지만 아무런 생각이 들지 않았습니다. 저는 당황합니다.

+7

가변 변수를 사용하지 마십시오. – NullUserException

+2

매뉴얼에서 더 나은 테스트 코드가 있습니다. http://php.net/manual/en/security.magicquotes.disabling.php (왜 스크립트가 제거와 addslashes 사이에서 번갈아 나오는 이유는 명확하지 않지만) – mario

+2

http : // derickrethans @를 사용하지 마십시오. nl/five-reasons-why-shutop-operator-should-be-avoided.html – malletjo

답변

2

WOA! 나는 엄청난 양의 코드로 달성하고자하는 것이 무엇인지 알지 못하지만 다음과 같은 코드를 사용하여 마술 따옴표를 처리 할 수 ​​있습니다.

/** Recursive array version of stripslashes. */ 
function stripslashes_deep($value) { 
    $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); 
    return $value; 
} 
/** Remove magic quotes if enabled. */ 
function nuke_magic_quotes() { 
    if (get_magic_quotes_gpc()) { 
     $_POST = array_map('stripslashes_deep', $_POST); 
     $_GET = array_map('stripslashes_deep', $_GET); 
     $_COOKIE = array_map('stripslashes_deep', $_COOKIE); 
     $_REQUEST = array_map('stripslashes_deep', $_REQUEST); 
    } 
} 
+0

get_magic_quotes_gpc()가 비활성화되어 있으면 내 코드가 슬래시를 추가합니다. – alex2005

+2

@ alex2005 : 그게 바로 당신 코드가 끔찍한 이유입니다. 적절한 SQL 탈출 (mysql_real_escape_string) 또는 바인드 된 매개 변수에 대해 읽어보십시오. – mario

+1

왜 지구상에서 그렇게하고 싶습니까? 마술 따옴표는 완전하게, 완전하게 부서진다. 그들은 절대로 사용되어서는 안됩니다. 그것이 스위치가 켜져있는 멍청한 웹 호스트를 사용하는 경우에 대비하여 모든 사람들이 그 (것)들을 뽑아내는 이유입니다. – SystemParadox