我怎样才能在运行时禁用PHP魔术引号?(How can I disable PHP magic qu

2019-06-26 08:44发布

我正在写一组将在一些不同的设置来运行PHP脚本的,他们中的一些共享与魔术引号的(恐怖)托管。 如果不控制PHP或Apache配置的能力,我可以做我的剧本什么在运行时关闭PHP的报价?

它会更好,如果代码不承担魔术引号是,所以我可以使用,可能会或可能不会有魔术引号不同的主机相同的脚本。

Answer 1:

只有magic_quoted_runtime可以在运行时被禁用。 但是magic_quotes_gpc的不能在运行时被禁用( PHP_INI_ALL多变直到PHP 4.2.3,自此PHP_INI_PERDIR ); 你只能删除它们:

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

欲了解更多信息,请参阅禁用魔术引号 。



Answer 2:

魔术引号不能在运行时被禁用,但是你可以使用.htaccess文件在目录中禁用它。

php_flag magic_quotes_gpc off

唯一真正好处这已经是你可以把它曾经在一个目录和它的作品对整个目录和子目录。 真的很好,如果你需要这个你没写,需要得到它没有魔术引号运行的应用程序。



Answer 3:

我有一个小脚本此类似浓汤的(当然我喜欢我的更好:):

if(function_exists('get_magic_quotes_runtime') && get_magic_quotes_runtime())
    set_magic_quotes_runtime(false);

if(get_magic_quotes_gpc()) {
    array_stripslashes($_POST);
    array_stripslashes($_GET);
    array_stripslashes($_COOKIES);
}

function array_stripslashes(&$array) {
    if(is_array($array))
        while(list($key) = each($array))
            if(is_array($array[$key]))
                array_stripslashes($array[$key]);
            else
                $array[$key] = stripslashes($array[$key]);
}


Answer 4:

为PHP 5.3+另一种解决方案:

if (get_magic_quotes_gpc() === 1)
{
    $_GET = json_decode(stripslashes(preg_replace('~\\\(?:0|a|b|f|n|r|t|v)~', '\\\$0', json_encode($_GET, JSON_HEX_APOS | JSON_HEX_QUOT))), true);
    $_POST = json_decode(stripslashes(preg_replace('~\\\(?:0|a|b|f|n|r|t|v)~', '\\\$0', json_encode($_POST, JSON_HEX_APOS | JSON_HEX_QUOT))), true);
    $_COOKIE = json_decode(stripslashes(preg_replace('~\\\(?:0|a|b|f|n|r|t|v)~', '\\\$0', json_encode($_COOKIE, JSON_HEX_APOS | JSON_HEX_QUOT))), true);
    $_REQUEST = json_decode(stripslashes(preg_replace('~\\\(?:0|a|b|f|n|r|t|v)~', '\\\$0', json_encode($_REQUEST, JSON_HEX_APOS | JSON_HEX_QUOT))), true);
}

处理键,值和多维数组。



Answer 5:

它不能在运行时完成:(



文章来源: How can I disable PHP magic quotes at runtime?