Charger un fichier distant (sans crossdomain)

Soyez le premier à donner votre avis sur cette source.

Vue 15 497 fois - Téléchargée 1 304 fois

Description

Lorsque l'on commence à faire un peu de flash dynamique, et que l'on comprend tout le potentiel de charger des fichiers externes (php, flux rss, etc...), on se heurte vite à certains obstacles !

Dans cet exemple, je vais aborder l'obstacle du chargement interdomaine et une manière d'outrepasser cette limitation.

Flash et la securité
--------------------
Pour certaines raisons, flash ne permet pas l'execution et le chargement de certains fichiers provenant d'un domaine different de celui qui l'appel. Certains d'entre vous ce sont surement déjà retrouver "coincés" en voulant charger un flux rss distant dans un swf. C'est parfois assez frustrant ! Car on peut tout à fait charger une image distante, mais rien d'autre .... pourtant charger un xml distant ne presente pas vraiment plus de risque que charger une image ...

Solution du fichier "crossdomain.xml"
-------------------------------------
Flash a penser à nous ! En permettant de creer des règles d'autorisation interdomaine.

En theorie celà signifie, que via un fichier de règle ("crossdomain.xml") placé sur un domaine distant, on peut autoriser ou pas l'accès aux fichiers de ce domaine depuis le domaine où votre swf est hebergé ...

En pratique celà implique que vous devez posseder les "clés" du domaine distant pour pouvoir y deposer votre fichier "crossdomain.xml" ! Evidement celà complique beaucoup les choses, vous vous voyez envoyer un mail à microsoft pour leur dire de mettre un fichier crossdomain sur leur serveur pour que vous puissiez acceder à leur fichier depuis votre domaine !?!

Solution via l'intermediaire d'un script php
--------------------------------------------
C'est cette methode que je vais vous expliquer. Ne soyez pas effrayez par le mot php (certain y font une allergie), ce script sera casi invisible pour vous, mais il va vous faciliter la vie !

En gros, je vais utiliser un scrip php pour faire une passerelle entre votre swf et le fichier distant.

Votre flash envoi l'url distante au script php, le php recupère le fichier distant, flash recupère le resultat du php (donc le fichier distant, vous avez compris le principe).

Source / Exemple :


//Le fichier "secu_flash.php"

<?php
//On verifie que l'on a bien reçu la variable venant de flash
if(!isset($_GET["maVariable"])) {
	//si vide on arrète le script
	die( "Error" );
}
//si votre .php n'est pas encodé en utf-8, decommentez cette ligne et supprimer l'autre echo
//echo utf8_encode(file_get_contents($_GET["maVariable"]));
//et si votre php est encodé en utf8, si pas supprimer la ligne suivante et decommenter la ligne precedente
echo file_get_contents($_GET["maVariable"]);
?>

//Le code actionscript à mettre sur la timeline

/********************************************************
 
  Creation et paramètres du champs de texte recepteur

                                                                                                                  • /
//Creation du champs de texte var txt_html:TextField = this.createTextField("txt_html", this.getNextHighestDepth(), 0, 0, Stage.width, Stage.height); //Champs de texte multiligne this.txt_html.multiline = true; //On active le retour à la ligne automatique this.txt_html.wordWrap = true; //On supprime les blancs inutiles this.txt_html.condenseWhite = true; //On active le rendu html this.txt_html.html = true; /******************************************************** Declaration de variables
                                                                                                                  • /
//On crée une reference à _root (pour le ciblage) var root:MovieClip = this; //On defini l'url de base de notre swf var adresse_swf:String = _url.substring(0, _url.split(".swf")[0].lastIndexOf("/")+1); /******************************************************** Chargement d'un flux rss distant
                                                                                                                  • /
//Url du flux distant à charger var autre_url:String = "http://blog.ka-studio.net/atom.php"; //Declaration d'un nouvel objet xml var reviews_xml:XML = new XML(); //On ignore les blancs this.reviews_xml.ignoreWhite = true; //Lors de l'appel du fichier this.reviews_xml.onLoad = function(success:Boolean):Void { if (success) { //si le flux rss est chargé alors... root.txt_html.htmlText = "Chargement du flux "+root.autre_url+"<br /><br /><br />"; //on boucle et on affiche quelques sujets for (var i:Number = 9; i<15; i++) { root.txt_html.htmlText += "<br /><br />"+root.reviews_xml.firstChild.childNodes[i].childNodes[0].childNodes[0].nodeValue; root.txt_html.htmlText += "<br /><br />"+root.reviews_xml.firstChild.childNodes[i].childNodes[6].childNodes[0].nodeValue+"<br /><br />---------------------------------------------"; } } else { //et si le flux rss n'est pas trouvé root.txt_html.htmlText = "Impossible de charger le fichier"; } }; //Url du flux a charger ! Ici on charge en fait le script php, avec l'url du flux en paramètre this.reviews_xml.load(root.adresse_swf+"secu_flash.php?maVariable="+root.autre_url);

Conclusion :


Je joins un zip avec 2 exemples. Celui ci-dessus, et un autre chargeant des infos d'un page html distante

Le script php: "secu_flash.php"
-------------------------------
Vous voyez, il n'est pas si compliqué, à peine 3 lignes de code suffisent.
Mettez ce code dans un fichier nommé "secu_flash.php", et placez le dans le mème dossier que votre swf

Exemple n°1 (ci-dessus): recuperation d'un flux rss se trouvant sur un domaine distant
--------------------------------------------------------------------------------------
Cet exemple va donc creer un champs de texte au format html, et y placer une partie de notre flux distant
La variable adresse_swf est malheureusement indispensable, cette variable fait référence à l'url du dossier contenant notre swf, sans ça, flash risque de ne pas charger notre script php.

Exemple n°2 (dans le zip): recuperation de certaines données contenues dans une page html distante
--------------------------------------------------------------------------------------------------
J'ai repris l'exemple de mon billet precedent (loader une page html), sauf qu'on va extraire les infos d'une page distante.
Je recupère tous les liens se trouvant dans le code source de la page distante via la fonction split. Puis je les insère dans notre champs de texte.
Donc à vous de ruser pour retirer les infos dont vous avez besoin

Ps: plus d'infos sur http://blog.ka-studio.net/index.php?2007/02/11/27-flash-charger-loader-fichier-distant-autre-domaine-serveur-via-php

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
26 janvier 2012

bonjour,

j'ai un problème similaire mais je n'ai pas tout compris.

J'ai posté mes sources ici merci d'y jeter un oeil :

http://forums.mediabox.fr/topic/177868-probleme-dacces-fichiers-externes/
Messages postés
17
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
10 juin 2008

no Pb envoie moi ton adresse mail et je te prepare sa
Messages postés
17
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
10 juin 2008

no Pb envoie moi ton adresse mail et je te prepare sa
Messages postés
1
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
23 mai 2007

Salut antho76 j'ai cherché depuis longtemps un script flash pour mon webradio en ligne, je ne suis pas fort en php et action script mais seulement je suis webdesigner alors je me demande si tu peux m'envoyer un script que tu as pour ma webradio?

Merci beaucoup !
Messages postés
17
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
10 juin 2008

salut MOBMAN02

alor oui j'ais trouver comment fair,

d'abord par ce que toi aussi tu a trouver, moi aussi je sais pas pourquoi sa marche ,
mais sa ressemble au flux video alor c'est peut etre pour sa.

mais en fait le pb du crossdomaine me vennais plus d'un pb du lecteur flash.

en fait sa marche tres bien avec le lecteur Flash 9 mais pas inferieur.

suffisais de mettre a jour le lecteur flash au auditeur ^^

si tu a besoin de plus de truc pour ton lecteur shoutcast fait le moi savoir j'ais cree un lecteur complet avec affichage des " titres , auditeur, artiste ... " le tous en live ( pas besoind de rafraichr la page )

donc esite pas a demandé je t'en ferras par

slts angelus76/ antho76
Afficher les 17 commentaires

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.