如何在共享主机上关闭魔术报价?

2022-08-30 11:59:58

我想关闭PHP的魔术引号。我无法访问 php.ini。

当我尝试添加到我的.htaccess文件时,我得到一个500内部服务器错误。这是我的.htaccess文件的样子:php_flag magic_quotes_gpc off

AddType x-mapp-php5 .php
php_flag magic_quotes_gpc off

然后我试图使用,但这没有效果。ini_set('magic_quotes_gpc', 'O')

如何关闭魔术报价?


答案 1

根据手册,您通常可以在共享主机上安装自定义php.ini,其中不使用mod_php,因此该指令会导致错误。对于 suexec/FastCGI 设置,在任何情况下都有一个每个 Web 空间是很常见的。php_valuephp.ini

--

我不认为O(大写字母o)是设置ini标志的有效值。您需要使用真/假、1/0 或“开”/“关”值。

ini_set( 'magic_quotes_gpc', 0 );   // doesn't work

编辑

检查ini设置列表后,我看到magic_quotes_gpc是一个设置(在4.2.3之后),这意味着您无法更改它(只有设置可以更改PHP_INI_PERDIRini_set()PHP_INI_ALLini_set())

这意味着您必须使用.htaccess文件来执行此操作 - OR - 实现一个脚本来反转魔术引号的效果。类似的东西

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

答案 2

虽然我不能说为什么php_flag给你s,但我会指出,PHP手册有一个例子,可以检测魔术引号是否打开,并在运行时将其从超全局中剥离出来。与发布的其他内容不同,这个是递归的,可以正确地从数组中去除引号:500 Internal Server Error

更新:我今天注意到PHP手册上有以下代码的新版本,它使用对超级全局变量的引用。

旧版本:

<?php
if (get_magic_quotes_gpc()) {
    function stripslashes_deep($value)
    {
        $value = is_array($value) ?
                    array_map('stripslashes_deep', $value) :
                    stripslashes($value);

        return $value;
    }

    $_POST = array_map('stripslashes_deep', $_POST);
    $_GET = array_map('stripslashes_deep', $_GET);
    $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
    $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}
?>

新版本:

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

推荐