Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在没有php.ini或.htaccess的情况下禁用php魔术引号的最佳方法_Php_Magic Quotes Gpc - Fatal编程技术网

在没有php.ini或.htaccess的情况下禁用php魔术引号的最佳方法

在没有php.ini或.htaccess的情况下禁用php魔术引号的最佳方法,php,magic-quotes-gpc,Php,Magic Quotes Gpc,我需要编写可移植代码,该代码将在启用了magic\u qoutes\u gpc的共享服务器上运行,我无法在php.ini或.htaccess中更改该代码。(服务器正在运行PHP5.2) 似乎有很多函数可以从所有超全局的$\u GET,$\u POST等中删除slaches,但我不确定哪一个是最好的。还有一些评论似乎说,这些键还添加了斜杠,这些斜杠也需要去掉。因此,我应该使用PHP网站上的一个: if (get_magic_quotes_gpc()) { $process = array(

我需要编写可移植代码,该代码将在启用了
magic\u qoutes\u gpc
的共享服务器上运行,我无法在php.ini或.htaccess中更改该代码。(服务器正在运行PHP5.2)

似乎有很多函数可以从所有超全局的
$\u GET
$\u POST
等中删除slaches,但我不确定哪一个是最好的。还有一些评论似乎说,这些键还添加了斜杠,这些斜杠也需要去掉。因此,我应该使用PHP网站上的一个:

if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
             unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}
或者类似的:(从这个答案:)

甚至像这样:

if (get_magic_quotes_gpc()) {
    function undoMagicQuotes($array, $topLevel=true) {
        $newArray = array();
        foreach($array as $key => $value) {
            if (!$topLevel) {
                $key = stripslashes($key);
            }
            if (is_array($value)) {
                $newArray[$key] = undoMagicQuotes($value, false);
            }
            else {
                $newArray[$key] = stripslashes($value);
            }
        }
        return $newArray;
    }
    $_GET = undoMagicQuotes($_GET);
    $_POST = undoMagicQuotes($_POST);
    $_COOKIE = undoMagicQuotes($_COOKIE);
    $_REQUEST = undoMagicQuotes($_REQUEST);
}
是否有人能解释每种方法和/或完全不同的方法的优缺点,以及它们有多彻底,以及它们是否从关键点和价值中删除了斜杠

(这种方法有用吗:)
(而且似乎所有这些方法都是不完整的,因为它们没有从所有受影响的超全局删除斜线)

第一种方法

Pro's

  • 它们适用于数组和单变量
  • 你把钥匙拿走了吗
Con's

  • 代码太长,无法满足需要
第二种方法

Pro's

  • 它们适用于数组和单变量
Con's

  • 代码太长,无法满足需要
  • 不剥掉钥匙
第三种方法

Pro's

  • 它们适用于数组和单变量
  • 你把钥匙拿走了吗
Con's

  • 代码太长,无法满足需要
我一直在使用这个,它可以正常工作(在osTicket中找到它,我喜欢开源):

Pro's

  • 它们适用于数组和单变量
Con's

  • 不剥掉钥匙
不过,我从未遇到过同样需要剥掉钥匙的情况。许多开源库不这样做(例如Wordpress、osTicket)。通常,我只为$\u POST和$\u GET数据使用名称,这些数据将永远不会转义。

第一种方法

Pro's

  • 它们适用于数组和单变量
  • 你把钥匙拿走了吗
Con's

  • 代码太长,无法满足需要
第二种方法

Pro's

  • 它们适用于数组和单变量
Con's

  • 代码太长,无法满足需要
  • 不剥掉钥匙
第三种方法

Pro's

  • 它们适用于数组和单变量
  • 你把钥匙拿走了吗
Con's

  • 代码太长,无法满足需要
我一直在使用这个,它可以正常工作(在osTicket中找到它,我喜欢开源):

Pro's

  • 它们适用于数组和单变量
Con's

  • 不剥掉钥匙

不过,我从未遇到过同样需要剥掉钥匙的情况。许多开源库不这样做(例如Wordpress、osTicket)。通常,我只为$\u POST和$\u GET数据使用名称,这些数据将永远不会转义。

您可以通过执行以下操作来消除斜杠:

$_REQUEST = array_map('stripslashes', $_REQUEST);
我认为这更容易,使代码更小,更简洁


我相信您知道在使用magic quotes指令时可能出现的问题(以下是一篇文章)。但在我看来,最好是你把你的应用转移到另一个主机提供商,以防你当前的提供商无法关闭magic quotes。另外,使用过时的PHP版本也不是个好主意

您可以通过执行以下操作来消除斜杠:

$_REQUEST = array_map('stripslashes', $_REQUEST);
我认为这更容易,使代码更小,更简洁


我相信您知道在使用magic quotes指令时可能出现的问题(以下是一篇文章)。但在我看来,最好是你把你的应用转移到另一个主机提供商,以防你当前的提供商无法关闭magic quotes。另外,使用过时的PHP版本也不是个好主意

这里是另一个主要来自但有我自己的变化:

if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
    function unMagicQuotify($array) {
        $fixed = array();
        foreach ($array as $key=>$val) {
            if (is_array($val)) {
                $fixed[stripslashes($key)] = unMagicQuotify($val);
            } else {
                $fixed[stripslashes($key)] = stripslashes($val);
            }
        }
        return $fixed;
    }

    $_GET = unMagicQuotify($_GET);
    $_POST = unMagicQuotify($_POST);
    $_COOKIE = unMagicQuotify($_COOKIE);
    $_REQUEST = unMagicQuotify($_REQUEST);
    $_FILES = unMagicQuotify($_FILES);
}
Pro's

  • 它们适用于数组和单变量
  • 你把钥匙拿走了吗
  • 不使用引用
Con's

  • 可能会改变变量的顺序
请注意,将$_文件作为魔术引号包含也会影响它。
至于读取文件(文件获取内容)和/或使用php://input 我不知道魔法引号是否会影响它们,但是当你阅读它们时,你必须使用stripslashes(),而不能这样做。我没有检查$HTTP\u RAW\u POST\u数据,但默认情况下它没有填充,所以不使用它应该没问题。

这里是另一个主要由我自己更改的数据:

if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
    function unMagicQuotify($array) {
        $fixed = array();
        foreach ($array as $key=>$val) {
            if (is_array($val)) {
                $fixed[stripslashes($key)] = unMagicQuotify($val);
            } else {
                $fixed[stripslashes($key)] = stripslashes($val);
            }
        }
        return $fixed;
    }

    $_GET = unMagicQuotify($_GET);
    $_POST = unMagicQuotify($_POST);
    $_COOKIE = unMagicQuotify($_COOKIE);
    $_REQUEST = unMagicQuotify($_REQUEST);
    $_FILES = unMagicQuotify($_FILES);
}
Pro's

  • 它们适用于数组和单变量
  • 你把钥匙拿走了吗
  • 不使用引用
Con's

  • 可能会改变变量的顺序
请注意,将$_文件作为魔术引号包含也会影响它。
至于读取文件(文件获取内容)和/或使用php://input 我不知道魔法引号是否会影响它们,但是当你阅读它们时,你必须使用stripslashes(),而不能这样做。我没有检查$HTTP_RAW_POST_数据,但默认情况下它没有填充,所以不检查应该没问题。

对不起,你能解释一下每个方法的优缺点吗?比较一下,而不是作为一个整体,我不太清楚你说的“最简单的方式:…”是什么意思。你的方法是否删除了斜杠