[RESOLU] unserialize (depend de la version php ?)

unserialize (depend de la version php ?) [RESOLU] - PHP - Programmation

Marsh Posté le 08-02-2013 à 15:04:11    

Bonjour,
 
 
voila j'ai un étrange problème.
En local je bosse avec XAMP en PHP 5.4.7
Lorsque je lance ce code en local, tout marche très bien:
 

Citation :

if (isset($_COOKIE['configuration']['couleur_planning']))
        {
 foreach(Configuration::get_couleur_planning() as $couleur => $mot) {
      foreach(unserialize($mot) as $v)
        echo '#'.$couleur."<br>";
       
          }
         
 
}
 
le cookie contient:
Array ( [configuration] => Array ( [couleur_planning] => Array ( [f9ff73] => a:2:{i:0;s:4:"VST ";i:1;s:3:"vst";} [f85a5a] => a:1:{i:0;s:13:"Sous-effectif";} [f55959] => a:1:{i:0;s:4:"STOP";} ) ) )  
Je précise que c'est données sont rentrée grâce à la fonction serialize()


 
Or lorsque je le l’héberge sur un serveur fonctionnant en php , ce message d'erreur s'affiche:  

Citation :

Warning: Invalid argument supplied for foreach() ( à propos de la ligne foreach(unserialize($mot) as $v) )
 
Et effectivement, c'est un boolean qui est retournée et non une liste. Ce qui signifie donc que unserialize a échoué. Mais ... je n'arrive pas à comprendre pourquoi.


 
Par ailleurs sur ce serveur, le cookie ne contient pas tout à fait la même chose:

Citation :

Array ( [configuration] => Array ( [couleur_planning] => Array ( [f9ff73] => a:2:{i:0;s:4:\"VST \";i:1;s:3:\"vst\";} [f85a5a] => a:1:{i:0;s:13:\"Sous-effectif\";} [f55959] => a:1:{i:0;s:4:\"STOP\";} ) ) )


(je suppose qu'ils ont changé la fonction serialize, mais dans ce cas la fonction unserialize a aussi du être mis à jour ?!)
 
 
Quelqu'un aurait il déjà rencontré ce soucis et trouvé une solution ?
Je reste perplexe ... je n'ai aucune idée sur l'origine du problème.
 
 
Cordialement.


Message édité par killmehill le 18-02-2013 à 15:56:37
Reply

Marsh Posté le 08-02-2013 à 15:04:11   

Reply

Marsh Posté le 08-02-2013 à 16:48:46    

D'après la documentation, serialize() n'a connu qu'un changement en PHP 4.0.3 (un moment donc) par contre unserialize() peut renvoyer faut lorsque la déserialisation échoue, peut être que le souci vient du cookie mais les backslash présents ne me semblent pas être bloquants.
 
En plus tu serialises des tableaux, donc pas de contraintes comme s'il s'agissait d'instances.
 
A voir quand même quelle version de php est installée sur le serveur. Dans tous les cas lors d'un probleme de déserialisation t'as une NOTICE qui est déclanchée (suivant la config de php il se peut qu'elle n'apparaisse pas)

Reply

Marsh Posté le 09-02-2013 à 10:52:11    

utilise stripslashes() pour le contenu de ton cookie.
 


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 18-02-2013 à 09:23:40    

Bonjour,
 
bingo Fabien c'est exactement ça !
Je ne pensais pas en avoir besoin car vu que les "/" venaient du serialize, je me suis dis que le unserialize devait à son tour les gérer et les retirer. Étrange quand même...
Si quelqu'un aurait une explication du comment du pourquoi je suis preneur ;)
Mais vu que le sujet est résolut, il peut aussi être lock et je resterais dans mon ignorance :(
 
Merci encore et bonne journée !

Reply

Marsh Posté le 18-02-2013 à 10:26:00    

c'est les "magic_quote" que met automatiquement php par sécurité.


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 18-02-2013 à 15:13:18    

D'accord.
Bha merci bien Fabien pour tout ces éclaircissement.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed