J'écris une application qui doit être portable. Je sais que je dois désactiver les guillemets magiques sur la configuration de PHP mais dans ce cas, je ne sais pas si je peux le faire, donc je suis en utilisant le code suivant:PHP - Shorter Magic Quotes Solution
if (get_magic_quotes_gpc() === 1)
{
$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);
}
Pour simplifier le processus de désactivation des citations magiques J'ai eu l'idée suivante:
if (get_magic_quotes_gpc() === 1)
{
foreach (array('GET', 'POST', 'COOKIE', 'REQUEST') as $array)
{
${'_'.$array} = unserialize(stripslashes(serialize(${'_'.$array})));
}
}
Mais j'ai essayé et je suis une erreur, je suis incapable de comprendre, par exemple avec ?name=O'Reilly
:
serialize($_GET); // a:1:{s:4:"name";s:9:"O\'Reilly";}
stripslashes(serialize($_GET)); // a:1:{s:4:"name";s:9:"O'Reilly";}
B ut unserialize(stripslashes(serialize($_GET)))
me donne cette erreur bizarre:
Avis: unserialize(): Erreur à l'offset 30 de 32 octets
EDIT: En raison de l'attribut de longueur dans serialize()
j'ai changé la code à utiliser les fonctions JSON:
if (get_magic_quotes_gpc() === 1)
{
foreach (array('GET', 'POST', 'COOKIE', 'REQUEST') as $array)
{
${'_' . $array} = json_decode(stripslashes(json_encode(${'_' . $array})), true);
}
}
Cependant maintenant le tableau $_GET
est à venir vide, quelqu'un peut-il m'expliquer pourquoi?
Pour autant que je sache, ils ne seront pas réellement supprimer get_magic_quotes_gpc en PHP 6, exactement parce que ça va briser ce genre de scripts sans raison, alors les gens les ont convaincus que ce serait une bêtise à faire. Au lieu de cela, il sera simplement marqué comme obsolète. Juste quelque chose à garder à l'esprit si vous voulez simplifier le code un peu. –
@Michael: Le manuel (http://pt2.php.net/manual/fr/security.magicquotes.php) indique toujours le contraire: ** Cette fonctionnalité a été désapprouvée à partir de PHP 5.3.0 et supprimée à partir de PHP 6.0 .0.** –
Non, c'est la partie du manuel qui parle des citations magiques en tant que caractéristique - qui va en effet être supprimée. Le fichier NEWS en cours pour PHP6 (http://svn.php.net/viewvc/php/php-src/trunk/NEWS?revision=289244&view=markup) indique "Changé get_magic_quotes_gpc(), get_magic_quotes_runtime pour toujours retourner false et set_magic_quotes_runtime() pour élever un E_CORE_ERROR. ", donc les fonctions pour vérifier si elles sont activées sont toujours là. –