Bonjour,

Est-ce qu'il y a une limite à un JSON que l'on balance d'un serveur A à un serveur B ?

je balance un json en ajax
d'un serveur A via une SPA Angular JS pour créer une sauvegarde que j'encode en 64+serialize sur un serveur B avec cakephp en backoffice.

 $tmp2 = array(
                'user_id' => $this->request->data['json']['user_id'],
                'name' => $this->request->data['json']['name'],
                'json' => base64_encode(serialize($this->request->data['json']['json'])),
                'grid15' => base64_encode(serialize($this->request->data['json']['grid15'])),
                'img' => $fileName,
            );

            $this->Composition->save($tmp2);

Quand je souhaite l'afficher dans mon backoffice j'ai

unserialize(): Error at offset 49147 of 49151 bytes

C'est la première fois que j'ai ce type d'erreur.

Quand je regarde de plus près j'ai l'impression que mon serialize est coupé et donc je me demande si c'est pas la taille de mon JSON envoyé ?

le Json envoyé contient des éléments comme ci-dessous

array(
    'i15-1-4' => array(
        'element' => 'i15-1-4',
        'img' => 'url img',
        'price' => '35',
        'xy' => '1-4',
        'x' => '1',
        'y' => '4',
        'taille' => '30',
        'rotation' => '0'
    ),
 array(
    'i15-1-5' => array(
        'element' => 'i15-1-5',
        'img' => 'url img',
        'price' => '35',
        'xy' => '1-4',
        'x' => '1',
        'y' => '4',
        'taille' => '30',
        'rotation' => '0'
    ),
    X fois 

j'ai remarqué qu'a partir de 125 élément, sa plante

Peut-on encode le json avant l'envoie ?

Merci

5 réponses


bouks
Auteur
Réponse acceptée

J'ai trouvé...
Erreur de débutant, c'est bien un problème lors de la save mon type de champs dans ma BDD est 'text' et forcement je dépasse le quota...

Je viens de mettre MEDIUMTEXT pour éssayer et cela fonctionne

Question ? je viens de voir sur un post que l'on conseille de mettre BLOB pour ce type de champs ? c'est quoi ?

merci pour vos retours :)

Je ne comprend pas trop pk tu base64_encode après serialize

bouks
Auteur

Hey Grafikart,
Alors lors de l'enregistrement je serialize et ensuite j'encode
Puis lors de la récupération de donnés , je decode pour unserialisé

D'habitude je save directement mon serialize en BDD mais justement j'ai vu sur le net qu'en fesant un decode64 on palier le problème que je rencontre c'est à dire => unserialize(): Error at offset 49147 of 49151 bytes
source = http://davidwalsh.name/php-serialize-unserialize-issues

bouks
Auteur

Oups désolé j'ai voulu vulgariser en pensant que cela était plus compréhensible...

je reprends:
Pourquoi tu utilises serialize alors que tu travailles avec du JSON ? JSON est déjà un format serialisé. Pourquoi tu ne restes pas avec JSON ?
Maintenant que tu le dit ... c'est pour enregistrer les datas dans ma BDD mais je pense que l'on peut save directement le JSon ?

EDIT

Je viens de faire un test mais c'est que lorsque je balance mon json cela devient un tableau de l'autre coté d'ou mon serialize

Après tu parles de transfert AJAX entre 2 serveurs, ce qui ne veut rien dire

Ce que je veux direc'est que je travaille sur une SPA - AngularJS hébergé sur un serveur A, cette application travaille avec du json.
La sauvegarde se fait via un appel ajax qui envoie les données sur un serveur B avec un backoffice dev avec CakePhp

Sinon ton problème fait penser à un problème d'encodage
Je reste convaincu que c'est un problème de taille, j'ai effectué plusieurs test arrivé à 120 élément dans mon json, mon backoffice ne lit plus les données et affiche
mais c'est aussi peut etre un problème d'encodage ;)

unserialize(): Error at offset 49147 of 49151 bytes

Pour l'exemple des datas
Le json créé par l'appli SPA

grid15: Object
id: 21
json: Object
    i15-3-4: Object
        element: "i15-3-4"
        idModule: "34"
        img: "url image"
        price: "25"
        referenceCouleur: "#FFFFFF"
        referenceModule: "1515-EPL-WHIT"
        rotation: "90"
        taille: "15"
        x: "3"
        xy: "3-4"
        y: "4"
    i15-3-5: Object
    i15-3-6: Object
    **** ici c'est une liste qui se répéte pour X éléments ******
name: 'save test'
user_id: "1"

la save en bdd
serialisé + encode 64

YToxMjQ6e3...jc6IiN

le debug() sur Cake

unserialize(): Error at offset 49147 of 49151 bytes

si je dépasse 120 élément sa plante d'ou mon idée que le Json est peut etre trop grand pour passer par http...

BLOB c'est un format qui vas transformer ta data en format binaire