Transfert de données flash <-> php - petite subtilité avec json (as3 - php5)

1/5 (16 avis)

Snippet vu 6 991 fois - Téléchargée 18 fois

Contenu du snippet

Problématique :
Imaginons que nous ayons une quantité d'information dans un shareobject et que nous désirions les stocker en dur de façon rapide pour les recharger plus tard, tout aussi rapidement. Par exemple un backup en dur.

La méthode simple traditionnelle serait de mettre en forme les données dans flash par une sérialisation, puis d'envoyer les données à PHP et faire le décodage puis soit d'envoyer dans une base de données soit dans un XML (puisque nous désirons les relire par la suite).

Ma solution novatrice est d'envoyer directement le shareobject après mise en forme JSON et à réception, de l'écrire tel quel directement en dur. L'opération inverser vise simplement à charger depuis flash ce fichier et de procéder au décodage. Ainsi nous gagnons un temps fou en procédure.

Source / Exemple :


//Conditions de départ :
//Importer la bibilio JSON ici http://code.google.com/p/as3-rpclib/

// Envoie de données depuis flash vers PHP
import flash.net.URLLoaderDataFormat;				
import flash.net.SharedObject;								
import com.adobe.serialization.json.JSON;

//on créé un shareobjet et on l'enregistre
var glo		: SharedObject;
	glo.data.prenom = "Bill";
	lo.data.nom     = "Boquet";
	glo.flush();

// on créé un tableau et on push le shareobject
var DATAS_GLB:Array = new Array();
	DATAS_GLB.push(glo.data); 

	
var url:String = "http://..../write_glob.php"
var request:URLRequest = new URLRequest(url);
	request.method 	   = URLRequestMethod.POST; 
	var requestVars:URLVariables = new URLVariables();
	// on sérialise les données au format JSON
		requestVars.jsons 	 = JSON.encode(DATAS_GLB);
		request.data 		 = requestVars; 
	// on envoie et c'est tout !
	var loader:URLLoader = new URLLoader();
		loader.load(request);
		trace(requestVars.jsons);
//--------------------------------------------------------
// récupération de données directement depuis flash
var loader:URLLoader = new URLLoader();
	loader.load(new URLRequest("http://localhost/..../data.jso"));	
	loader.addEventListener(Event.COMPLETE, onComplete_handler); 

	public function onComplete_handler(event:Event){
																																	
											var datas :Object = new Object();
											    datas 		  = JSON.decode(event.target.data);
												
											//trace("=> "+event.target.data); // dump tracé
											//trace("=> "+datas[0].nom);
											//trace("=> "+datas[0].prenom)
											//trace("=> "+datas[1].prenom); /:si on envoie par exemple 2 fiches
											
											// ici c'est pour lister les nom de variables automatiquement
											for (var vars:String in datas[0]){
																			  trace(vars);
																			  with(glo.data){
																				  vars = datas[0].vars;
																				  //On assigne le nom de la valeur à sa valeur
																				  //glo.data.prenom = "Bill";
																				  //glo.data.nom    = "Boquet";
																			                }
																			  }//for														
											glo.flush(); // on écrit les données
								           			
											      }						   

//partie PHP hyper simple : (write_glo.php)
<?php

	$jsons    = $_REQUEST['jsons'];	
	file_put_contents('../.../data.jso', stripslashes($jsons));
    		  
?>

Conclusion :


Nous utilisons JSON pour écrire les données en dur par le biais de PHP puis nous récupérons les données directement depuis flash en chargeant le fichier directement.
Cette petite subtilité permet de gagner du temps pour enregistrer une grande quantité de données sans passer par un recodage de type xml depuis PHP.
Bref c'est un façon différente de l'utiliser.
Personnellement je m'en sert pour figer les données issues d'une transaction bancaire en vue d'une création de facture PDF décalée dans le temps.(bons de commande).
Ceci parsk la transaction est effectuée depuis un serveur bancaire et que pour un nombre important d'acheteur, je ne voulais pas créer un table de données pour chacun d'eux.

Soyez indulgent pour ce bout de code écrit en copier-coller depuis mon développement en cours.
Mes excuses pour ceux qui pensaient utiliser ce code directement, il faudra une légère adaptation mais c'est pleinement fonctionnel.

A voir également

Ajouter un commentaire Commentaires
fedebul Messages postés 129 Date d'inscription vendredi 17 mars 2006 Statut Membre Dernière intervention 27 février 2012
27 févr. 2012 à 20:14
bonjour et merci pour cette source ! y'a t'il un exemple d'utilisation ?
Merci beaucoup

Laurent
Loubiou Messages postés 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Dernière intervention 5 décembre 2008
27 févr. 2012 à 21:20
Non malheureusement je n'ai pas d'appli toute faite. J'ai écrit ce bout de code pour ceux qui ont besoin d'un transfert de données vers un serveur web en utilisant la sérialisation JSON. Cette source s'adresse aux utilisateurs JSON comme alternative au codage décodage coté PHP puisque nous enregistrons les données reçues en fichier tel que, il est pret à être récupérer par une autre appli flash ou la même à un temps différé.

J'utilise cette façon de faire pour stocker une quantité de données en backup en dur.
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
28 févr. 2012 à 19:53
Bonsoir, en fait tu ne fais qu'utiliser une classe JSON déjà existante.
Pourquoi ne pas envoyer directement tes données en XML ?

Peg'
Loubiou Messages postés 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Dernière intervention 5 décembre 2008
29 févr. 2012 à 05:00
Hello Peg,

effectivement j'utilise une classe déjà et sur la quantité de données je gagne plus de temps machine à sérialiser les données en JSON et d'envoyer à PHP qui va écrire en dur le contenu pour un prochain décodage en AS3, que de coder et décoder en XML. Effectivement pour peut de données ça n'a pas d'interret.
Pour tout te dire, j'ai eu besoin de cette fonction pour récupérer des données envoyée par flash à l'occasion d'un paiement en ligne. Comme le système de paiement est en https et géré par la banque, j'étais limité en taille de données à passer dans leurs variables. Avec cette méthode, je récupère les données à l'issue du paiement sans pertes et sans limite (256 niveaux maintenant) Sauf que pour ce cas de figure j'encode et écris les données depuis PHP (ce qui est un peut la meme chose).
Conclusion, gain de temps énorme, peut de ligne de codes et fiabilité puisque le fichier en dur est strictement conforme à la sérialisation JSON sans parler de la sécurité des données confidentielles !
Voilà, tu sais tout :-)
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
21 mars 2012 à 23:09
Pourquoi utilises-tu un SharedObject vu que tu gardes tout via PHP ?
Pourquoi gardes-tu le SharedObject dans un tableau vu que tu n'énumères que que le premier élément de ce tablau ?

Moi j'ai juste l'impression que c'est plein de bon sentiments, mais la réalisation et l'utitilisation laisse à désirer....

Tu pourrais trés bien créer une classe, passer le nom du futur fichier à PHP, etc. etc...
Ca laisse à désirer, je mettrais seulement 6. C'est bien mieux que la moyenne des dernères sources mais c'est pas génial quand même.

Bonnce change et voir si tu améliores tout ca...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.