2011-11-13 88 views
1

我此腳本得到這個通知"Undefined variable: _ in magic_quotes_gpc.php on line 43":43「未定義的變量:_」錯誤

<?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); 
      } 
     } 
    } 
} 
?> 

線路是這樣的:if (is_array($$_VAR[$k]))
我用回聲發佈的所有值,而不是一個單一的1 _

我看了看,並不知道這個變量_來自哪裏,我很困惑。

+7

請不要使用變量變量。 – NullUserException

+2

手冊中有更好的測試代碼。 http://php.net/manual/en/security.magicquotes.disabling.php(雖然它不太清楚爲什麼你的腳本在刪除和'addslashes'之間交替) – mario

+2

請不要使用@:http:// derickrethans。 nl/five-reasons-why-the-shutop-operator-should-be-avoid.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

爲什麼選擇EARTH你想這麼做?魔術報價完全被破壞。他們不應該被使用,永遠。這就是爲什麼每個人都將它們剝離出來,以防萬一他們使用一個虛擬的虛擬主機開啓它。 – SystemParadox