Question

J'ai un grand tableau 2d que je sérialise et base64_encode et jette dans une base de données. Sur une page différente, j'extraye le tableau et lorsque je base64_decode , je peux le renvoyer en écho et il a définitivement l'air valide.

Cependant, si j'essaie de désérialiser (base64_decode ($ serializedArray)) , la même erreur se produit au point de provoquer le crash de Firefox.

L'erreur est:

  

Attention: unserialize () [function.unserialize]: le noeud n'existe plus dans /var/www/dev/wc_paul/inc/analyzerTester.php à la ligne 24

J'inclurais tout le tableau sérialisé que je répercutais mais la dernière fois que j'ai essayé cela sur ce formulaire, mon Firefox s'est écrasé.

Quelqu'un at-il une idée de la raison pour laquelle cela pourrait se produire?

Était-ce utile?

La solution

Êtes-vous sûr de ne faire que sérialiser un tableau et non un objet (par exemple, DOMNode?)? À l'instar des ressources, toutes les classes ne vont pas se contenter d'être non sérialisées. Par exemple avec le DOM (que votre erreur me suggère avec lequel vous travaillez), chaque nœud a une référence au parentNode, et si le parentNode n’existe pas au moment où un nœud est en cours de désérialisation, il ne peut pas recréez cette référence et des problèmes en découlent.

Je suggérerais de sauvegarder l’arborescence de domaines au format XML dans la base de données et de la recharger ultérieurement.

Autres conseils

Assurez-vous que le champ de la base de données est suffisamment grand pour contenir le tableau sérialisé. Les données sérialisées sont très inefficaces en PHP, et de nombreuses bases de données (comme MySQL) tronqueront en silence les valeurs de champ trop longues.

Quel type d'éléments sont dans votre tableau? serialize / unserialize ne fonctionne pas avec les objets PHP intégrés, ce qui est généralement la cause de cette erreur.

En outre, selon votre commentaire, ce n'est pas votre problème, mais pour économiser de l'espace dans votre base de données, ne codez pas en base64 les données, mais échappez-les. c'est-à-dire pour mysql, utilisez mysql_real_escape_string.

Assurez-vous de ne pas sérialiser les ressources, elles ne peuvent pas être sérialisées.

Resources@php.net

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top