[php] pb avec (un)serialize
Résolu/Fermé
A voir également:
- Unserialize(): error at offset
- Easy php - Télécharger - Divers Web & Internet
- Php?id=1 - Forum PHP
- \R php ✓ - Forum PHP
- Php if plusieurs conditions ✓ - Forum PHP
- Echo image php ✓ - Forum PHP
13 réponses
Bonjour,
comme l'objet est envoyé en URL et qu'il contient des signes particuliers, il convient de l'encoder correctement :
$monObjetEnUrl = rawurlencode(serialize($monObjet));
Dans la page de réception de l'objet :
$monObjet = unserialize(rawurldecode($monObjetEnUrl));
comme l'objet est envoyé en URL et qu'il contient des signes particuliers, il convient de l'encoder correctement :
$monObjetEnUrl = rawurlencode(serialize($monObjet));
Dans la page de réception de l'objet :
$monObjet = unserialize(rawurldecode($monObjetEnUrl));
Bonjour,
J'ai le même problème mais c'est assez bizarre, je me demande si c'est pas un pb avec Wamp.
J'ai testé mon fichier avec Xamp, tout fonctionne nickel, j'ai copié ces derniers sous Wamp, et là, mes serialize fontionnent plus.
Est ce que ca pourrait venir de là ? car sous Xamp, aucun problème.
J'ai le même problème mais c'est assez bizarre, je me demande si c'est pas un pb avec Wamp.
J'ai testé mon fichier avec Xamp, tout fonctionne nickel, j'ai copié ces derniers sous Wamp, et là, mes serialize fontionnent plus.
Est ce que ca pourrait venir de là ? car sous Xamp, aucun problème.
Salut ! J'ai eu le même problème après l'up sur FREE,
résolu aussi en changeant le nom de la variable de session.
Le pourquoi du comment maintenant ... Aucune idée.
résolu aussi en changeant le nom de la variable de session.
Le pourquoi du comment maintenant ... Aucune idée.
zen69
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
11 sept. 2009 à 17:15
11 sept. 2009 à 17:15
Bonjour à tous,
J'ai eu le même genre de problème et je l'ai résolu en modifiant une config dans le fichier php.ini :
magic_quotes_gpc = off
Bien à vous.
J'ai eu le même genre de problème et je l'ai résolu en modifiant une config dans le fichier php.ini :
magic_quotes_gpc = off
Bien à vous.
Bonjour,
meme problème, meme solution;
Le problème c'est que souvent, les installs par défaut de php sont avec une configuration magic_quotes_gpc = on
peut etre pour protéger les débutants qui n'auraient pas placé de protection eux memes sur leurs sites.
Voici un très bon article expliquant pourquoi désactiver ça, et comment faire en remplacement pour garder une certaine sécurité : http://www.phpfrance.com/tutoriaux/index.php/2005/04/17/29-les-magic-quotes
Voici également une page où décoder rapidement un tableau sérialisé qui serait vue comme illisible par php serialize : http://www.unserialize.net . Pratique également pour, du coup, réparer un tableau corrompu "from : serialize => to serialize" sans avoir a tapper son petit script ;)
Ces magic quotes sont aussi la plaie pour l'enregistrement de texte via tinymce.... ;)
meme problème, meme solution;
Le problème c'est que souvent, les installs par défaut de php sont avec une configuration magic_quotes_gpc = on
peut etre pour protéger les débutants qui n'auraient pas placé de protection eux memes sur leurs sites.
Voici un très bon article expliquant pourquoi désactiver ça, et comment faire en remplacement pour garder une certaine sécurité : http://www.phpfrance.com/tutoriaux/index.php/2005/04/17/29-les-magic-quotes
Voici également une page où décoder rapidement un tableau sérialisé qui serait vue comme illisible par php serialize : http://www.unserialize.net . Pratique également pour, du coup, réparer un tableau corrompu "from : serialize => to serialize" sans avoir a tapper son petit script ;)
Ces magic quotes sont aussi la plaie pour l'enregistrement de texte via tinymce.... ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai moi aussi le meme probleme avec serialize/unserialize.
Le souci est que tout fonctionne bien mais un objet natif de php ne peut pas etre serialisé.
Par exemple si dans le code de votre class vous avez $this->connection = new mysqli(...);
vous pourrez sérialiser votre objet mais l'objet connection ne le sera pas.
Le souci est que tout fonctionne bien mais un objet natif de php ne peut pas etre serialisé.
Par exemple si dans le code de votre class vous avez $this->connection = new mysqli(...);
vous pourrez sérialiser votre objet mais l'objet connection ne le sera pas.
Déterrage de sujet !! :D
J'utilise base64_encode() en sus de serialize() et base64_decode() avec unserialize().
Si jamais ça peut aider... :)
J'utilise base64_encode() en sus de serialize() et base64_decode() avec unserialize().
et pour retrouver les valeurs d'origine
$variable=base64_encode(serialize($autrevariable);
Sous wampserver et php5, bien entendu.
$newvariable=unserialize(base64_decode($variable);
Si jamais ça peut aider... :)
Escusez moi j'ai oublié de préciser que si je fait le serialize/unserialize, sur la meme page, cela fonctionne parfaitement...
Merci
Merci
J'arrive un peu après la bataille...
Alors... Résolu ou pas ?
Alors... Résolu ou pas ?
1- j'ai le tableau suivant (Print_r):
Array ( [signature] => un signature bidon bidon bidon [langue] => br ) 1
2- Que je serialize avec la fonction serialize(). le résultat est :
a:2:{s:9:"signature";s:30:"un signature bidon bidon bidon";s:6:"langue";s:2:"br";}
3- si je l'unserialize avec la fonction unserialize(). le résultat est bon :
Array ( [signature] => un signature bidon bidon bidon [langue] => br ) 1
4- Je constitue la requête suivante (avec addslashes()), que j'execute :
UPDATE `srr__parameter` SET `scp_params`='a:2:{s:9:\"signature\";s:30:\"un signature bidon bidon bidon\";s:6:\"langue\";s:2:\"br\";}', `scp_date`=CURRENT_TIMESTAMP, `scp_scr`='0.50' WHERE `scp_login` =2 AND `scp_sct` =3
5- Je constitue la requête suivante, que j'execute :
SELECT * FROM `srr__parameter` WHERE `scp_login`=2 AND `scp_sct`=3
6- la valeur du champ `scp_params` est la suivante (donc idem qu'en 2 ?) :
a:2:{s:9:"signature";s:30:"un signature bidon bidon bidon";s:6:"langue";s:2:"br";}
Execution d'un test à tout hasard : if($data['scp_params']==$TestSerialize)
Non, pas égal - c'est là qu'est le Bug... une histoire d'encodage des caractères ? JE SECHE !
7- erreur déclenchée lorsque je tente d'appliquer unserialize() à `scp_params` :
le code : 96 - $Params = unserialize($data['scp_params']);
Notice: unserialize() [function.unserialize]: Error at offset 5 of 122 bytes in /var/www/*****.php on line 96
Pour finir, j'utilise un serveur PHP sous Ubuntu
Important :
j'ai du activer l'error reporting de niveau le plus important (E_ALL) afin de générer la E_NOTICE signalée plus haut. sinon, aucune erreur n'est montrée.
Array ( [signature] => un signature bidon bidon bidon [langue] => br ) 1
2- Que je serialize avec la fonction serialize(). le résultat est :
a:2:{s:9:"signature";s:30:"un signature bidon bidon bidon";s:6:"langue";s:2:"br";}
3- si je l'unserialize avec la fonction unserialize(). le résultat est bon :
Array ( [signature] => un signature bidon bidon bidon [langue] => br ) 1
4- Je constitue la requête suivante (avec addslashes()), que j'execute :
UPDATE `srr__parameter` SET `scp_params`='a:2:{s:9:\"signature\";s:30:\"un signature bidon bidon bidon\";s:6:\"langue\";s:2:\"br\";}', `scp_date`=CURRENT_TIMESTAMP, `scp_scr`='0.50' WHERE `scp_login` =2 AND `scp_sct` =3
5- Je constitue la requête suivante, que j'execute :
SELECT * FROM `srr__parameter` WHERE `scp_login`=2 AND `scp_sct`=3
6- la valeur du champ `scp_params` est la suivante (donc idem qu'en 2 ?) :
a:2:{s:9:"signature";s:30:"un signature bidon bidon bidon";s:6:"langue";s:2:"br";}
Execution d'un test à tout hasard : if($data['scp_params']==$TestSerialize)
Non, pas égal - c'est là qu'est le Bug... une histoire d'encodage des caractères ? JE SECHE !
7- erreur déclenchée lorsque je tente d'appliquer unserialize() à `scp_params` :
le code : 96 - $Params = unserialize($data['scp_params']);
Notice: unserialize() [function.unserialize]: Error at offset 5 of 122 bytes in /var/www/*****.php on line 96
Pour finir, j'utilise un serveur PHP sous Ubuntu
Important :
error_reporting(E_ALL);
j'ai du activer l'error reporting de niveau le plus important (E_ALL) afin de générer la E_NOTICE signalée plus haut. sinon, aucune erreur n'est montrée.
Bonjour,
J'avais le meme type de probleme:
-1- Un object etait bien serialise() en page_1, et stocke sur une variable de $_SESSION['xxx']
-2- je recuperais bien cet object serialise en page_2, mais unserialize ne me le rendait pas (sans pour autant retourner FALSE)
Resolution
J'utilisais le meme nom pour la definition de class (registration), pour l'object instantie ($registration) et pour la variable de $_SESSION['registration']
J'ai change le nom de ma variable de $_SESSION et maintenant ca marche
Stephane
J'avais le meme type de probleme:
-1- Un object etait bien serialise() en page_1, et stocke sur une variable de $_SESSION['xxx']
-2- je recuperais bien cet object serialise en page_2, mais unserialize ne me le rendait pas (sans pour autant retourner FALSE)
Resolution
J'utilisais le meme nom pour la definition de class (registration), pour l'object instantie ($registration) et pour la variable de $_SESSION['registration']
J'ai change le nom de ma variable de $_SESSION et maintenant ca marche
Stephane
Bonjour,
j'ai le même problème sauf que je suis sous xampp et que mon magic_quotes_gpc = off.
Je stock mon objet dans ma BDD avec mysqli et bind_param et quand je le ressort, ça m'envoie une erreur du genre:
Notice: unserialize(): Error at offset 224 of 687 bytes in /opt/lampp/htdocs/engies/classes/Mot.php on line 165
Est-ce que bind_param modifie les données que l'on créé ?
Merci de m'aider, j'ai cherché mais j'ai pas trouvé...
j'ai le même problème sauf que je suis sous xampp et que mon magic_quotes_gpc = off.
Je stock mon objet dans ma BDD avec mysqli et bind_param et quand je le ressort, ça m'envoie une erreur du genre:
Notice: unserialize(): Error at offset 224 of 687 bytes in /opt/lampp/htdocs/engies/classes/Mot.php on line 165
Est-ce que bind_param modifie les données que l'on créé ?
Merci de m'aider, j'ai cherché mais j'ai pas trouvé...
24 nov. 2009 à 13:22