|
Как отменить магическое действие magic quotes?
При включенной директиве конфигурации magic_quotes_gpc PHP автоматически добавляет слеши к строковым
значениям в массиве $GLOBALS (это относится не только к данным в $_POST , $_GET ,
$_COOKIE , $_REQUEST , но и к данным в $_SERVER , $_FILES ,
$_ENV , $_SESSION ). Вдобавок, при включенной директиве magic_quotes_runtime ,
слеши добавляются к данным полученым во время работы скрипта (например, из файла, базы данных). И как показывает
практика, зачастую, эта магия оказывается "медвежьей" услугой.
Проще всего, конечно, отключить директивы в php.ini:
; Magic quotes
;
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off
или через .htaccess, прописав php_flag magic_quotes_gpc Off и
php_flag magic_quotes_runtime Off , однако если нужно создать приложение, которое не зависит от настроек PHP,
тогда нужно выполнить ряд антимагических действий вручную. С magic_quotes_runtime все просто, для его
отключения в начале скрипта прописываем set_magic_quotes_runtime(0); и все, а для magic_quotes_gpc
нужны заклинания более суровые: нужно проверить состояние директивы magic_quotes_gpc и если она включена,
пробежаться по глобальным массивам и сделать stripslashes() , например так как показано ниже.
<?php
if ( get_magic_quotes_gpc() )
{
$_GET = stripslashes_deep($_GET);
$_POST = stripslashes_deep($_POST);
$_COOKIE = stripslashes_deep($_COOKIE);
$_REQUEST = stripslashes_deep($_REQUEST);
$_SESSION = stripslashes_deep($_SESSION);
$_SERVER = stripslashes_deep($_SERVER);
$_FILES = stripslashes_deep($_FILES);
$_ENV = stripslashes_deep($_ENV);
}
function stripslashes_deep($value)
{
if( is_array($value) )
{
$value = array_map('stripslashes_deep', $value)
}
elseif ( !empty($value) && is_string($value) )
{
$value = stripslashes($value);
}
return $value;
}
?>
В 6 версии PHP от магических закавычиваний отказались и оставленные в целях обратной совметимости
get_magic_quotes_gpc и get_magic_quotes_runtime будут всегда возвращать false .
|
|