Quick Tips: Bruk en PHP Proxy Load Eiendeler inn Flash

Quick Tips: Bruk en PHP Proxy Load Eiendeler i Flash
to
Del
en
Del

Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

Så du har nettopp opprettet en kjempeflott Flash app som laster bilder og xml fra et annet domene. Når du teste den fra IDE det fungerer perfekt, men når du setter det på nettet, får du en av de fryktede sikkerhets sandkasse overtredelses feil. Hva gjør jeg?


I denne hurtig Tips, skal jeg vise deg hvordan å lage en enkel PHP proxy laste bilder og xml fra hvor som helst, feilfritt!

første kan noen forespørsler fra en yahoo subdomene som movies.yahoo.com. Den andre er den samme, bortsett fra at det gjør det også forespørsler fra alle maps.yahooapis.com sub domene, og yui.yahooapis.com. Det tredje eksempelet er interessant fordi den gir lesetilgang til alle domener ved å bruke * joker.

Nå som vi vet hvordan de ser ut, la oss lage vår egen. Vi trenger det for å fortelle Flash player at det er ok å lese data fra vår egen domene.

Opprett en ny xml fil i roten av nettstedet ditt, og gi den navnet "crossdomain.xml". Når du har gjort det, bare kopiere xml koden under og erstatte "www.yourdomainhere.com" med ditt eget domenenavn.
<! DOCTYPE tvers av domener-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy> < allow-access-fra domenet = "www.yourdomainhere.com" /> < allow-access-fra domenet = "yourdomainhere.com" /> < allow-access-fra domenet = ". * yourdomainhere.com" /> < /cross-domain-politikk >

Denne tilskudd lese tillatelse til forespørsler som kommer fra ditt domene og dets underdomener. Igjen, bør denne filen ligge i ditt nettsted root



Trinn 4:.! Videre til Kode

La oss lage et fundament for vår PHP Proxy. Vi vil sende den banen til filen vi ønsker å få tilgang via GET-metoden, fra Flash. Lag en mappe som heter "LoaderTest" i roten av nettstedet ditt, og opprette en ny PHP fil i mappen som heter "proxy.php". Legg til følgende kode i PHP-filen:?
≪ php $ filename = $ _GET ['url']; header ('Content-Type: text /xml'); Readfile ($ filnavn); >

Hva våre koden gjør så langt:?


    Setter en variabel kalt $ filnavn lik url variabel i vår spørrestrengen

    Legger "text /xml" innholdstype erklæring til overskriften på vår fil

    Leser ut rådata i filen vi bedt

    Er ikke det utrolig enkelt? Siden vi har lagt til "text /xml" som innholdstype til overskriften, vil vår proxy.php gjengi data xml. La oss teste det ut.

    I adressefeltet, naviger til proxy.php filen du opprettet på nettstedet ditt, og etter "/proxy.php" legge "url = http:? //feeds.feedburner.com/flashtuts-summary ". Hele URL bør ligne this:

    "http://www.example.com/LoaderTest/proxy.php?http://feeds.feedburner.com/flashtuts-summary"

    If du har gjort alt riktig på dette punktet, du bør se på en Activetuts + RSS feed



    Trinn 5: Legge til mer funksjonalitet

    Siden vi ønsker at våre proxy.php fil til returnere mer enn bare tekst, må vi legge til det. For å returnere riktig header typen, vil vi gjøre det proxy hente filendelsen informasjon ved hjelp av pathinfo () funksjon og at lik en variabel som heter $ ext. Etter det kan vi evaluere filtype og bestemme den riktige banen av handlingen for denne filtypen. For evalueringen, vil vi ansette en bryter uttalelse.

    Vi ønsker bare å returnere bilder og tekst, så jeg har lagt til noen generelle bildetyper til vår bryter uttalelse. I tilfelle av "jpg" filtypen, er første skritt å legge riktig innhold-type attributt knyttet til den type fil. Etter det, er dataene fra filen lest. Den "gif" og "png" tilfeller inneholde identisk funksjonalitet.

    Siden vi ønsker å returnere bildene og
    tekst, må vi jobbe i en sak for å returnere den teksten. Problemet er at teksten som rss feeds, xml, etc. kanskje ikke alltid har en filtype som bildene gjør. Hva om de er dynamisk generert? Hvis vi skulle se etter en konkret filtype, så vi lett kan få det galt når det gjelder dynamisk xml, og det ville ikke returnere info korrekt. Løsningen er bare å dukke vår opprinnelige koden for retur text /xml (i forrige trinn) i standard saken! Siden alt annet vi prøver å returnere vil ha en kjent filtype, hvis ingen filtype blir funnet, så vi kan anta at vi forsøker å returnere en tekst /xml typen
    . ≪? Php $ filename = $ _GET ['url']; $ ext = pathinfo ($ filnavn, PATHINFO_EXTENSION), switch ($ ext) {case "jpg": header ('Content-Type: image /jpeg'); Readfile ($ filnavn); gå i stykker; case "gif": header ('Content-Type: image /gif'); Readfile ($ filnavn); gå i stykker; case "png": header ('Content-Type: image /png'); Readfile ($ filnavn); gå i stykker; Standard: header ('Content-Type: text /xml'); Readfile ($ filnavn); gå i stykker; } >



    Trinn 6: Test Fullført Proxy

    Alright! Sannhetens øyeblikk ... test tid. Du kan prøve å laste inn bildene du vil fra nettet, men vi vil prøve å laste det samme bildet som før, i trinn 1. Her er det formatet gang again:

    http://www.example.com/LoaderTest/proxy.php?url=http://s3.envato.com/files/358820.jpg

    And selvfølgelig, må du erstatte www.example.com med ditt domene. Du bør se følgende resultat:

    Dessuten er noe interessant som du vil legge merke til at du ikke kan vise kilden til denne siden. Som jeg nevnte tidligere, er PHP en server-side skriptspråk, slik at vi ikke kan se det som html. Alt vi ser er dataene som ble lest opp av PHP-kode. Dette er hvordan vi får innholdet i Flash ... vi laster PHP-siden akkurat som alle andre filer



    Trinn 7: Bringing dataene til Flash

    Nedenfor er en enkel kode eksempel på hvordan å få data inn flash bruker proxy
    import flash.display.Loader.; import flash.net.URLRequest; import flash.events.Event; import flash.system.LoaderContext; Var loader: Loader; Var req: URLRequest; Var proxy: String = "http://www.YOUR-WEBSITE-HERE.COM/LoaderTest/proxy.php?url="; req = new URLRequest (proxy + "http://s3.envato.com/files/358820.jpg"); loader = new Loader (); loader.contentLoaderInfo.addEventListener (Event.COMPLETE, loadComplete); loader.load (req, ny LoaderContext (true)); funksjon loadComplete (e: Hendelses): void Var img: Bitmap = new Bitmap (); img = loader.content som Bitmap; img.smoothing = true; addChild (img); }



    Trinn 8: Noen Merknader

    Selv om det er mulig å laste inn bilder fra eksterne domener uten bruk av en proxy, er det når du prøver å få direkte tilgang som lastet innhold i flash som du vil få sikkerhet sandkasse feil. Jeg har sett Flash apps som bare legger lasteren til scenen, og det fungerer; men hvis du ikke har tillatelse til å få tilgang til fildata, mister du en rekke alternativer for å manipulere den.

    Hvis du vil ha total kontroll over innholdet du laster inn Flash fra eksterne kilder (som ikke har en åpen tvers av domener policy fil), må du bruke en form for proxy. Selv noe som søker utjevning til en ladd bilde krever tilgang til lasteren innhold.



    Konklusjon

    Så det er alt som skal til! Jeg håper dette hjelper mye du unngå mange hodepine i fremtiden! Takk for visning!



    Forslag til Reading

    Quick Tips: Bruk Google App Engine som en proxy-server

    Quick Tips: A Guide to Cross domenepolicy filer Anmeldelser