如何关闭共享主机上的魔术引号?
我想关闭PHP的魔术引号。 我没有访问php.ini。
当我尝试将php_flag magic_quotes_gpc off
添加到我的.htaccess文件时,出现500内部服务器错误。 这就是我的.htaccess文件的样子:
AddType x-mapp-php5 .php
php_flag magic_quotes_gpc off
然后我尝试使用ini_set('magic_quotes_gpc', 'O')
,但那没有任何作用。
如何关闭魔术报价?
根据手册,您可以经常在共享主机上安装自定义php.ini,其中mod_php未使用,并且php_value
指令因此导致错误。 对于suexec / FastCGI设置,在任何情况下都有一个per-webspace php.ini
是很常见的。
-
我不认为O(大写字母o)是设置ini标志的有效值。 您需要使用true / false,1/0或“on”/“off”值。
ini_set( 'magic_quotes_gpc', 0 ); // doesn't work
编辑
检查ini设置列表后,我看到magic_quotes_gpc是一个PHP_INI_PERDIR
设置(在4.2.3之后),这意味着您不能使用ini_set()
更改它(只能使用ini_set()
更改PHP_INI_ALL
设置)
这意味着你必须使用.htaccess文件来做到这一点 - 或者 - 实现一个脚本来反转魔术引号的效果。 像这样的东西
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 );
}
虽然我不能说为什么php_flag会给你500 Internal Server Error
,但我会指出,PHP手册有一个例子,它检测魔术引号是否打开,并在运行时从超级全局变量中剥离它。 与其他人发布的不同,这一个是递归的,并且会正确地从数组中除去引号:
更新:我今天注意到在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);
}
?>
这将解决在创建本地php.ini文件时出现“Class”PDO'找不到'的问题。
如果你不能使用htaccess文件关闭魔术引号(由于Pete Bailey已经给出的理由),只需:
添加行
magic_quotes_gpc =关
magic_quotes_runtime =关
magic_quotes_sybase =关闭
延长= pdo.so
延长= pdo_mysql.so
将其保存到您的脚本正在执行的目录中。
更新:如果你想只有一个新的php.ini文件的副本,然后将此行添加到您的根.htaccess文件中:
SetEnv PHPRC /path/to/site/root/public_html/php.ini
很明显,你需要将ini文件移动到这个位置,这个位置已经不存在了。
希望能节省2小时的时间,只需要我!
链接地址: http://www.djcxy.com/p/4507.html