begin process at 2012 05 26 03:44:27
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > CHARGER UN FICHIER DISTANT (SANS CROSSDOMAIN)

CHARGER UN FICHIER DISTANT (SANS CROSSDOMAIN)


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Classé sous :rss, html, kennyblog, flux, crossdomain Niveau :Initié Date de création :11/02/2007 Date de mise à jour :11/02/2007 19:53:25 Vu / téléchargé :13 784 / 1 218

Auteur : x_mec

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note


 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

  • //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);
//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"
-------------------------------
V ous 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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

11 février 2007 19:53:26 :
Correction du php, merci wizard512

 Sources du même auteur

Source avec Zip CHAMPS DE SAISIE AMELIORÉ
Source avec Zip Source avec une capture POLLKA - SONDAGE EN FLASH/PHP/XML
Source avec Zip CHARGER UNE PAGE HTML DANS UNE ANIMATION FLASH
Source avec Zip CONTROLE DU FLOOD VIA FLASH ET SHARE OBJECT
Source avec Zip Source avec une capture AFFICHAGE D'UN LOADING PRINCIPAL SOUR FORME DE TEXTE, AVEC B...

 Sources de la même categorie

TRANSFERT DE DONNÉES FLASH <-> PHP - PETITE SUBTILITÉ AVEC J... par Loubiou
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

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CONCEPT BROWSER : NAVIGATEUR EN MODE TEXTE par mouloudikhaled
Source avec Zip MESINFO SIMPLE par vbnino
Source avec Zip LECTEUR DE FLUX RSS EN FLEX par Androw95220
Source avec Zip GÉRER UNE IFRAME AVEC UN MENU FLASH par shade001
Source avec Zip CHARGER UNE PAGE HTML DANS UNE ANIMATION FLASH par x_mec

Commentaires et avis

Commentaire de wizard512 le 11/02/2007 19:38:55

Sa serait pas mieux comme sa..?

//Le fichier "secu_flash.php"

<?php

if( !isset( $_GET[ "maVariable" ] ) )
{
die( "Error" );
}

echo utf8_encode( utf8_decode( file_get_contents( $_GET[ "maVariable" ] ) ) );
?>


Et pourquoi decoder la chaine, si c'est pour ensuite la recoder...?

Commentaire de x_mec le 11/02/2007 19:57:14

Merci wizard512, je n'ai pas encore les bonnes pratique de php en tète. Effectivement c'est mieux de verifier que la variable soit bien "setée". Et le code sur une seule ligne c'est cool ^^

Et du coup tu m'a permis de voir une erreur effectivement sur le decode, j'suis parfois à la masse :$

Thanks

Commentaire de wizard512 le 13/02/2007 20:08:00

Pas grave, c'est normale, donc normalement ton code ressemblerai plutot a sa :




//Le fichier "secu_flash.php"
<?php

if( !isset( $_GET[ "maVariable" ] ) )
{
     die( "Error" );
}

echo file_get_contents( $_GET[ "maVariable" ] );

?>

Commentaire de Girou le 14/02/2007 09:59:50

Bonjour,

il est effectivement bien pratique que php n'ai pas les mêmes restrictions de sécurité que flash, cependant je me demande si ce genre de script ne risque pas de poser tout de même un problème...

Si quelqu'un repère ce fichier php sur votre serveur, il peut s'en servir comme passerelle pour aller chercher tout et n'importe quoi sur le net et le faire transiter par votre serveur, utiliser votre bande passante, ah la la mon bon monsieur, à l'heure actuelle faut se méfier de tout...

J'en suis pas sur mais cela me semble une grosse faille.

Ce que je fais dans ces cas là - mais est-ce la bonne solution ?? - je rajoute un fichier xml (au même endroit que le fichier php) contenant une liste d'url autorisées.
Et donc, avant de charger le fichier distant, je contrôle si il fait partie de ma liste de fichiers autorisés. Si il n'est pas dedans, on renvoi une erreur.

Voici donc ma proposition :
----------------------- fichier php -----------------
<?php
if( !isset( $_GET[ "maVariable" ] ) )
{
die( "Error" );
}
$URL = $_GET['maVariable'];
$URL = trim($feedURL);
// 1) on contrôle si la variable est dans les url autorisées via verifyLink($URL)
// 2) on charge le fichier si c'est OK
// 3) on contrôle si il est encodé en utf8 via isUTF8($theFile);
//    J'utilise ceci surtout lorsque je charge des fichiers xml distants pas
//    toujours encodés en UTF8
// 4) on renvoi le fichier proprement encodé à flash qui digère mieux l'UTF8
if(verifyLink($URL)) {
$theFile = file_get_contents($URL);
$isUTF8 = isUTF8($theFile);
if(!$isUTF8){
echo utf8_encode($theFile);
}else{
  echo $theFile;
}

}
function verifyLink($requestedURL) {
$path = './authorized_url.xml';
$authorized = false;
$approvedList = file($path);
foreach($approvedList as $url) {
if(strstr ($url, $requestedURL)) {
$authorized = true;
break;
}
}
return $authorized;
}
function isUTF8($string)
{
       return (utf8_encode(utf8_decode($string)) == $string);  
}
?>

--------------------- fichier authorized_url.xml ---------------------------

<?xml version="1.0" ?>
<urls>
<url>http://www.domainA.com/path/file</url>
<url>http://www.domainB.com/path/file</url>
</urls>

P.S. l'utilité de ce fichier xml peut être double car si on l'étoffe un peu, il peut facilement servir a créer un menu dans l'animation flash pour pointer vers des fichiers externes... Rien ne se perd, rien ne se crée, tout se transforme comme disait quelqu'un :o)

Commentaire de x_mec le 15/02/2007 09:00:08

Et m*rde !

Merci Girou pour l'idée ;)

Enfin cette source explique surtout le principe, mais je vais rajouter une solution pour securiser un peu le script. Ton idée est bonne mais je vais fournir une methode moins complexe et plus souple ;)


Encore merci à vous ;)

Commentaire de Girou le 15/02/2007 10:47:41

Pas de problème !!

mon alternative me sert pour un projet en particulier (1 xml qui est utilisé pour deux choses différentes, menu et sécurisation) mais effectivement, tu peux directement intégré les urls accessibles dans le fichier php avec un tableau par exemple...

Mais c'est sur que sur le principe, cela va aider pas mal de monde de pouvoir se libérer de la sécurisation du flash player

Girou

Commentaire de scara 51 le 18/02/2007 14:04:18

?????? le but de ce script ??????
Moi pas comprendre !!

Perso ni php ni code de 300 ligne, juste une seule ligne :

System.security.allowDomain("*");

et ca fonctionne tt seul ...
Enfin j'ai dû louper une étape. Donc merci de m'expliquer le but de ce script. :S

Commentaire de scara 51 le 18/02/2007 14:12:50

Ok j'ai fait des ti tests. Effectivement, il semble que le player ne puisse pas charger un domaine pour lequel il n'a pas de crossdomain.xml.

Donc mes excuses. Ce sript dans ce cas est nécessaire.

Commentaire de x_mec le 18/02/2007 15:26:07

Ouf, tu m'as fait douter pendant une demi seconde ^^


Ton code à toi permet de loader un swf depuis n'importe quel serveur ;)

Commentaire de antho76 le 28/03/2007 10:00:57

Sa a l'air interessant mais peux ton l'utiliser pour le Striming ?

car en fait moi j'aurrais besoin de ce genre de systeme,
mais qui permet de charger un flux audio de webradio Shoutcast.

comment l'utilisé pour mon cas ?

merci d'avance

Commentaire de mobman02 le 06/05/2007 19:09:01

ANTHO76 as tu trouvé une solution ? Je recherche aussi un moyen d'utiliser cette technique pour du stream audio (Shoutcast).

Commentaire de mobman02 le 06/05/2007 19:28:32

Plop j'ai réussi à le faire fonctionner mon player shoutcast !!

System.security.allowDomain("http://hebor.zazimut.org/");
_root.s = new Sound();
_root.s.loadSound("http://serveurshoutcast.org:8000/;stream.nsv", true);

C'est le ;stream.nsv à la fin de l'url qui l'a fait fonctionner, me demandez pas comment :)

Commentaire de antho76 le 09/05/2007 22:32:57

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

Commentaire de eliotek le 23/05/2007 16:27:37

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 !

Commentaire de antho76 le 23/05/2007 18:49:44

no Pb envoie moi ton adresse mail et je te prepare sa

Commentaire de antho76 le 23/05/2007 18:50:27

no Pb envoie moi ton adresse mail et je te prepare sa

Commentaire de lhorn le 26/01/2012 11:50:17

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/

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Problème avec les flux RSS et les accents [ par Tyguibang ] Salut tout le monde, j'ai un problême avec les rss dans flash, je reussi à aller chercher mes données et à les afficher, mais quand il y a un apostrop flux RSS ne s'affichent pas. swf is online. [ par hb_bm ] Hellaü, Je tente de faire un simple lecteur de flux RSS en As3. ça marche en local, quand je teste depuis flash. ça ne marche pas quand je teste d Sandbox et Facebook [ par projer ] Bonjour! Je viens vous demander un peu d'aide car après près de 4h de recherche, je reste bloqué... Voilà, je réalise une animation qui charge des p flashvars [ par yasdar ] bonjour voila j'ai une animation flash qui fonctionne très bien, il a du texte provenant d&#8217;une variable Flashvar( inclue dans le HTML de la page Lien vers un autre page html dans un séquence précise [ par Cynthia14 ] Bonjour, je suis débutante en flash et je suis en train de monter un site web dans AS2. Par contre, j'ai besoin d'ouvrir une autre page html mais dans Insérer une animation dans un code html [ par daddou90 ] Bonjour tout le monde, Je voudrais insérer une animation flash .swf dans un code html. J'utilise pour ceci adobe flash5 et dreamweaver cs5.5. Je préc XML Rss feed [ par yasdar ] Bonjour à tous voila je veux créer un texte qui permet d'afficher un Rss feed. si je fait copier coller le xml du rss feed dans un fichier.xml ça marc Ouvrire une page HTML avec un bouton dans un IFRAME [ par kechidasamir ] Bonjour a tousje cree une barre de navigation en Flash qui est composé de plusieurs boutonscette barre de navigation fait partie d'une page HTML cette code html pour insere une galerie flash. [ par benartemi ] Bonjour,Je une galerie de image avenc des miniatures en flash(swf), tout fontione mes je ne sais pas comment la metre dans le code html.Je ne sais pas


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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 : 1,342 sec (4)

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