magic_quotes_gpc关闭共享主机与$ _POST数组

时间:2013-05-14 00:33:46

标签: php

在共享服务器上有魔术引用的***是痛苦的,我放弃上传另一个php.ini来覆盖共享主机php.ini,因为那时其他问题发生了,(配置中的PDO但是没有加载等等)我尝试了.htaccess,这给出了500错误。

所以我发现这个解决方案非常好并且效果很好 How to turn off magic quotes on shared hosting?

if ( in_array( strtolower( ini_get( 'magic_quotes_gpc' ) ), array( '1', 'on' ) ) )
{
    $_POST = array_map( 'stripslashes', $_POST );
    $_GET = array_map( 'stripslashes', $_GET );
    $_COOKIE = array_map( 'stripslashes', $_COOKIE );
}

直到我开始将数组发布到服务器

<select name="gropu[]">
<option value="1">2</option>
<option value="2">1</option>
<option value="3">3</option>
</select>

然后我有以下错误

Warning: stripslashes() expects parameter 1 to be string, array given in index.php on line 18

请帮助我,在本地主机上开发一些正常的东西时真的很烦我,一旦上传到服务器就错了......

1 个答案:

答案 0 :(得分:1)

我通常在初始化时运行它:

// attempt to disable 'magic quotes' at runtime
@ini_set('magic_quotes_runtime', 0);
@ini_set('magic_quotes_sybase', 0);

// strip slashes if that didn't work
if(get_magic_quotes_gpc()){
  function _strip_slashes_ref(&$var){
    $var = stripslashes($var);
  }

  array_walk_recursive($_POST,    '_strip_slashes_ref');
  array_walk_recursive($_GET,     '_strip_slashes_ref');
  array_walk_recursive($_COOKIE,  '_strip_slashes_ref');
  array_walk_recursive($_REQUEST, '_strip_slashes_ref');
}

魔术引号在5.4中删除,因此您可能只想在以下情况下执行此操作:

version_compare(PHP_VERSION, '5.4.0') < 0