begin process at 2013 05 20 05:40:58
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > TRANSFERT DE DONNÉES FLASH <-> PHP - PETITE SUBTILITÉ AVEC JSON (AS3 - PHP5)

TRANSFERT DE DONNÉES FLASH <-> PHP - PETITE SUBTILITÉ AVEC JSON (AS3 - PHP5)


 Information sur la source

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Classé sous :JSON, PHP, AS3 Niveau :Expert Date de création :22/02/2012 Vu :4 085

Auteur : Loubiou

Ecrire un message privé
Site perso
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 Description

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

  • //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));
  • ?>
//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.


 Sources du même auteur

Source avec Zip Source avec une capture DÉCODER DES CODES HTML PARMIS D'AUTRES ! (AS2)
Source avec Zip Source avec une capture FORMATAGE HTML DANS UN DATAGRID
Source avec Zip Source avec une capture RETAILLER UNE IMAGE EN CONSERVANT SES PROPORTIONS
CHARGEMENT DE 2000 DONNEES SOUS FORME XML EN MOINS DE 1 SECO...
SCRIPT DE CHARGEMENT DE CLIPS À LA QUEUE-LEULEU POUR LIMITER...

 Sources de la même categorie

Source avec Zip LECTURE DE TEXTE "VOICE" par yasdar
Source avec Zip Source avec une capture AS3 - PRINCIPE ET APPLICATION DE FONCTION RÉCURSIVE par pegase31
Source avec Zip Source avec une capture UN PACKAGE "HISTORIC" POUR GÉRER VOS COMMANDES par top30
Source avec Zip Source avec une capture AS3 - SIMULATION DE GRILLE D'ÉDITION par pegase31
Source avec Zip CONSTANTE D'OBJET INMODIAFIABLE ET DÉBLOQUABLE par top30

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture AGAL PARSER par mousman
Source avec Zip Source avec une capture AS3 - PRINCIPE ET APPLICATION DE FONCTION RÉCURSIVE par pegase31
Source avec Zip Source avec une capture UN PEU DE MATH par yasdar
Source avec Zip Source avec une capture AS3 - JEU DU TAQUIN par pegase31
Source avec Zip Source avec une capture SIMPLE CLASSE POUR RÉCUPÉRER LES RÉSULTATS D'UNE REQUETE SQL par emanueledimauro

Commentaires et avis

Commentaire de fedebul le 27/02/2012 20:14:21

bonjour et merci pour cette source ! y'a t'il un exemple d'utilisation ?
Merci beaucoup

Laurent

Commentaire de Loubiou le 27/02/2012 21:20:34

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.

Commentaire de pegase31 le 28/02/2012 19:53:51 administrateur CS

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'

Commentaire de Loubiou le 29/02/2012 05:00:36

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 :-)

Commentaire de pegase31 le 29/02/2012 12:26:20 administrateur CS

Alors le plus efficace aurait été d'encoder en binaire, alors, sachant que ce format est lisible des deux côtés en natif, sans parler du fait que côté poids et sécurité, c'est encore plus performant.

Peg'

Commentaire de Loubiou le 29/02/2012 21:00:48

Ben je ne suis pas certain que le fichier final en binaire soit moins lourd et question décodage dans flash, le binaire n'est pas du tout aussi simple que la class JSON avec sa ligne unique d'instruction. Bref la solution proposée est performante, fiable et nous convient parfaitement.

Commentaire de pegase31 le 29/02/2012 22:19:59 administrateur CS

pour le poids, tu gagnerais 75% environ (tests persos) et pour le format, il n'y a aucun "parseur" à faire, donc pas de classe à ajouter en plus : gain de poids dans le flash et dans la donnée. Mais je comprend que ce format rebute par son style "non-humain" dans l'écriture ;)

Peg'

Commentaire de aerolyte le 12/03/2012 23:57:19

Du coup je me demande si c'est pas plus cohérent de passer par du DOM STORAGE, qui est d'ailleur recommandé par le W3C

Cordialement

Commentaire de aerolyte le 13/03/2012 09:57:25

bonjour Loubiou, peg'

Concernant cette source je me demande si  du coup il serait pas préférable d'utiliser le DOM storage pour les navigateur rècent. Ce qui est d'ailleurs conseiller par le W3C

Sinon je profite en peu de la visibilité de ta source pour faire appele a des compétences.
J'ai mis au point un nouveau modèle d'utilisation des bases de données hièrachique.
mais il me manque un peu d'aide d'expert en requète sql

tout est la: http://www.sqlfr.com/forum/sujet-NOUVEAU-MODELE-REPRESENTATION_1578316.aspx

Merci

Commentaire de top30 le 21/03/2012 23:09:27 6/10

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...

Commentaire de Loubiou le 23/03/2012 09:49:00

Bonjour tout le monde.
Je ne suis pas persuadé que je me sois bien exprimé pour expliquer cette source.
Je réponds à Aerolyte, concernant le W3C. Effectivement c'est recommandé mais j'écris ce fichier en PHP via une liaison flash pour avoir une rétention de l'information et éviter une série de codage-décodage de la function JSON. Le fichier n'est pas énorme et évite des lignes d'instructions dans PHP.
Ainsi depuis mon appli AIR, je récupère directement mes données directement au format JSON comme si elles venaient d'être envoyées après par exemple plusieurs jours. J'évite ainsi des instructions pour l'écriture éventuelle d'un xml, d'un fichier binaire et un nouveau codage pour envoyer à flash et un nouveau décodage du côté réception flash.
J'utilise les shareObjects car le client est une sur une appli AIR et certaines informations demandent un cryptage et une rétention locale qui ne nécessite pas d'implémenter une base de données locale. Il se trouve donc que j'ai utilisé mon bout de code, issu directement de mon appli. Bien entendu, il n'est pas forcément utile d'utiliser un shareObject. Ici c'est juste parce que ça se présentait comme ça.

Commentaire de top30 le 23/03/2012 10:38:45

Si ton but est la simplicté tu peux améliorer tout ca !
Ne passes pas par la sérialisation Json...

Gardes directement les variables au format URL dans un fichier texte.
Un truc du genre:


// Ecriture des données de Flash vers PHP ////////////////////////////
var data : URLVariables= new URLVariables();
data.prenom = "Bill";
data.nom = "Boquet";

var name :String= "[URL]/monFichier.txt"

var request :URLRequest= new URLRequest("[URL]/writeData.php");
request.method = URLRequestMethod.POST;
request.data= new URLVariables( "name="+name+"&"+data.toString() ) ;

var loader :URLLoader = new URLLoader();
loader.addEventListener( Event.COMPLETE, onDataWrite );
loader.load(request);

function onDataWrite( $e:Event ):void{
   trace("Données enregistrées");
}


// Récupération des données de PHP vers Flash /////////////////////////
var loader :URLLoader = new URLLoader();
loader.load( new URLRequest(name));
loader.addEventListener(Event.COMPLETE, onDataRead );

public function onDataRead( $e:Event ){
   var data :URLVariables= new URLVariables($e.target.data) ;
   for (var name :String in data ) trace( name, data[name] );
}   

// Le PHP "writeData.php", toujours aussi simple...
<?php

$data= $_REQUEST['data'];
$name= $_REQUEST['name'];
file_put_contents( $name, stripslashes($data) );
?>




C'est ecrit à á volée, plus pour le principe que pour le bon fonctionnement. A vérifier !

Commentaire de top30 le 23/03/2012 10:40:42

La bonne ligne est :
request.data= new URLVariables( "name="+name+"&data"+data.toString() ) ;

Commentaire de aerolyte le 18/04/2013 22:48:18

je déterre cette source pour confirmer que la bonne solution a ton hypothèse  est bien de passer par le DOMStorage. bien qu'il ne soit implanté que pour les navigateur les plus récents.

tu stringify ton json, tu stockes.
tu rapelles et tu parses.

C'est léger, rapide et surtout c'est a l'épreuve des balles^^.

Cordialement

Commentaire de Loubiou le 19/04/2013 11:40:33


Bonjour,

Je vais essayer de faire une réponse groupée à Top30 et à AEROLYTE car en relisant ma source, je constate que je n'ai pas été clair du tout et je m'en excuse.
LA PROBLÉMATIQUE :
Stocker le contenu d'un shareObject sur un espace disque disant en vue de le réutiliser dans flash en évitant des opérations d'assignation de variables (car il y en a beaucoup !) Ce qui fait que l'envoi d'un fichier texte comme propose Top30 est exclu car cette solution est très exactement ce que je veux éviter (d'assigner chaque variables à une valeur à l'envoi et au retour).
Sinon, ma source n'a aucune utilité !!
Ma solution réside en 2 choses :
Une opération de mise en forme simple JSON (sérialisation sans passer en revue toutes les variables) et une opération de stockage de l'objet sérialisé brut sur le serveur web grâce à une fonction PHP.
Du coup, il suffit de le charger comme un fichier de faire l'opération de désérialisation de base pour pouvoir l'exploiter comme shareObject.
Concernant la norme WC3, il n'en est pas question non plus puisque le html n'est pas sollicité dans la mesure où l'on reste dans une application flash (php servant d'interface).
Pour conclure, la norme et les bonnes pratiques ne sont pas toujours les bons chemins à suivre pour obtenir la productivité par la performance ;-)
J'espère avoir été plus clair dans mon explication. Mon tors a été de penser que le code était assez explicite sur cette source qui est toujours d'actualité que ce soit pour flash ou pour AIR.

Commentaire de aerolyte le 19/04/2013 14:38:03

Effectivement si ton objectif est de stocker sur un serveur des variables, je m'incline.
Toutefois, je permet de rappeler que cela à un cout:
1/ nécessité de faire des requetes qui demande un tesmps d'accés imcompressible.
2/ surcharge non négligable de l'activité du sserveur (traitement +enregistrement)
3/ gestion des erreurs

Si ton objectif est juste de stocker des variables, une solutioon pertinente est le DOM Storage.
Car tes variables sont stocker dans la navigateur, le volume disponible est relativement important, l'accessibilité simplifiée, et le code php est pas plus long que celui donné dans ta source.

Alors c'est pas la solution miracle, car comme je l'ai précédemment écrit, seul les navigateur récent , permettent de faire du DOMstorage.
Je ne répond pas a ton messag eprécédent pour etre pénible, mais plutôt pour informer les possible visiteur, des alternatives exitantes.

Cordialement.

P.S:c'est bien malheureux que l'as3 n'ai plus aucun avenir, car c'est pour encore quelques années encore le language compilé le plus performant.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

AS3 une inscription mailing-liste, un php, comment s'en sortir? [ par azetaz ] Bonjour à tous,Je commence à désespérer mais bon, il faut pas!Vous pouvez visualiser mes codes iciVoila mon problème:Je souhaite faire php et flash 9 en AS3 [ par tranber78 ] Ben voilà j'aimerai avoir un script pour faire dialoguer flash et php en AS3 pour des chargement dynamique de vidéos, de sons, d'images, etc...Merci à flash as3 / php / xml [ par projer ] Bonjour, j'aurai besoin de récupérer sur un serveur un xml (facile jusque là) pour pouvoir mettre à jour le contenu d'un site. Mais mes connaissances Récupérer des variables en AS3 vers PHP [ par WavePlus ] Bonjour à tous, C'est mon premier topic sur ce forum et j'espère que vous allez m'apporter l'aide dont j'ai besoins. Voilà, j'ai créer un formulaire q Aide formulaire contact AS3+PHP [ par riraito ] Bonjour! Ayant besoin d'un formulaire de contact à intégrer dans mon site en full flash, j'ai écumer google des heures entières à trouver un tuto pou Mysql et AS3 [ par WCube ] Bonjour tout le monde et désolé de vous déranger :) Je suis débutant en AS3 et je commence à me débrouiller en AS2 mais voilà, j'ai un souci vis à vi Générateur de présentation (jaquette, fiche) AS3 [ par paradox669 ] Bonjour à tous, Je viens à vous pour vous présenter un projet que j'ai en tête depuis un moment, c'est un générateur de présentation en flash AS3. Le Tutorial clair sur les liaison PHP/MYSQL/AS3 [ par AcarnanDragoon ] Bonjour à tous, Je sais que vous allez me dire que je peux demander au meilleur amis du développeur "GOOGLE" mais voila je n'es pas trouvé quelques c [AS3 / PHP] Exporter une variable ... [ par vedelvetsyn ] Mon problème est simple a expliquer. J'ai des variables issues d'un formulaire Flash, et je veux les exporter sur ma page PHP ... J'ai tenté d'appli [AS3] Tracé de droites [ par Wazaah ] Bonjour ! Je travaille en ce moment sur un logiciel qui utilise quelques outils de dessins simples. Dans ces outils, un outil de tracé de droites ent


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales