Click here to load reader

Dynamische Webseiten mit Flash und PHP

Embed Size (px)

Citation preview

  • JOSCHA FETHDYNAMISCHE WEBSEITEN

    MIT FLASH UND PHP

    http://www.pearsoned.dehttp://www.mut.de/main/main.asp?page=bookdetails&ISBN=3827262852

  • Die Deutsche Bibliothek CIP-Einheitsaufnahme

    Ein Titeldatensatz fr diese Publikation ist beiDer Deutschen Bibliothek erhltlich.

    Die Informationen in diesem Produkt werden ohne Rcksicht auf einen eventuellen Patentschutz verffentlicht. Warennamen werden ohne Gewhrleistung der freien Verwendbarkeit benutzt.Bei der Zusammenstellung von Texten und Abbildungen wurde mit grter Sorgfalt vorgegangen.Trotzdem knnen Fehler nicht ausgeschlossen werden.Verlag, Herausgeber und Autoren knnen fr fehlerhafte Angaben und deren Folgen weder einejuristische Verantwortung noch irgendeine Haftung bernehmen. Fr Verbesserungsvorschlge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar.

    Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien.Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulssig.

    Fast alle Hardware- und Softwarebezeichnungen, die in diesem Buch erwhnt werden, sind gleichzeitigeingetragene Warenzeichen oder sollten als solche betrachtet werden.

    Umwelthinweis:Dieses Buch wurde auf chlorfrei gebleichtem Papier gedruckt.Die Einschrumpffolie zum Schutz vor Verschmutzung ist ausumweltvertrglichem und recyclingfhigem PE-Material.

    10 9 8 7 6 5 4 3 2 105 04 03 02

    ISBN 3-8272-6285-2

    2002 by Markt+Technik Verlag,ein Imprint der Pearson Education Deutschland GmbHMartin-Kollar-Strae 10-12, D-81829 Mnchen/GermanyAlle Rechte vorbehalten

    Einbandgestaltung: Dominik Schech, Dresden (www.schech.net) Lektorat: Boris Karnikowski, [email protected]: Christian Wenz, MnchenKorrektorat: Friederike Daenecke, ZlpichHerstellung: Monika Weiher, [email protected]: Gregor Kopietz, [email protected]: someTimes GmbH, MnchenDruck und Verarbeitung: fgb, freiburger graphische betriebe, www.fgb.dePrinted in Germany

  • INHALTSVERZEICHNIS

    1 Einleitung ............................................................................................................................. 9

    1.1 ber den Autor .......................................................................................................... 10

    1.2 ber dieses Buch ........................................................................................................ 10 1.2.1 Danksagungen .............................................................................................................. 11 1.2.2 Formales ........................................................................................................................ 12

    2 Grundlegendes zu PHP ...................................................................................................... 13

    2.1 ber PHP .................................................................................................................... 14

    2.2 Bezugsquellen fr PHP ............................................................................................. 15

    2.3 Installation von PHP .................................................................................................. 15

    2.4 Einsatz der Skripte aus diesem Buch ...................................................................... 16

    3 Dynamische Inhalte ............................................................................................................ 17

    3.1 Variablen von PHP in Flash laden ........................................................................... 18 3.1.1 Schema der bergabe ................................................................................................... 18 3.1.2 Funktionen fr das Laden ............................................................................................. 18 3.1.3 Korrekte Formatierung ................................................................................................. 20 3.1.4 Arrays von PHP nach Flash bergeben ........................................................................ 28 3.1.5 Variablen innerhalb des - und -Tags an Flash bergeben ........... 35 3.1.6 Caching-Verhalten ........................................................................................................ 37 3.1.7 Beispiel: IP-bergabe an Flash ...................................................................................... 41 3.1.8 Umgang mit Verzgerungen ......................................................................................... 43

    3.2 Variablen von Flash an PHP bergeben ................................................................. 50 3.2.1 Schema der bergabe ................................................................................................... 51 3.2.2 Funktionen zur bergabe ............................................................................................. 51 3.2.3 Verschiedene bergabearten/Methoden ...................................................................... 52 3.2.4 Auswahl der zu sendenden Variablen .......................................................................... 54 3.2.5 Arrays ........................................................................................................................... 573.2.6 Verarbeitung bergebener Daten in PHP ...................................................................... 65 3.2.7 Beispiel: bergabe und Manipulation eines Strings ..................................................... 69

    3.3 Beispiel: Ein Feedback-Formular ............................................................................. 71

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • 4 PHP, MySQL und Flash ....................................................................................................... 75

    4.1 Interaktionsschema .................................................................................................... 76

    4.2 Die Klasse swiffSQL .................................................................................................. 77 4.2.1 Wichtige Hinweise ........................................................................................................ 79 4.2.2 Funktionsbersicht ....................................................................................................... 79 4.2.3 Umgang mit der Klasse swiffSQL ................................................................................. 84 4.2.4 Beispiel: Daten laden (Variablen) .................................................................................. 84 4.2.5 Beispiel: Daten laden/einfgen (XML) ......................................................................... 89

    5 Umgang mit Flash und PHP ............................................................................................ 99

    5.1 Scripts von anderen Servern ausfhren/laden ................................................... 100 5.1.1 Proxy-Scripting ........................................................................................................... 100 5.1.2 DNS-Aliasing .............................................................................................................. 100

    5.2 SSL mit Flash ............................................................................................................ 101

    5.3 Beispiel: Passwortgeschtzter Bereich in Flash ................................................... 102

    5.4 Beispiel: Sessions mit Flash und PHP ................................................................... 107

    5.5 Beispiel: Besucherzhler mit PHP und Flash ....................................................... 120

    5.6 Beispiel: automatische Sprachauswahl mit Hilfe von PHP ............................... 128

    6 Cookies mit Flash und PHP ............................................................................................ 133

    6.1 Beispiel: Cookies setzen/lschen .......................................................................... 134

    6.2 Wichtiges bei Verwendung von Cookies .............................................................. 144

    6.3 Sicherheitsaspekte .................................................................................................... 145

    7 XML mit Flash und PHP ................................................................................................... 147

    7.1 Ein- und Ausgabe von Daten ................................................................................. 148 7.1.1 Funktionen .................................................................................................................. 1487.1.2 Events ......................................................................................................................... 151 7.1.3 Eigenschaften .............................................................................................................. 152

    7.2 Beispiel: Daten von PHP nach Flash bergeben .................................................. 154

    7.3 Beispiel: Daten von Flash nach PHP bergeben .................................................. 160

    6 Inhaltsverzeichnis

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • 8 Serverseitige Erzeugung von Flash-Inhalten ............................................................ 163

    8.1 ... mit Ming und PHP ............................................................................................... 164 8.1.1 Einbindung des Ming-Moduls .................................................................................... 164 8.1.2 Wichtige Informationen zu Ming ................................................................................ 165 8.1.3 Beispiel: Leeres SWF erzeugen .................................................................................... 166 8.1.4 Beispiel: Konvertierung eines JPEGs in ein SWF ........................................................ 168 8.1.5 Beispiel: Darstellung von Text ..................................................................................... 173

    8.2 ... mit Swift-Generator und PHP ............................................................................ 177 8.2.1 Voraussetzungen ......................................................................................................... 177 8.2.2 Aufbau eines Flash-Films ............................................................................................ 177 8.2.3 Erstellen von SWT-Dateien ......................................................................................... 178 8.2.4 Dumps von SWT-Dateien erstellen ............................................................................. 179 8.2.5 Der swiPHP-Wrapper ................................................................................................. 180 8.2.6 Funktionsbersicht ..................................................................................................... 181 8.2.7 Beispiel: Ersetzen eines Bildes durch ein anderes ....................................................... 196 8.2.8 Beispiel: Ersetzen von Text und ActionScript .............................................................. 198 8.2.9 Beispiel: Anwendung aller Funktionen ....................................................................... 201

    8.3 mit der JPG2SWF-Klasse .................................................................................... 203 8.3.1 Funktionsbersicht ..................................................................................................... 203 8.3.2 Restriktionen ............................................................................................................... 205 8.3.3 Beispiel ........................................................................................................................ 205

    8.4 Weitere Alternativen (libswf) ................................................................................. 207

    9 Flash MX ............................................................................................................................ 209

    9.1 Neue Funktionen zum Datenaustausch ............................................................... 210 9.1.1 Funktionsbersicht ..................................................................................................... 210 9.1.2 Events ......................................................................................................................... 220 9.1.3 Eigenschaften .............................................................................................................. 221

    10 flash.inc.php ...................................................................................................................... 223 10.1.1 Funktionsbersicht ..................................................................................................... 224

    A Anhang ................................................................................................................................. 233

    A.1 Boni ............................................................................................................................ 234 A.1.1 flaLittleShop (Onlineshop) .................................................................................................... 234 A.1.2 swFrog (Multiplayer-Applikation) ...................................................................................... 236 A.1.3 flashStats Statistik in Flash ................................................................................................. 237 A.1.4 fdb flash database ................................................................................................................ 237

    Inhaltsverzeichnis 7

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • A.1.5 SWF2PNG Gemaltes speichern ......................................................................................... 238 A.1.6 FlaWRITEonline ..................................................................................................................... 238

    A.2 Ressourcen ................................................................................................................ 239 A.2.1 PHP ........................................................................................................................................... 239 A.2.2 Webserver ................................................................................................................................ 239 A.2.3 MySQL ..................................................................................................................................... 239 A.2.4 Sonstiges .................................................................................................................................. 240

    A.3 PHP-Entwicklungsumgebungen ........................................................................... 241 A.3.1 Maguma PHP4EE Studio light ............................................................................................. 241 A.3.2 PHP Coder ............................................................................................................................... 242 A.3.3 PHP Edit .................................................................................................................................. 242

    Index ..................................................................................................................................... 245

    8 Inhaltsverzeichnis

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    KAPITEL 1EINLEITUNG

    Crescit enim cum amplitudine rerum vis ingenii.(Denn mit der Gre der Aufgaben wchst die Kraft des Geistes)

    PUBLIUS CORNELIUS TACITUS

  • 1.1 ber den AutorJoscha Falco Feth ist Programmierer und entwickelt Anwendungen und dynamischeInternetseiten im eigenen Unternehmen. Zu seinem Sprachrepertoire gehren hauptsch-lich PHP, SQL, Flash ActionScript, C/C++, Delphi und Perl.

    1998 entdeckte Joscha die faszinierenden Mglichkeiten von Macromedias vektororientier-tem Flash und dessen interne Programmiersprache ActionScript. Im Zusammenspiel mitserverseitigen Scriptsprachen war damit im Internet mglich, was sonst nur mit aufwndigprogrammierten Applikationen realisiert werden konnte.

    1999 entwickelte Joscha Feth eine Flash-Seite, auf der dynamische Texteffekte generiert undim Flash-(SWF-)Format erstellt werden konnten. Die Nachfrage fr diese Anwendung warso gro, dass er zusammen mit Wildform Inc. in Los Angeles eine eigenstndige An-wendung fr Windows entwickelte. Das Programm SWfX wurde bis heute schon einigetausend Mal verkauft und ist mittlerweile auch fr Macintosh verfgbar (www.wildform.com).

    Anfang 2000 erffnete Joscha Feth das Flash-Internetportal www.flashtool.de. Er bietetdort von ihm entwickelte Zusatz-Tools an, welche die Online- und Offlinefunktionalittvon Flash erheblich steigern. Die Seite ist ein groer Erfolg und hat circa 15.000 Besucherpro Monat.

    Durch die Entwicklung eines auf Flash basierten Strategiespiels wurde Joscha Hauptge-winner des Software-Wettbewerbs 2000 von e-SAP und Sunshine Live. Ein sechswchigesIntensivtraining bei SAP LABS FRANCE in Sophia-Antipolis, Frankreich, folgte.

    Noch im selben Jahr grndete Joscha Feth mit Jochen Schimmelpfennig und DominikSchech www.e-motionshop.com. Im Team wird ein Flash-PHP-Internet-Shopsystem mitanspruchsvoller Grafik, komfortablem Administrationsbereich und Contentmanagemententwickelt (FLASH:BAG).

    Im Sommer 2001 entwickelte Joscha Feth bei Wildform, Inc., in Los Angeles, USA eine kom-plexe PHP-Flash-Video-Datenbank (Wildform Video Library). Die Videosequenzen sindfr die Vorschau in Flash mit dem Programm Flix kodiert worden.

    Seit 2000 hlt Joscha Feth regelmig Vortrge auf der Deutschen Flash-Konferenz und ver-anstaltet Schulungen fr Flash.

    Jess Mrtterer, www.de-de.de

    1.2 ber dieses BuchFlash ist ein vektorbasiertes Grafikformat, das aufgrund starker Kompression und mathe-matischer anstatt grafischer Beschreibung von Kurven, Linien etc. auch bei viel Inhalt nursehr wenig Speicherplatz bentigt, und eignet sich ideal fr das Internet mit seiner be-

    10 Kapitel 1

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • schrnkten Bandbreite. Von Animationen ber Comics und interaktive Spiele bis hin zuOnlineshops lsst sich mit Flash alles realisieren, was im Internet bentigt wird.

    PHP ist eine serverseitige Sprache, deren verborgene Strken dem Betrachter einer Web-seite meistens entgehen, die jedoch nicht weniger wichtig als der sichtbare Teil einer Web-seite ist. Ob es um Datenbankzugriffe oder komplexe Dateioperationen geht, PHP ist vorallem durch seine komfortable Syntax und sein Funktionsrepertoire eine mchtige Sprachefr die serverseitige Programmierung.

    Flash und PHP sind zwei vollkommen unterschiedliche Sprachen. Verbunden und sich ge-genseitig ergnzend schaffen sie Raum fr neue, ungeahnte Mglichkeiten. Ob man nun ei-nen einfachen Besucherzhler bentigt (siehe Kapitel 5.5), ein Feedback-Formular (sieheKapitel 3.3) , zeitgenaue Statistiken (siehe Kapitel 11.3) oder einen interaktiven Onlineshop(siehe Anhang A.1) in Flash bleibt kein Wunsch offen. So einfach dies klingt, so schwierigist es, dies in der Praxis umzusetzen.

    Dieses Buch soll Ihnen einen Eindruck davon vermitteln, was mit Flash und PHP allesmglich ist. Anhand von Beispielen werden die Vorgehensweise bei hufigen Problemenerlutert und Lsungsmglichkeiten aufgezeigt. Mit Hilfe dieses Buches sollte es Ihnenmglich sein, alle Hrden beim Umgang mit Flash und PHP zu berwinden.

    Ich werde so ausfhrlich wie mglich auf vorhandenen Code eingehen und zustzlicheErklrungen geben. Allerdings sind beide Sprachen, sowohl PHP wie auch Flash, keinesehr kleinen Sprachen, und es ist unmglich, im Rahmen dieses Buches auf alle Sprach-konstrukte im Einzelnen einzugehen. Deshalb sind zum gnzlichen Verstndnis diesesBuches Grundkenntnisse von Flash und PHP erforderlich.

    1.2.1 Danksagungen

    An dieser Stelle mchte ich denjenigen Personen danken, die mir beim Schreiben diesesBuches zur Seite standen:

    Ich danke Dominik Schech (www.schech.net) fr den Entwurf des Covers,

    Jess Mrtterer (www.de-de.de), der mir immer mit Rat und Tat zur Seite stand,

    Jochen Schimmelpfennig (www.onlinegeneration.com), der mir PHP zeigte,

    meinen Eltern Helmut Feth und Claudia Hfele-Feth fr die mir gegebene Unterstt-zung,

    meiner Freundin Valerie Grass fr ihre Geduld und Ausdauer

    und (in alphabetischer Reihenfolge) Sbastien Hordeaux, Christian Lamine, Johannes P.,pi, Tobias Ratschiller, Marco Stix, Bastian Waidelich und Christian Wenz.

    Einleitung 11

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • 1.2.2 Formales

    Kommentare:

    Im Folgenden sind oftmals Teile von Code aus Flash und aus PHP zu sehen. Fr diesegilt im Allgemeinen:

    //~ einzeiliger Autorenkommentar

    /*~ mehrzeiligerAutorenkommentar */

    ActionScript-Code in Flash wird so eingeleitet:

    //~ ActionScript

    PHP-Code wird so eingeleitet:

    Funktionsdefinitionen:

    typ function name(typ parameter1 [, typ parameter2])

    Der Parameter in eckigen Klammern ist ein optionaler Parameter mit einem voreinge-stellten Wert, der bergeben wird, wenn dieser Parameter (oben ist es Parameter 2) nichtangegeben wird.

    Sowohl in Flash als auch in PHP gibt es keine Typunterscheidung von Variablen, wieman sie z.B. aus C/C++ kennt, jedoch zeigt der Typ eines Parameters zumindest an,welches Format der bergebene Parameter haben muss.

    Teilweise sind bei den Funktionsdefinitionen die Original-Signaturen aus dem PHP-Manual bernommen worden. Ich danke an dieser Stelle noch einmal ausdrcklich derPHP Documentation Group, die freundlicherweise die Erlaubnis erteilt hat.

    Farben:

    Alle Konstanten, vordefinierten Variablen, Befehle, Funktionen und reservierten Wrtersind eingefrbt.

    Dieses Symbol verweist auf Daten auf der Buch-CD.

    12 Kapitel 1

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    KAPITEL 2GRUNDLEGENDES ZU PHP

  • 2.1 ber PHPDie Scriptsprache PHP wurde 1994 von Rasmus Lerdorf (www.lerdorf.com) entwickelt. Ernannte seine Sprache PHP (Personal Home Page/Form Interpreter), da er sie fr seine ei-gene Homepage verwendete, um HTML-Formulare auszuwerten. Mittlerweile verbirgtsich hinter der Abkrzung PHP der lange Name PHP Hypertext Preprocessor.

    PHP ist eine serverseitige, plattformunabhngige Scriptsprache und fr alle gngigenPlattformen frei erhltlich. PHP bringt schon von Haus aus eine sehr gute Datenbank-anbindung an die meisten gngigen Datenbanken mit, was den Umgang mit Daten ausDatenbanken extrem erleichtert. Weiterhin ist PHP sehr gut durch Module und Klassen er-weiterbar, die im Internet oftmals frei erhltlich sind. Im Gegensatz zu anderen Script-sprachen wie z.B. Perl ist vor allem die Handhabung von Variablen, die aus Formularenoder anderen externen Quellen (wie z.B. auch Flash) stammen in PHP sehr komfortabel. Esist anders als in Perl mglich, auch ohne CGI.pm oder entsprechende Module auf die ber-gebenen Daten sofort zuzugreifen. Die Syntax von PHP erinnert etwas an die von C und istrelativ leicht erlernbar.

    PHP-Dateien knnen sowohl normalen HTML-Code als auch PHP-Anweisungen enthal-ten.

    Bei einem Abruf eines PHP-Scripts ber den Browser wird zunchst der PHP-Code ausge-fhrt.

    Dem Browser wird anschlieend die vorverarbeitete (daher der Name Preprocessor)Datei, d.h. nur die HTML-Anteile und die Ergebnisse der PHP-Anweisungen, bermit-telt.

    Diese bersetzung findet vollstndig auf der Seite des Servers statt. Die eigentlichen PHP-Anweisungen werden nicht bermittelt.

    Bei Flash ist dies ganz anders. Die in Flash verwendete Sprache ActionScript, hufig mitAS abgekrzt, wird auf der Clientseite ausgefhrt, d.h. smtliche AS-Anweisungen wer-den ebenso wie die anderen Steuerinformationen eines Flash-Filmes innerhalb der SWF-Datei kodiert gespeichert und mit an das Flash-Plugin des Browsers bertragen.

    Das Flash-Plugin ist dann nicht nur fr das Abspielen aller Animationen verantwortlich,sondern auch fr die Interpretation und Ausfhrung der ActionScript-Anweisungen.

    Dadurch ist es in gewissem Mae mglich, dass ein Flash-Film sofort mit AS auf Benutzer-eingaben reagieren kann, ohne erneut Verbindung zum Server aufnehmen zu mssen (z.B. fr interaktive Mens oder Spiele).

    Bei PHP-basierten Anwendungen hingegen muss jedes Mal, wenn Benutzereingaben ver-arbeitet werden sollen, erneut eine Verbindung zum Server aufgebaut werden, d. h. einePHP-Datei ausgefhrt werden.

    14 Kapitel 2

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • Grundlegendes zu PHP 15

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    WAMP und LAMP

    Im Internet finden Sie im Zusammenhang mit PHP oft die AbkrzungenWAMP und LAMP.

    LAMP steht fr die Kombination von: Linux, Apache, MySQL und PHP.

    WAMP steht fr: Windows, Apache, MySQL und PHP.

    Dabei handelt es sich um Konfigurationen. brigens lassen sich auch anderebekannte Webserver wie z.B. der IIS von Microsoft mit einer PHP-Erweite-rung betreiben. Genauso lassen sich andere Datenbanksysteme gut in Kom-bination mit PHP verwenden.

    LAMP und WAMP sind recht hufig verwendete Server-Konfigurationen.

    Smtliche in diesem Buch behandelten Beispiele laufen ohne Probleme inbeiden Umgebungen.

    2.2 Bezugsquellen fr PHPVerschiedene PHP-Distributionen finden Sie auf der CD-ROM im Verzeichnis Software undModule\PHP\.

    Die aktuellen PHP-Distributionen sind unter www.php.net fr verschiedene Plattformenfrei erhltlich.

    Eine Distribution speziell fr Windows inklusive einiger vorkompilierter Module, die inder Distribution von www.php.net nicht enthalten sind (z.B. Ming), ist unter www.php4win.com verfgbar.

    2.3 Installation von PHP Eine Installationsanleitung fr WAMP gibt es unter:

    www.pc-town.de/praxis_wissen/workshops/php_mysql/wamp.php

    oder hier (auch fr andere Betriebssysteme als Windows, z.B. LAMP):

    www.dynamic-webpages.de/07.installation.php

    Ich kann an dieser Stelle leider keine Installationsanleitung fr PHP geben zum einen ausPlatzgrnden, zum anderen, weil ich voraussetze, dass Sie sich als Leser dieses Buches be-reits ein wenig mit PHP auskennen. Sollten Sie aber dennoch Untersttzung bei derInstallation bentigen, schauen Sie im Verzeichnis Software und Module\PHP\Installation

    Exkurs

  • der beiliegenden Buch-CD nach. Hier hat der herausgebende Verlag Markt+Technik dieersten vier Kapitel des Titels Jetzt lerne ich MySQL & PHP (ISBN 3-8272-6202-X) im PDF-Format zur Verfgung gestellt. Diese Kapitel sollten Sie sicher und einfach durch denInstallationsprozess geleiten.

    2.4 Einsatz der Skripte aus diesem BuchSie knnen die Scripts entweder sofort online auf einem Server testen, der PHP untersttzt,oder lokal auf dem eigenen Rechner, der dann den Server darstellt. Um den eigenenRechner zum Server zu machen, mssen Sie einen so genannten Webserver installieren. Mitdiesem Webserver als Basis kann dann PHP installiert werden.

    Ich persnlich empfehle hier Apache (www.apache.org).

    Wenn Sie Ihre Scripts online testen bzw. einsetzen, mssen Sie beachten, dasses auf Servern, bei denen der SAFE MODE von PHP aktiviert ist, einige Ein-schrnkungen gibt. Ob auf Ihrem Server der SAFE MODE aktiviert ist, kannIhnen Ihr ISP bzw. dessen Administrator mitteilen.

    Damit Sie als Leser dieses Buches meine und Ihre Programmcodes von derlei Einschrn-kungen unbeeintrchtigt austesten knnen, stellt Ihnen der Klner Internet-Provider HostEurope (www.host-europe.de) in Kooperation mit dem herausgebenden Verlag Markt+Technik von Mai 2002 an fr die Dauer eines Jahres einen kostenlosen Webspace-Accountzur Verfgung. Um dieses Angebot nutzen zu knnen, mssen Sie sich als Leser diesesBuches registrieren lassen. Fllen Sie hierzu das Formular unter buch.flashtool.de aus ich richte Ihnen darauf hin Ihren Account ein und maile Ihnen Benutzerkennung, Passwortsowie die Richtlinien zur Nutzung des Angebots zu. Mein herzliches Dankeschn an HostEurope fr die Bereitstellung des Dedicated Servers!

    16 Kapitel 2

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

  • DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    KAPITEL 3DYNAMISCHE INHALTE

  • In diesem Kapitel zeige ich Ihnen die grundlegenden Mglichkeiten zum Austausch vonDaten zwischen Flash und PHP. Zu jedem Beispiel finden Sie jeweils auch eine kleineFunktionsreferenz.

    3.1 Variablen von PHP in Flash ladenIn diesem Kapitel wird gezeigt, wie sich Daten aus PHP in Flash-Filme bertragen (ein-lesen) und dort auswerten bzw. darstellen lassen.

    3.1.1 Schema der bergabe

    Abbildung 3.1: Schema der bergabe von Daten aus PHP an Flash. Mit den Befehlen loadVariables() oderloadVariablesNum()wird aus dem Flash-Film das Script aufgerufen und werden die vom Script ausgegebenenDaten empfangen. Auf die Flash-kompatible Formatierung von Daten wird in Kapitel 3.1.3 eingegangen.

    3.1.2 Funktionen fr das Laden

    Um Daten von PHP nach Flash zu laden, werden in Flash einige Funktionen bentigt.Diese werden in diesem Abschnitt vorgestellt. Auerdem werden einige hufige Fehlerbeim Umgang mit diesen Funktionen angesprochen.

    Die nachfolgend beschriebene Funktion loadVariables() und loadVariab-lesNum() sind asynchrone Prozesse. Das bedeutet, dass bei ihrem Aufruf dieTimeline keinesfalls anhlt und auf den Abschluss des Befehls wartet, son-dern dass die Timeline sich ohne anzuhalten weiterbewegt. Es kann alsonicht davon ausgegangen werden, dass im Schlsselbild, das auf den Befehlfolgt, die Daten bereits verfgbar sind. Die Verfgbarkeit von Daten musszuerst berprft werden. Mehr dazu in Kapitel 3.1.8.

    18 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

  • loadVariablesNum()

    Beschreibung: Mit loadVariablesNum() knnen Daten aus externen Datenquellen aufEbenen im SWF geladen werden.

    Definition: void loadVariablesNum (string url, string position [, int methode]);

    Parameter: string urlEin absoluter oder relativer URL zu dem Script, das aufgerufen werden soll.

    URL URL steht fr Uniform Resource Locator und ist die Abkrzungfr eine Internetadresse.

    Ob der URL nun ein PHP-Script, ein ASP-Script, ein Perl-Scriptoder eine einfache Textdatei ist, macht keinen Unterschied, so-lange die Daten korrekt formatiert sind. Wie eine korrekte For-matierung aussieht, wird in Kapitel 3.1.3 erlutert.

    Seit Version 4.0.1.2 von Flash muss der angegebene URL aufdemselben Host sein wie das SWF, von dem aus der Aufruferfolgt (siehe Kapitel 5.1).

    SWF SWF ist die Abkrzung fr ShockWave Flash. SWF wird aber meis-tens dazu verwendet, einen mit Flash erstellten Film zu benennen, da dieDateiendung .swf ist.

    string positionEine Ebene in unserem SWF.

    int methodeDieses Argument ist optional. Es gibt an, wie die in Flash vorhandenenVariablen an den URL gesendet werden. Mgliche Werte sind POST oder GET.Auf die verschiedenen Methoden wird in Kapitel 3.2.3 nher eingegangen.

    Anwendung: Um die Ausgabe eines Scripts (hier: meinScript.php) auf Ebene 0 unseresFilms zu laden, muss der Aufruf folgendermaen aussehen:

    //~ ActionScript

    loadVariablesNum("meinScript.php", 0);

    Andere Betriebssysteme als Windows (z.B. Linux) unterschei-den zwischen Gro- und Kleinschreibung. Deshalb ist es wich-tig, dass die Schreibweise des Scriptnamens bei einem Aufrufaus Flash mit dem wirklichen Namen der Datei berein-stimmt.

    Dynamische Inhalte 19

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

    HINWEIS

  • loadVariables()

    Beschreibung: Mit loadVariables() knnen Daten aus externen Quellen auf Ebenen oderin Filmsequenzen geladen werden.

    Definition: void loadVariables (string url , string position [, int methode]);

    Parameter: string urlEin absoluter oder relativer URL zu dem Script, das aufgerufen werden soll.

    string positionDie Position ist hier ein Ziel innerhalb des SWF, beispielsweise eineFilmsequenz oder eine Ebene.

    int methodeDieses Argument ist optional. Es gibt an, wie die in Flash vorhandenenVariablen an den URL gesendet werden. Mgliche Werte sind POST oder GET.Auf die verschiedenen Methoden wird in Kapitel 3.2.3 nher eingegangen.

    Anwendung: Um die Ausgabe eines Scripts (hier: meinScript.php) in eine Filmsequenzauf unserer Hauptzeitleiste zu laden, muss der Aufruf des SWF folgender-maen aussehen:

    //~ ActionScriptloadVariables("meinScript.php", "_root.movieClip");

    oder

    //~ ActionScript_root.movieClip.loadVariables("meinScript.php");

    3.1.3 Korrekte Formatierung

    Damit Flash die Ausgabe eines Scripts richtig interpretieren kann, mssen die Daten einebestimmte Form haben (application/x-www-form-urlencoded):

    variablenName=variablenWert

    Bei mehreren Variablen sieht dies so aus:

    variable1=wert1&variable2=wert2,...,&variableN=wertN

    Als Trennzeichen zwischen den einzelnen Variablen dient das &-Zeichen.

    20 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • Der Inhalt des PHP-Scripts (hier: meinScript.php) ist folgender:

    echo() gibt einen String auf der Standardausgabe (Bildschirm bzw. Brow-ser) aus.

    In Flash ldt folgender Code das PHP-Script mit oben stehendem Inhalt:

    //~ ActionScriptloadVariablesNum("meinScript.php", 0);

    Wenn die Daten geladen wurden, dann sind sie an der Stelle verfgbar, diebei den Befehlen als Ziel angegeben wurde. Das heit, die Variablen varia-ble1 und variable2 sind jetzt auf der Hauptzeitleiste verfgbar und knnenbeispielsweise als

    _root.variable1_root.variable2

    angesprochen oder in einem Textfeld auf der Hauptzeitleiste mit demNamen variable1 oder variable2 angezeigt werden.

    Einleitung und Schluss der Daten

    Flash ldt Daten normalerweise korrekt, wenn man bei der ersten Variable das &-Zeichenweglsst. Beispielsweise so:

    variable1=wert&variable2=wert

    Sollte das Script jedoch davor etwas anderes ausgeben (beispielsweise eine Warnung o. .), dann wird der erste Variablenname durch die Ausgabe der Warnung verflscht.

    Wenn vor der Ausgabe der eigentlichen Daten ungewollt eine Warnung aus-gegeben wird, z.B. so:

    UNGEWOLLTE_WARNUNGvariable1=wert&variable2=wert

    Dann wird in diesem Fall die erste Variable nicht mehr

    Variable variable1 = "wert"

    lauten, sondern:

    Variable UNGEWOLLTE_WARNUNGvariable1 = "wert"

    Dieses Problem kann man umgehen, indem man vor den Namen der erstenVariable auch ein &-Zeichen setzt; folglich so:

    UNGEWOLLTE_WARNUNG&variable1=wert&variable2=wert

    Dynamische Inhalte 21

    BEISPIEL

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    BEISPIEL

  • Es werden nun z.B. bei der Ausgabe eines Fehlers zwar trotzdem noch mehr (unntige)Daten geladen, jedoch wird an den bergebenen Variablen nichts verflscht. Leiten Sie IhreDaten also immer mit einem &-Zeichen ein.

    Dasselbe gilt auch fr das Ende der Daten. Wenn eine Warnung o. . am Ende ausgegebenwird, dann wird diese an den Wert der letzten Variable angehngt.

    Die Ausgabe eines Scripts enthlt nach der Ausgabe der Daten eine unge-wollte Warnung:

    &variable1=wert&variable2=wertUNGEWOLLTE_WARNUNG

    Wenn dies in Flash geladen wird, dann ist der Wert der Variable variable2nicht mehr

    Variable variable2 = "wert"

    sondern:

    Variable variable2 = "wertUNGEWOLLTE_WARNUNG"

    Es ist also sinnvoll, auch an das Ende der Daten ein &-Zeichen anzuhngen.

    Etwa so:

    &variable1=wert&variable2=wert&UNGEWOLLTE_WARNUNG

    Die Warnung wird zwar trotzdem noch geladen, allerdings wird sie nicht an den Wert derletzten Variable angehngt. Beenden Sie Ihre Datenausgabe also ebenfalls immer mit einem&-Zeichen.

    Bei Verwendung eines &-Zeichens am Ende wird in Flash eine berflssigeVariable mit leerem Namen geladen (wenn danach nichts mehr kommt), dadas &-Zeichen ja normalerweise dafr verwendet wird, eine neue Variableeinzuleiten. Wenn Sie diese Variable strt, so knnen Sie sie beruhigt l-schen.

    Auf diese Variable knnen Sie mit \r\n oder \n zugreifen (je nachdem wie Sie diese ausPHP ausgeben). Entsprechend lautet der Befehl, um diese Variable zu entfernen:

    delete \r\n;

    oder:

    delete \n;

    Dies erzeugt in der Flash-Entwicklungsumgebung eine Fehlermeldung; die Variable wirdaber korrekt entfernt.

    22 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    BEISPIEL

    HINWEIS

  • Strukturierte Datenausgabe

    Dasselbe gilt auch, wenn man seine Ausgabe strukturieren mchte, um einen besserenberblick zu bekommen.

    Falls Sie die Ausgabe etwa so schreiben wollen

    &preis1=25&preis2=40&preis3=80

    dann werden Sie nach jedem Wert noch die Zeichen \r\n finden, so genannte Whitespaces(unter Whitespaces werden alle nicht sichtbaren Zeichen wie z.B. Space, Tab, Newline undCarriage Return verstanden). Um dies zu umgehen, mssen Sie hinter jedem Wert ein &-Zeichen anbringen:

    &preis1=25&&preis2=40&&preis3=80&

    Solange die Werte nicht angezeigt werden, bemerkt man Whitespaces nicht. Es scheint ei-nerlei zu sein, ob sie da sind oder nicht will man jedoch mit den Werten rechnen, wie z.B.mit den Preisen im oberen Beispiel, so muss man sichergehen, dass keine Whitespaces vor-handen sind, sonst schlgt die Rechenoperation fehl.

    Rechnen mit eingelesenen Werten

    Noch eine weitere Besonderheit muss man beachten, wenn man mit eingelesenen Wertenrechnen mchte: Im englischsprachigen Raum ist bei der Angabe von Preisen der Punktdas quivalent des Kommas im deutschsprachigen Raum.

    Englische Angabe: 9.99 Deutsche Angabe: 9,99

    Wenn Sie nun Preise (z.B. bei einem Onlineshop) im deutschen Format bergeben, dannknnen Sie mit diesen nicht rechnen, da sie nicht als Zahl, sondern als String erkannt wer-den. Wollen Sie mit eingelesenen Zahlen rechnen, muss die Ausgabe folgendermaen aus-sehen:

    &preis1=9.99&preis2=18.07&

    Nicht:

    &preis1=9,99&preis2=18,07&

    Dynamische Inhalte 23

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • Leerzeichen

    Leerzeichen zwischen dem Variablennamen und dem Gleichheitszeichen werden an denVariablennamen angehngt.

    Die Ausgabe eines PHP-Scripts ist folgende:

    &variable1 =wert

    Sie sehen, dass zwischen variable1 und dem Gleichheitszeichen Leerzei-chen sind. Diese werden von Flash nicht etwa ignoriert, sondern an denVariablennamen (in diesem Fall variable1) angehngt.

    Der Name ist also nicht mehr:

    Variable variable1 = "wert"

    sondern:

    Variable variable1 = "wert"

    Sie sollten demnach keinen ungewollten Abstand setzen.

    bergabe von booleschen Werten

    Bei der bergabe von booleschen Werten, also true (wahr) oder false (falsch) mssen Siebeachten, dass bei folgender Schreibweise:

    &variable1=true&variable2=false&

    die Werte von Flash als String angesehen werden. Um zu berprfen, ob diese Variablendie richtigen Werte haben, mssten Sie folgenden Code benutzen:

    //~ ActionScriptif (variable1 == "true" && variable2 == "false") {

    //~ Bedingung erfllt} //~ end if

    Hier wird berprft, ob der Wert der variable1 gleich dem String true ist und ob derWert der variable2 gleich dem String false ist. Sie sehen, dass die Werte in diesem FalleStrings sind, keine booleschen Werte.

    Die richtige Formatierung, um einen Vergleich mit booleschen Werten zuzulassen, ist:

    &variable1=1&variable2=0&

    24 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    BEISPIEL

  • Dieses Format erzielt das gewnschte Ergebnis:

    //~ ActionScript//~ prfen, ob variable1 wahr und variable2 falsch istif (variable1 && !variable2) {

    //~ Bedingung erfllt} //~ end if

    Diese Abfrage prft, ob variable1 true (wahr) und variable2 false (falsch) ist.

    URL-Kodierung von Werten

    Dieses Beispiel befindet sich im Ordner Applikationen\urlEncode\ auf der CD-ROM.

    Da bei der bergabe von Daten nur ein bestimmter Zeichensatz erlaubt ist, mssen alleZeichen, die nicht alphanumerisch sind (bis auf -_. ), in % gefolgt von dem ASCII-Code desZeichens umgewandelt werden. Dies ist vor allem bei den &-Zeichen wichtig, die alsTrennzeichen fr Variablen fungieren. So fhrt

    &menue=Fish & Chips&

    nicht zu einer Variable menue mit dem Wert Fish & Chips innerhalb von Flash, sondern zuzwei Variablen: zu einer mit dem Namen menue und dem Wert Fish und zu einer mit demNamen Chips und einem leeren Wert:

    Variable menue = "Fish "Variable Chips = ""

    Sie sehen, dass das zweite &-Zeichen ungewollt eine neue Variable einleitet, obwohl es ei-gentlich ein Teil vom Wert der Variable menue sein sollte.

    Um das gewnschte Ergebnis zu erzielen, ist folgende Formatierung korrekt:

    &menue=Fish+%26+Chips&

    Dies ergibt nach dem Laden in Flash folgende Variable:

    Variable menue = "Fish & Chips"

    Die Funktion urlencode()

    Damit man nicht alles von Hand kodieren muss, gibt es in PHP die Funktionurlencode(), welche die Daten in das korrekte Format bringt.

    string urlencode (string str)string str

    Das Argument ist der String, der kodiert werden soll. Zurckgegeben wirdein String im kodierten (richtigen) Format.

    Dynamische Inhalte 25

    Tutorial

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • Beispiel:

    Der Code

    gibt auf dem Bildschirm

    &menue=Fish+%26+Chips&

    aus, was von Flash korrekt interpretiert wird.

    Beim Kodieren muss man unbedingt darauf achten, die als Trennzeichenfungierenden &-Zeichen nicht mit zu kodieren, da man sonst einen einzigenriesigen String bekommt, der von Flash nicht richtig verstanden wird.

    Beispiel:

    Der Code

    ergibt die Ausgabe:

    %26menue1%3DFish+%26+Chips%26menue2%3DBeef%26

    Sie sehen, dass jetzt zwar die Zeichen URL-kodiert wurden, die man kodie-ren wollte, aber auch alle &-Zeichen, die zum Einleiten der Variablen ben-tigt werden, und alle Gleichheitszeichen ebenfalls. Diese Ausgabe kann vonFlash nicht mehr korrekt interpretiert werden. Kodieren Sie also, wie obenbeschrieben, immer nur den Wert einer Variablen, nie die gesamten Daten.

    Tabelle 3.1: Wichtige ASCII-Werte von Sonderzeichen

    26 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    Sonderzeichen

    &%#

    Sonderzeichen

    Zeilenumbruch (\n)Leerzeichen

    ASCII-Wert

    %26%25%23%DC%FC%C4

    ASCII-Wert

    %E4%D6%F6%DF%0D%20

  • Die in Tabelle 3.1 stehenden ASCII-Werte von Sonderzeichen erhalten Sie bei der Benut-zung von urlencode() automatisch. Jedoch halte ich es fr sinnvoll, hufig verwendeteZeichen hier anzufhren, damit diese auch ohne PHP (z.B. nur mit Textdateien) eingesetztwerden knnen.

    Bei der Verwendung von Sonderzeichen wie , , , , , und solltendie Zeichen selbst bei einer hufigen Schriftart im Textfeld (in Flash) mit ein-gebunden werden, da sie in den Schriftstzen anderer Lnder oftmals nichtenthalten sind.

    bergabe von relativen Pfadangaben

    Dieses Beispiel befindet sich im Ordner: Beispiele\redoPath\ auf der CD-ROM.

    Wenn man in ein SWF dynamisch andere SWF laden mchte (z.B. weil man ein Bild jedeWoche ndert etc.), dann kann es sein, dass bei der bergabe der Pfade fr die externenSWF ein Pfad dabei ist, der relativ auf ein Verzeichnis ber dem Hauptfilm zeigt.

    Da die Ein- und Ausgabe von Daten in Flash auch immer etwas mit dem Browser zu tunhat, gibt es bei der bergabe von relativen Pfaden weitere, browserbedingte Probleme.Dies liegt daran, dass ja nicht direkt mit dem Flash-Plugin gesurft wird, sondern berUmwege. Die Daten, die vom Server kommen, werden vom Browser angenommen unddann erst an das Flash-Plugin weitergeleitet. Das heit, bei der Kommunikation zwischenBrowser und Plugin knnen Probleme auftreten. Dies ist auch hier der Fall.

    Da diese Probleme sehr selten und sehr sporadisch auftreten, lassen sich an dieser Stellekeine genauen Versionsnummern der Browser nennen. Sicher ist, dass im Netscape 4.xProbleme auftreten knnen. Erfahrungswerte mit dem Netscape 6.x habe ich noch keine.Im Internet Explorer habe ich noch keine bemerkt, aber auch hier sind Fehler nichtgrundstzlich auszuschlieen.

    Im Netscape 4.x bringt folgende Ausgabe bzw. deren Laden in Flash oftmals nicht das ge-wnschte Ergebnis:

    &pfad=../bild.swf&

    Netscape versucht, die Pfadangabe schon vor dem Eintreffen in Flash zu interpretieren.Das bedeutet, dass bei der bergabe von Pfaden zwischen dem Browser (Netscape) unddem Plugin ein Fehler auftritt, da der Pfad nicht mehr korrekt im SWF ankommt. Ich neh-me an, dass Netscape an der entsprechenden Stelle nach dem Ziel sucht, anstatt die Pfad-angabe einfach weiterzugeben.

    Abhilfe schafft hier eine Maskierung. Das heit, man muss die auf die Unterverzeichnissezielenden ../ in eine Zeichenfolge umwandeln, die Netscape nicht als Pfadangabe interpre-tiert. Dies wre beispielsweise so etwas:

    &pfad=**/bild.swf&

    Dynamische Inhalte 27

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

  • Diese Umwandlung muss man dann innerhalb von Flash wieder rckgngig machen. Diefolgende Funktion erledigt das fr uns:

    //~ ActionScript

    function redoPath(myPath, splitChar) {

    //~ Alle splitChar in . umwandelnmyPath = myPath.split(splitChar).join(".");return myPath; //~ Ergebnis zurckgeben

    } //~ end function redoPath

    pfad = redoPath(pfad, "*"); //~ Anwendung der Funktion

    Diese Funktion wandelt einen maskierten Pfad wieder in die richtige Form um. Aus**/bild.swf wird demnach ../bild.swf.

    Sie knnen selbstverstndlich auch jedes andere Zeichen verwenden, um den Pfad zu mas-kieren. Allerdings sollte es ein Zeichen sein, das in der URL selbst nicht vorkommt undauch bei Pfadangaben im Pfad selbst nicht auftreten kann. Bestens geeignet wre etwa *.

    Eine Maskierungsfunktion fr Pfade ist Teil von flash.inc.php (siehe Kapi- tel 10).

    3.1.4 Arrays von PHP nach Flash bergeben

    Arrays lassen mehr Mglichkeiten zur Strukturierung von Daten. Wenn Sie z.B. eine Listebergeben mchten, dann knnen Sie dies selbstverstndlich tun, indem Sie die Variablen-namen mit Zahlen versehen, etwa so:

    &listenwert1=wert&&listenwert2=wert&&listenwert3=wert&

    Allerdings wird dies bei greren Datenmengen erstens relativ unbersichtlich, und zwei-tens ist der Zugriff auf diese Art von Variablen nicht sonderlich komfortabel. Bei Daten, diealle zu einer Gruppe gehren, aber dennoch unterschieden werden mssen, setzt man nor-malerweise Arrays ein.

    Array (deutsch: Reihung) Ein Array ist eine Liste von Elementen (Daten), die in einer,zwei oder mehreren Dimensionen gespeichert werden knnen.

    Im Folgenden werden zwei verschiedene Arten beschrieben, wie man ein Array an Flashbergibt. Eine bergabe eines Arrays ist ursprnglich nicht vorgesehen, daher bilden diebeiden beschriebenen Verfahren nur einen Kompromiss. Jedes der Verfahren hat sowohlNachteile als auch Vorteile.

    Bei beiden Mglichkeiten lassen sich keine mehrdimensionalen Arrays bergeben.

    28 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

  • Erste Mglichkeit: mit Hilfe von join() und split

    Das Prinzip: Das Array in PHP wird zu einem String umgeformt, und dabei werden dieeinzelnen Arrayelemente z.B. durch Kommata getrennt. Dieser String wird dann an Flashbergeben. Dort kann anhand der Trennzeichen wieder ein Array gebildet werden.

    Der Vorteil dieser Methode ist, dass extrem wenige Daten bergeben werden und keineFunktion bentigt wird, welche die Daten (strukturierte Variablen) in eine andere (frFlash verstndliche) Form bringt.

    Nachteile hingegen ergeben sich daraus, dass man keine assoziativen Arrays bergebenkann und dass man hundertprozentig sicher sein muss, dass das benutzte Trennzeichennicht innerhalb der bergebenen Werte auftaucht, da sonst das Array falsch aufgebautwird.

    Ein PHP-Script hat folgenden Inhalt:

    Als Trennzeichen zwischen den Elementen werden Kommata verwendet.

    Der String, der nun ausgegeben wird, sieht so aus:

    &arrayString=Keine Kommata erlaubt, Hier, sind, aber, trotzdem,welche&

    Sie sehen, dass nicht nur zwischen den Elementen Kommata sind, sondern auch im Wertdes zweiten Elements. Wenden Sie auf diesen String in Flash die split()-Funktion an, er-halten Sie nicht ein Array mit zwei Elementen, sondern ein Array mit sechs Elementen.

    Flash kann ja nicht erkennen, welche Kommata Trennzeichen sind und welche zum Wertgehren.

    Sie knnen natrlich in diesem Fall ein anderes Trennzeichen verwenden, z.B. einen *.Wenn dieser jedoch auch in einem Wert des Arrays vorkommt, haben wir wieder das glei-che Resultat.

    Sollten Sie also nicht hundertprozentig sicher gehen knnen, dann ist diese Methode unge-eignet. Verwenden Sie in diesem Fall die zweite Methode!

    Dynamische Inhalte 29

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    BEISPIEL

  • Das Beispiel befindet sich im Ordner Beispiele\arrayStuff\arraySplit\ auf der CD-ROM.

    Wenn Sie sich sicher sind, dass Sie wissen, welche Zeichen in den Werten auftauchen undwelche nicht, dann knnen Sie diese Methode ohne weiteres anwenden.

    Ein PHP-Script hat folgenden Inhalt:

    Als Erstes wird das Array erstellt, das an Flash bergeben werden soll. In unserem Fall eineNamensliste. Dieses Array wird mit join() in eine kommaseparierte Liste umgewandelt.Dieser String wird dann ausgegeben.

    Die Funktion join()

    string join (string glue, array pieces)join() wandelt Arrays in Strings mit Trennzeichen um.

    string glueDas erste Argument ist der String, mit dem die verschiedenen Elemente ge-trennt werden.

    array piecesDas zweite Argument ist das Array, das in einen String umgewandelt wer-den soll.

    Zurckgegeben wird das in einen String umgeformte Array mit dem ge-whlten Trennzeichen zwischen den einzelnen Elementen.

    In diesem Fall wurde als Trennzeichen ein Komma gewhlt, da keiner der Namen einKomma enthlt und so in Flash korrekt gesplittet werden kann. Wenn Sie wissen, welcheZeichen das Array enthlt, und so ein Trennzeichen whlen knnen, das nicht in demArray vorkommt, dann ist diese Methode gut geeignet.

    30 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    Tutorial

    BEISPIEL

  • Wenn Sie jedoch nicht wissen, was fr Zeichen im Array vorkommen, dann sind Fehlervorprogrammiert in diesem Fall wird dringend zur zweiten Methode geraten, oder Siemssen das gewhlte Trennzeichen in den Daten URL-kodieren (siehe Kapitel 3.1.3). Diesgeht allerdings nur, wenn Sie ein Trennzeichen whlen, das nicht alphanumerisch ist (wiez.B. ein Komma).

    Der ausgegebene String sieht nun so aus:

    &arrayString=Joscha,Hans,Peter,Hannes,Markus&

    Das SWF bzw. der Code, um das Array wieder aufzubauen, sieht so aus:

    Abbildung 3.2: Das zu einer kommaseparierten Liste zusammengesetzte Array wird geladen und dann persplit() wieder in ein Array umgeformt. Danach wird der geladene String gelscht.

    Wenn ein Element leer sein soll, so gengt es nicht, dieses Element in PHP einfach nicht zudeklarieren. Etwa so:

    Dynamische Inhalte 31

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • Es fehlen die Elemente 5 und 6 des Arrays $nameArray, denn der String, der nun ausgege-ben wrde, wre folgender:

    &arrayString=Joscha,Hans,Peter,Hannes,Markus,Daniel&

    Sie sehen, dass obwohl zwischen den Elementen 4 und 7 eine Lcke ist, diese im Stringnicht ausgedrckt wird. Dies mag teilweise geschickt sein; wenn man jedoch die Positionender Elemente bei der bergabe bercksichtigen mchte, mssen fehlende Elemente alsleer deklariert werden. Etwa so:

    Ausgegeben wrde dann:

    &arrayString=Joscha,Hans,Peter,Hannes,Markus,,,Daniel&

    Der String unterscheidet sich nur geringfgig von dem anderen, leere Positionen sind beiihm jedoch bercksichtigt.

    Wenn Sie nicht genau wissen, welche Elemente leer sind, dann knnen Sie folgendeFunktion verwenden, um fehlende Elemente in Arrays zu deklarieren:

    32 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • Diese Funktion fgt fehlende Elemente in ein Array ein und sortiert es anhand derSchlssel.

    Diese Funktion inklusive URL-Kodierung und direkter Flash-spezifischerAusgabe ist Teil von flash.inc.php (siehe Kapitel 10).

    Zweite Mglichkeit: Parsen der Arrays

    Dieses Beispiel befindet sich im Ordner Beispiele\arrayStuff\arrayParse\ auf der CD-ROM.

    Parser (engl.: to parse = analysieren) Ein Parser analysiert Daten mit einer bestimmtenStruktur (hier Variablen) und wandelt diese in eine andere Form (hier Arrays) um.

    Das Prinzip: Das Array in PHP wird in die Array-Schreibweise umgeformt (arrayName[key]=value) und dann an Flash bergeben. In Flash wird mit einem Parser das Array ausden einzelnen Strings aufgebaut.

    Der Vorteil dieser Methode ist, dass sich auch assoziative Arrays bergeben lassen unddass nicht darauf geachtet werden muss, welche Zeichen in den Daten vorhanden sind, dakein Trennzeichen bentigt wird. Diese Art der bergabe ist jedoch etwas langsamer alsdie erste, da zum einen mehr Daten (Name des Arrays, Schlssel und eckige Klammern)bergeben werden als bei der ersten Methode und zum anderen das Parsen an sich etwasmehr Zeit bentigt.

    Ein PHP-Script hat folgenden Inhalt:

    Dynamische Inhalte 33

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

    BEISPIEL

  • Zuerst wird ein Array erstellt, das nicht nur numerische, sondern auch nicht-numerischeSchlssel enthlt: also ein assoziatives Array. Dieses Array wird dann durchlaufen, und dieeinzelnen Elemente werden in der Form Arrayname[key]=value ausgegeben.

    Diese Funktion inklusive URL-Kodierung und direkter Flash-spezifischerAusgabe ist Teil von flash.inc.php (siehe Kapitel 10).

    Der ausgegebene String ist wre in diesem Fall dann folgender:

    &nameArray[0]=Joscha&&nameArray[1]=Hans&&nameArray[2]=Peter&&nameArray[3]=Hannes&&nameArray[4]=Markus&&nameArray[7]=Daniel&&nameArray[key]=value&

    Flash kann mit diesen Daten direkt noch nichts anfangen, da sie als normale Variablen in-terpretiert werden. Die Daten sind also im Flash-Film vorhanden, jedoch lassen sie sich nurals Variablen und nicht als Array ansprechen. Wir mssen die Daten also noch in richtigeArrays umformen. Die dazu notwendigen Funktionen bzw. Prototypen sind relativ kom-plex und werden an dieser Stelle nicht nher behandelt. Sie sind auf der CD-ROM beigelegtund knnen selbstverstndlich angepasst und verndert werden.

    Uns interessiert an dieser Stelle nur ihre Benutzung. Wenn man also die Daten geladen hat,dann muss man eine Funktion ausfhren. Ihr Name ist buildArrays().

    Wichtig ist, dass buildArrays() ein Filmsequenz-Prototyp ist, d.h. der Aufruf muss:

    //~ ActionScript

    myClip.buildArrays();

    lauten.

    Sollte man die Daten nicht in eine Filmsequenz geladen haben, sondern auf eine Ebene,dann sieht der Aufruf so aus:

    //~ ActionScript

    _root.buildArrays();

    So muss der Aufruf lauten, wenn die Daten auf Ebene 0 geladen wurden.

    Wenn die Daten auf Ebene 2 geladen wurden, lautet der Aufruf hingegen:

    //~ ActionScript

    _level2.buildArrays();

    Die Funktion erstellt aus den falschen Arrays ein richtiges Array und lscht die altenVariablen.

    34 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

  • Je nach Menge der bergebenen Variablen dauert das Parsen einige Zeit.Beschleunigen kann man das, indem man Arraydaten in eine leere Film-sequenz ldt und nur dort parst. Bei einem Aufruf an einer Stelle, wo schonandere Variablen deklariert wurden, werden auch diese durchlaufen, um zusehen, ob sie eventuell Arrays sein knnten. Dies dauert unntig Zeit. Beider bergabe von Arrays mit mehr als 50 (!) Elementen kann es sein, dassder Flash-Film zu viele Aktionen ausfhrt und das Script abbricht. Deshalbsollte immer darauf geachtet werden, nicht zu viele Arrays bzw. Elementeauf einmal zu schicken.

    Eine Deklaration von Variablen in Flash, die das Zeichen [ oder ] enthalten,ist nicht mglich, bei eingeladenen Textdateien jedoch sehr wohl, daherkann zwischen Variablen und Variablen, die Arrays sein sollen, zu 100% un-terschieden werden. Es ist also ohne weiteres mglich, in dem PHP-Script,in dem man Arrayvariablen verschickt, auch normale Variablen zu versen-den oder in Flash bereits Variablen zu definieren, ohne dass es zu einerVerwechslung kommt.

    Das Ergebnis in Flash nach dem Parsen ist also:

    Variable nameArray = [object #1] [key:"value",7:"Daniel",4:"Markus",3:"Hannes",2:"Peter",1:"Hans",0:"Joscha"

    ]

    Sie sehen, dass bei dieser Methode nicht nur leere Elemente bercksichtigt werden, son-dern auch, dass die bergabe von assoziativen Arrays mglich ist. Beides ist bei der erstenMethode nicht so einfach zu erreichen, dafr mssen Sie die Verzgerung in Kauf nehmen,die das Parsen verursacht. Diese Verzgerung ist jedoch bei kleineren Arrays verschwin-dend gering.

    3.1.5 Variablen innerhalb des - und -Tags an Flash bergeben

    Dieses Beispiel befindet sich im Ordner Beispiele\externVar\ auf der CD-ROM.

    Tag (deutsch: Etikett) Ein Tag ist eine Kennzeichnung und wird zur Strukturierung vonDaten (z.B. in HTML) verwendet. Hier leiten die beiden Tags ein in HTML eingebunde-nes SWF ein. Sie sagen quasi dem Browser, dass dieser Teil des Codes durch das Flash-Plugin angezeigt wird.

    Dynamische Inhalte 35

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

  • Es mag vorkommen, dass man einmal Variablen an SWF-Filme innerhalb einer HTML-Seite an Flash bergeben muss und aus bestimmten Grnden keinen loadVariables()-oder loadVariablesNum()-Befehl verwenden kann oder mchte, um die Daten direkt zu la-den. In diesem Fall gibt es die Mglichkeit, die Variablen innerhalb der HTML-Seite bzw.des PHP-Scripts direkt an das SWF zu bergeben. Jedoch ist Folgendes zu beachten:

    Variablen werden ausschlielich auf Ebene 0 bergeben.

    Die bergabe schlgt bei Macintosh-Usern mit lteren Browsern eventuell fehl. Bei er-neutem Laden der Seite funktioniert es meistens. Da diese Fehlfunktionen sehr spora-disch und nach keinem genauen Muster auftreten, knnen an dieser Stelle leider keinegenauen Versionsnummern der Browser bzw. Flash-Plugins genannt werden. Ich habemit sehr vielen aktuellen Browsern Tests durchgefhrt und keine Probleme entdeckt. Esmag sein, dass diese in neueren Browserversionen behoben wurden.

    Bei dieser Art von bergabe werden die Variablen etwa so angehngt:

    meinSWF.swf?variable1=wert&variable2=wert

    Jedoch werden die Variablen nicht an den URL der HTML-Seite angehngt, sondern inner-halb des HTML-Codes in die Tags fr das SWF geschrieben. Das sieht dann folgender-maen aus:

    Die anderen Parameter der Tags knnen bzw. sollten selbstverstndlich hinzugefgt wer-den, hier sind sie jedoch aus Grnden der bersichtlichkeit weggelassen worden.

    Wichtig ist, dass die Variablen an das SWF sowohl im - als auch im -Tagangehngt werden mssen, sonst schlgt die bergabe evtl. fehl.

    Sie knnten nun in einem PHP-Script verschiedene Variablen ermitteln oder Benutzer-eingaben verarbeiten und dann den Code fr das SWF inklusive der angehngten Variab-len ausgeben. Vergessen Sie auch bei dieser bergabe nicht, die Werte zu URL-kodieren(siehe Kapitel 3.1.3).

    Ein PHP-Script mit folgendem Code:

    36 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    BEISPIEL

  • des einzusetzen, und wenn hundertprozentig sichergestellt werden muss, dass keine Datenaus dem Browsercache geladen werden, die Lsung auf Flash-Seite. Die Lsung mit PHPkann fehlschlagen, sollte der Browser die versendeten Kopfzeilen falsch interpretieren.

    Caching auf Flash-Seite verhindern

    Dieses Beispiel befindet sich auf der CD-ROM unter Beispiele\phpAvoidCache\phpAvoidCache.fla.

    Um auf Flash-Seite das Caching zu verhindern, wird beim Aufruf von loadVariables(),loadVariablesNum() oder getURL()ein einmaliger Wert an den URL des Scripts angehngt,sodass der Browser bei jedem Aufruf annimmt, es sei ein neuer URL und deshalb die Datenneu ldt, ohne im Cache berhaupt nach (alten) gespeicherten Daten zu suchen. DieseMethode ist je nach angehngtem Wert sehr bis hundertprozentig sicher.

    Oft werden im Internet Lsungen angeboten, die eine zufllig ermittelteZahl anhngen, etwa so:

    //~ ActionScript

    //~ z.B.:

    loadVariablesNum("meinScript.php?"+Math.random(), 0);

    //~ oder:

    loadVariables("meinScript.php?"+Math.random(), "_root");

    Math.random() generiert eine Zahl zwischen 0,0 und 1,0 diese wird an den URL (hier:meinScript.php) angehngt. Die Chance, dass sich die Zahl bei einem Aufruf mit demsel-ben Browser wiederholt, ist sehr gering.

    Wenn die Zufallszahl nicht die erste Variable ist, die angehngt wird, dann muss sie mit ei-nem &-Zeichen von den anderen Variablen getrennt werden, nicht mit einem Fragezeichen(?).

    Dies funktioniert; allerdings ist diese Lsung nicht hundertprozentig sicher, da die Zahlsich wiederholen kann. Zugegeben, die Wahrscheinlichkeit ist sehr klein, allerdings jedochnicht ausgeschlossen. Deshalb empfehle ich eine Zahl, die sich wirklich nie wiederholt.

    Ein Timestamp beispielsweise wre dazu perfekt geeignet:

    //~ ActionScript

    timeStamp = new Date().getTime();

    loadVariables("meinScript.php?="+timeStamp, "_root");

    Hier wird das aktuelle Datum angehngt. Die generierte Zahl ist einmalig und somit bes-tens dazu geeignet, ein zweites Laden zu verhindern.

    38 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    BEISPIEL

  • Wenn Sie an den URL einen Wert anhngen, dann funktioniert dies nur ausdem Browser heraus, nicht offline aus dem Standalone-Player, da Flashdann nach einer Datei sucht, die den Namen des Scripts inklusive desFragezeichens und der Nummer hat.

    Caching mit PHP verhindern

    Dieses Beispiel befindet sich auf der CD-ROM unter Beispiele\phpAvoidCache\phpAvoidCache.php.

    Um mit PHP das Caching zu verhindern, werden mit dem Header des Scripts bestimmteInformationen gesendet. Diese Funktion zu verwenden ist beim Umgang mit sensiblenDaten sinnvoll, damit nichtautorisierte Personen nicht aus dem Cache Dritter Daten ent-nehmen knnen. Ebenfalls wird so unterbunden, dass die Seiten von Proxies gespeichertwerden.

    Header (deutsch: Kopfteil) Ein Header ist der Anfangsteil eines zu bertragendenDatenpakets. Er enthlt alle wichtigen Informationen ber die folgenden Daten, wie z.B. Datentyp und -lnge oder hier z.B. Caching-Informationen fr Proxies und Browser.

    Proxyserver (engl.: proxy = Vollmacht) Proxies dienen als Zwischenspeicher fr Daten.Normalerweise wird ein Datenpaket vom Quellserver bis zum Client weitergegeben.Proxies speichern diese Daten zwischen, sodass beim nchsten Abruf derselben Infor-mation der Datenweg verkrzt werden kann.

  • header("Cache-Control: post-check=0", false);header("Cache-Control: pre-check=0", false);

    //~ Anweisung fr ltere Browser (HTTP/1.0), das Dokument nicht zu cachenheader("Pragma: no-cache");

    //~ hier der weitere PHP-Code

    ?>

    Diese Funktion ist Teil von flash.inc.php (siehe Kapitel 10).

    Die Funktion header()

    int header(string string [, bool replace])

    Der erste Parameter ist ein HTTP-Header in der Form:

    Variable: Anweisung1[=Wert] [,Anweisung2][=Wert] [...]

    Das bedeutet: Zuerst wird der Name des Headers gesendet (z.B. Cache-Control). Nach dem Doppelpunkt folgt die erste Anweisung (z.B. max-age).Die weiteren Argumente sind optional. Das sind einerseits Werte fr die An-weisung(en) oder weitere Anweisungen (durch Kommata separiert). Es kn-nen beliebig viele Anweisungen fr eine Variable gesendet werden.

    Der zweite Parameter gibt an, ob ein bereits definierter Header des gleichenTyps ersetzt werden soll oder nicht.

    Wollen Sie mehrere Header desselben Typs, aber mit unterschiedlichenAnweisungen versenden, so mssen Sie als zweites Argument false ange-ben.

    Weitere Informationen zu Headern finden Sie unter:www.w3.org/Protocols/rfc2616/rfc2616.html

    Der Aufruf von header()-Funktionen muss immer vor jeglicher sonstigerAusgabe geschehen. Sobald andere Daten gesendet wurden, ist es nichtmehr mglich, zustzliche Header zu senden.

    Verschiedene Browser haben verschiedene Gewohnheiten (Bugs :-), somit istdie oben stehende Lsung nicht hundertprozentig sicher. Sie sollte nur zu-sammen mit der Lsung auf Flash-Seite eingesetzt werden, wenn absoluteZuverlssigkeit verlangt ist. Der Timestamp allein (in Flash) sollte schonhundertprozentige Sicherheit bieten.

    40 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    Tutorial

    HINWEIS

    HINWEIS

  • 3.1.7 Beispiel: IP-bergabe an Flash

    Dieses Beispiel befindet sich im Ordner Beispiele\getIP\ auf der CD-ROM.

    Unser Ziel ist es, in einem PHP-Script die IP-Adresse des Clients zu ermitteln, diese inFlash zu laden und dann anzuzeigen.

    Abbildung 3.3: Aufbau einer SWF-Datei, in der mittels loadVariablesNum() die IP-Adresse des Clientrechnersaus PHP in Flash geladen und in einem dynamischen Textfeld ip ausgegeben wird.

    Inhalt des PHP-Scripts:

    Der Ablauf ist folgender:

    1. Die IP-Adresse wird von PHP ermittelt, und dann wird das korrekt formatierte Ergebnisvon Flash geladen.

    2. In Flash wird die IP-Adresse in einem Textfeld angezeigt.

    Erstellung der Applikation:

    1. Neue PHP-Datei erstellen (hier: getIP.php).

    2. Um in PHP die IP-Adresse des Clientrechners zu erhalten, benutzen wir folgendenCode:

    $ip = getenv('REMOTE_ADDR');

    Dieser Code holt die IP-Adresse des Clients aus den PHP-Umgebungsvariablen undweist ihn der Variable $ip zu.

    Dynamische Inhalte 41

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • Die IP-Adresse wird beim Aufruf des PHP-Scripts sowohl als Umgebungs-variable (Erklrung siehe unten) wie auch als normale Variable behandelt(auf normale Variablen kann per $variable zugegriffen werden).

    Anders als Umgebungsvariablen sind normale Variablen vernderbar, hierwird eine Umgebungsvariable nur zustzlich als normale Variable ge-speichert, um einen einfacheren Zugriff auf sie zu gestatten.

    Anders als auf Umgebungsvariablen kann auf diese Variablen nicht mitgetenv() zugegriffen werden.

    So fhren getenv('REMOTE_ADDR') und $REMOTE_ADDR normalerweise zumselben Ergebnis, die Variable $REMOTE_ADDR kann jedoch innerhalb desPHP-Scripts (versehentlich) neu definiert werden, deshalb ist der getenv()-Befehl vorzuziehen.

    Zustzlich muss die Variable $REMOTE_ADDR bei Benutzung innerhalb vonFunktionen erst mit global importiert werden.

    Es wird davon abgeraten, die Variable $REMOTE_IP zu verwenden, um dieIP des Besuchers zu ermitteln, da diese Variable oftmals nur die IP-Adressedes Proxyservers enthlt.

    Umgebungsvariable (engl.: environment variable) Umgebungsvariab-len sind Variablen, die von PHP beim Aufruf des Scripts automatisch fest-gelegt werden. Sie sind nicht vernderbar und man kann auf sie von ber-all her (aus Klassen, Funktionen etc.) pergetenv('UMGEBUNGSVARIABLE');zugreifen.

    3. Als Nchstes mssen wir dafr sorgen, dass die IP-Adresse in ein Flash-kompatiblesFormat umgewandelt wird. Dies erledigen wir folgendermaen:

    $ip = "&ip=".$ip."&";

    Dieser Code wandelt die Ausgabe (hier die IP-Adresse) in ein fr Flash lesbares Formatum.

    4. Nun mssen wir die korrekt formatierte Ausgabe (IP-Adresse) noch ausgeben:

    echo $ip;

    5. Erstellen Sie nun einen neuen Flash-Film.

    6. Im ersten Bild fgen Sie eine loadVariablesNum()-Aktion ein, die das eben erstellteScript (hier: getIP.php) auf Ebene 0 ldt.

    loadVariablesNum("getIP.php", 0);

    Dieser Befehl ldt das Script getIP.php auf Ebene 0. Als Aktion wurde hier weder GETnoch POST angegeben, da keine Variablen aus Flash an PHP verschickt werden mssen.

    42 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

  • 7. Um die IP-Adresse anzuzeigen, muss nun noch ein dynamisches Textfeld erstellt wer-den, das auf Ebene 0 liegt und den Namen ip hat.

    Sollte das Textfeld auf einer anderen Ebene sein oder in einer Filmsequenz,dann muss entweder die Variable des Textfeldes angepasst werden (z.B.:_root.ip) oder die loadVariablesNum()-Aktion muss angepasst werden (z.B.: loadVariables ("getIP.php", "_root.myClip");).

    3.1.8 Umgang mit Verzgerungen

    Angenommen, das Script, das Sie aufrufen, muss, um das gewnschte Ergebnis zu liefern,erst zeitaufwndige Operationen durchfhren, beispielsweise sehr groe Datenmengenverarbeiten, die Anfrage an eine Datenbank weitergeben, einen anderen Server kontaktie-ren etc. Dann dauert die Ausgabe des Ergebnisses etwas lnger, eventuell sogar so lange,dass das Ergebnis in Flash erst ankommt, wenn bereits versucht wurde, es auszugeben.

    Abbildung 3.4 zeigt, was geschieht, wenn man versucht, kurz nach dem Aufruf vonloadVariables() oder loadVariablesNum() das Ergebnis in Flash auszugeben.

    Abbildung 3.4: Dieses Bild zeigt, was passiert, wenn nicht auf die Ausgabe des Scripts gewartet, sondern versuchtwird, das Ergebnis umgehend auszugeben. Der dicke Balken (rechts im Bild) symbolisiert die Zeitdifferenz zwischenAusgabe und eigentlicher Ankunft des Ergebnisses (der Daten).

    Um dieses Problem zu umgehen, muss vor der Weiterverarbeitung des Ergebnisses zuerstgeprft werden, ob dieses bereits vollstndig bertragen wurde.

    Dynamische Inhalte 43

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

  • Fr diese berprfung gibt es zwei Mglichkeiten:

    Erste Mglichkeit: onClipEvent(data)

    Dieses Beispiel befindet sich im Ordner Beispiele\checkLoaded\onClipEvent\ auf der CD-ROM.

    Bei dieser Mglichkeit ist es nicht mglich, die Daten direkt auf eine Ebenezu laden, sondern nur in eine Filmsequenz.

    Abbildung 3.5: Aufbau einer SWF-Datei, in der mit der onClipEvent()-Methode geprft wird, ob Daten aus einem aufgerufenen Script bereits vollstndig geladen wurden. Sobald der Ladevorgang beendet ist, wird eineAktion ausgefhrt.

    Der Ablauf ist folgender:

    1. Daten werden von Flash in eine Filmsequenz geladen.

    2. Mit onClipEvent(data) wird berprft, ob sie bereits vollstndig geladen wurden.

    3. Wenn die Daten geladen wurden, wird eine oder mehrere Aktionen ausgefhrt.

    Um zu dem obigen Ergebnis zu gelangen, mssen Sie folgende Schritte ausfhren:

    1. Erstellen Sie einen neuen Flash-Film.

    2. Erstellen Sie eine neue Filmsequenz und ziehen Sie diese aus der Bibliothek auf dieBhne.

    3. Geben Sie der Filmsequenz bzw. deren Instanz einen eindeutigen Namen (hier: myClip).

    4. Erstellen Sie im ersten Frame eine loadVariables()-Aktion, die Daten aus einer Dateioder einem Script in die gerade erstellte Instanz der Filmsequenz (hier: myClip) ldt.

    44 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

  • Sollten Sie das Caching verhindern wollen, so passen Sie den load-Variables()-Befehl einfach wie in Kapitel 3.1.2 beschrieben an.

    5. Der Inhalt der Datei bzw. die Ausgabe des Scripts ist irrelevant, jedoch mssen dieDaten wie in Kapitel 3.1.3 beschrieben formatiert sein. Der Inhalt unserer Datei (onClipEvent.php) ist folgender:

    Um das Beispiel zu vereinfachen, wird ein statischer Inhalt anstelle einesdynamischen Inhalts verwendet. Das Beispiel funktioniert selbstverstnd-lich auch mit einem PHP-Script, das Daten aus einer Datenbank oder eineranderen Datenquelle holt.

    6. Nun muss bei den Objektaktionen der Filmsequenz noch der Befehl onClipEvent() ein-gefgt und als Ereignis Daten markiert werden. Dieser Parameter bewirkt, dass dieAktionen innerhalb der Klammern der Funktion onClipEvent() ausgefhrt werden, so-bald Daten aus einem Script oder einer Datei per loadVariables() oder loadVariablesNum() vollstndig in die Filmsequenz geladen wurden.

    7. Um beispielsweise nach dem Ladevorgang den Wert einer geladenen Variable auszuge-ben, muss die Aktion innerhalb des onClipEvent()-Befehls stehen. In unserem Fall istdies ein trace()-Befehl, der den Wert der letzten Variable (hier: eoD) unserer geladenenDatei ausgibt.

    Sollte der Inhalt der zu ladenden Datei oder die Ausgabe des PHP-Scriptsleer sein, so werden die Aktionen innerhalb des onClipEvent(data)-Befehls trotzdem ausgefhrt! Sie erhalten also keine Auskunft darber,welche und ob berhaupt Daten geladen wurden, sondern nur, dass derLadevorgang beendet wurde. Wollen Sie berprfen, ob die Daten, die Sieerwarten, wirklich geladen wurden, so ist es besser, die zweite Mglich-keit zu verwenden.

    Zweite Mglichkeit: Schleife mit if-Abfrage

    Diese Methode bentigt etwas mehr Code als die im vorherigen Abschnitt beschriebeneMethode. Hier wird kein Event-Handler verwendet (onClipEvent(data)), sondern eineSchleife ber mehrere Bilder, um den Ladevorgang zu berprfen.

    Dieses Beispiel befindet sich im Ordner Beispiele\checkLoaded\frameLoop\ auf der CD-ROM.

    Dynamische Inhalte 45

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

    HINWEIS

    HINWEIS

  • Abbildung 3.6: Aufbau einer SWF-Datei, in der mit einer if-Abfrage geprft wird, ob Daten von einem aufgerufenenScript bereits vollstndig geladen wurden. Sobald die Daten geladen wurden, wird zu einem bestimmten Frame (hier endLoaded) gesprungen. Dauert der Ladevorgang zu lange, wird der Film angehalten.

    Der Ablauf ist folgender:

    1. Der Ladevorgang wird gestartet.

    2. Mit einer Schleife ber mehrere Frames wird berprft, ob die Daten bereits geladenwurden.

    3. Wenn die Daten geladen wurden, wird eine oder mehrere Aktionen ausgefhrt.

    Erstellung der Applikation:

    1. Erstellen Sie einen neuen Film.

    46 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • 2. Fgen Sie im fnften Frame ein neues Schlsselbild ein und nennen Sie dieses check-Loaded.

    Es muss nicht der fnfte Frame sein. Aus Grnden der bersichtlichkeitempfiehlt es sich jedoch, weiter auseinander liegende Frames zu verwen-den, da dann die Bildbezeichnungen sichtbar werden. Die Bezeichnungspielt ebenfalls keine Rolle; dies ist jedoch der Punkt, an dem spter ge-prft wird, ob die Variablen schon geladen wurden. Somit sollte er eineBezeichnung haben, an der man ihn eindeutig erkennen kann.

    3. Whlen Sie einen weiteren Frame auf derselben Ebene aus (in unserem Fall den 14.) undbezeichnen Sie ihn wieder eindeutig. Dies ist der Frame, zu dem nach dem Laden derVariablen gesprungen wird, deshalb wurde er hier auch endLoaded genannt. In Frame 21sollten Sie noch ein Bild einfgen, damit das Ganze etwas bersichtlicher wird.

    4. Nun erstellen Sie in Frame 1 eine loadVariablesNum()-Aktion. Als URL kann ein beliebi-ges Script gewhlt werden, das jedoch folgendes Format haben muss:

    Die letzte Variable ist die Variable, anhand deren Wert (true) geprft wird, ob die restli-chen Variablen, die davor stehen, schon geladen wurden. In diesem Fall ist das dieVariable mit dem Namen varsLoaded Sie knnen die Variable nennen wie Sie mchten,allerdings muss dann bei der berprfung der Code angepasst werden (siehe unten).

    Verallgemeinert sieht die Formatierung der Ausgabe dann so aus:

    ...DATEN DATEN DATENDATEN DATEN DATENDATEN DATEN DATEN...&varsLoaded=1&

    Die Variable, an der geprft wird, ob die Daten bereits geladen wurden,muss am Ende der Datei stehen und nicht am Anfang, da Flash die Dateibzw. die Ausgabe eines Scripts immer aufsteigend ldt. Die Platzierungder Variable am Ende stellt also sicher, dass die Daten davor bereits gela-den wurden, wenn diese Variable in Flash ankommt.

    Dynamische Inhalte 47

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

    HINWEIS

  • 5. Damit die Schleife, sollten keine Daten geladen werden oder ein Fehler im Script auftre-ten, nicht endlos abluft (was sowohl berflssige Ressourcen bentigt als auch denBenutzer unntig warten lassen wrde), bentigen wir weitere Funktionen. DieseFunktionen sind fr die Funktion des Scripts nicht relevant; ich empfehle aber, sie zu be-nutzen, da so etwaige Fehler im Script einfach erkannt werden knnen.

    Direkt unter dem loadVariablesNum()-Befehl setzen wir nun zwei Variablen:

    startTime = getTimer();

    Diese Variable brauchen wir spter, um zu sehen, wie viel Zeit seit dem Aufruf desloadVariablesNum()-Befehls vergangen ist.

    timeOut = 10;

    Diese Variable legt die Zeit (in Sekunden) fest, nach der die Aktionen fr den Timeoutausgefhrt werden. Sie knnen den Timeout beliebig whlen. Denken Sie auch anModem-User, die evtl. etwas lnger brauchen, um die Daten zu laden; allerdings solltenfr unsere Datenmenge zehn Sekunden ausreichen.

    6. Nun muss noch ein gotoAndPlay()-Befehl eingefgt werden, der den Film zu demFrame springen lsst, an dem die berprfung stattfindet (in unserem Fall: Frame 5 mitder Bezeichnung checkLoaded).

    7. In Frame 5/checkLoaded kommt jetzt der Code fr die berprfung.

    8. Fgen Sie eine if-Abfrage ein und whlen Sie als Bedingung varsLoaded == true.Sollten Sie in Ihrer Datei eine andere Variable zum berprfen des Ladestatus verwen-den, mssen Sie die Bedingung bzw. den Variablennamen entsprechend anpassen.

    Wenn die letzte Variable in Ihrer Datei so aussieht

    &endOfData=1&

    dann muss die Bedingung

    endOfData == true

    oder

    endOfData == 1

    oder nur

    endOfData

    lauten.

    Damit die Variable, mit welcher der Ladevorgang berprft wird (hier: varsLoaded)beim nchsten Laden auf dieselbe Ebene nicht bereits definiert ist bzw. den Wert true(wahr) enthlt und somit der Ladevorgang flschlicherweise fr beendet gehalten wird,mssen Sie den Urzustand vor dem Laden wiederherstellen. Dies geschieht mit demdelete-Befehl (innerhalb der if-Abfrage).

    48 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    BEISPIEL

  • Eine weitere Mglichkeit wre, die Variable varsLoaded = false zu set-zen. Das Ergebnis ist dasselbe.

    9. Nun knnen innerhalb der if-Funktion noch Befehle hinzugefgt werden, die ausge-fhrt werden sollen, wenn die Daten vollstndig geladen wurden. In unserem Fall istdas ein gotoAndPlay() auf den Frame mit dem Namen endLoaded.

    10. Um zu erkennen, ob das Script schon lnger luft, als die Timeout-Zeit es erlaubt, brau-chen wir eine weitere if-Abfrage:

    if ((getTimer() - startTime) / 1000 >= timeOut) {

    trace("Timeout!");

    stop();

    }

    Dieses Script errechnet die Zeitdifferenz zwischen dem Aufruf des loadVariables-Num()-Befehls und der momentanen Zeit (also die Laufzeit der Anfrage an das Scriptoder die Datei) und vergleicht diese mit der in Frame 1 festgelegten Timeout-Zeit. Solltesie grer sein, so werden die Aktionen innerhalb der if-Aktion ausgefhrt.

    Hten Sie sich vor einer zu kleinen Timeout-Zeit, wenn Sie nicht genauvorausberechnen knnen, wie gro die Datenmenge ist oder wie schnelldie Server sind prinzipiell gilt: besser eine zu groe Timeout-Zeit alseine zu kleine. Bei wichtigen Daten ist es angebracht, auf einen Timeoutvollstndig zu verzichten!

    Timeout-Zeit von PHP (set_time_limit())

    Ebenfalls sollte auf die Timeout-Zeit von PHP-Scripts geachtet werden. DieAusfhrung von PHP-Scripts ist auf den meisten Servern festgelegt, siekann aber mit dem Befehl

    void set_time_limit (int seconds)

    beeinflusst werden. Bei einem Aufruf von set_time_limit() wird die Aus-fhrungszeit eines Scripts auf 0 zurckgesetzt.

    Beispiel:

    Dynamische Inhalte 49

    Exkurs

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

    HINWEIS

  • Wenn Sie das Zeitlimit vollstndig deaktivieren wollen, mssen Sie set_time_limit(0) aufrufen. Nach diesem Aufruf luft das Script, bis es zu Endeist (oder z.B. bei einem Programmierfehler unendlich lange, dieser Befehlsollte also immer mit Vorsicht eingesetzt werden!).

    Im SAFE MODE hat der Aufruf von set_time_limit() keinenEffekt. Es gibt keinen anderen Weg, um die Ausfhrungszeiteines Scripts zu verlngern, als entweder den SAFE MODE ab-zuschalten oder das Zeitlimit in der Konfigurationsdatei vonPHP zu verndern. Fr mehr Informationen hierzu kontaktie-ren Sie bitte den Administrator Ihres ISP.

    11. Solange beide Bedingungen in Frame 5 nicht erfllt sind, luft der Film einfach weiter.Demnach mssen wir in Frame 6 eine Aktion einbinden, die einen Rcksprung verur-sacht. Auf diese Weise werden die Abfragen so lange wiederholt, bis eine der beidenBedingungen zutrifft. Dazu fgen wir in Frame 6 einfach einen gotoAndPlay()-Befehlein, der zu der Abfrage zurckspringt.

    12. In Schritt 10 haben wir ein Sprungziel festgelegt (Frame 14/endLoaded), zu dem ge-sprungen wird, wenn die Daten vollstndig geladen wurden. Daher mssen wir in die-sem Frame noch eine stop()-Aktion einfgen, damit der Film nicht wieder von vornebeginnt. Hier knnten auch Befehle stehen, die nach dem Laden ausgefhrt werden sol-len, beispielsweise zustzlich noch ein trace()-Befehl.

    3.2 Variablen von Flash an PHP bergebenIn diesem Unterkapitel wird darauf eingegangen, wie Daten aus Flash an ein PHP-Scriptbergeben werden knnen. Diesen Weg bentigt man, um beispielsweise vom User einge-gebene Daten wie etwa bei einem Bestellvorgang in einem Onlineshop in einer Datenbankzu speichern. Ebenfalls kann man PHP verwenden, um Daten zu validieren (z.B. Kredit-kartendaten). Doch nicht nur vom Benutzer eingegebene Daten mssen evtl. an ein PHP-Script geschickt werden, sondern auch etwa die Position des Besuchers bei der Navigationdurch ein dynamisches Men.

    50 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    HINWEIS

    Exkurs

  • 3.2.1 Schema der bergabe

    Abbildung 3.7: Mit den Befehlen loadVariables(), loadVariablesNum() oder getURL() werden Datenaus Flash an ein Script bergeben. Wenn die Funktion zum Aufrufen des Scripts getURL() sein sollte, so knnenkeine weiteren Daten vom Script mehr empfangen werden.

    3.2.2 Funktionen zur bergabe

    Folgende Funktionen kann man verwenden, um Daten aus Flash an ein Script zu ber-geben. Zwei davon kennen wir schon:

    void loadVariablesNum (string url, mixed position [, int methode]);Die Beschreibung finden Sie in Kapitel 3.1.2.

    void loadVariables (string url, mixed position [, int methode]);Die Beschreibung finden Sie in Kapitel 3.1.2.

    Auerdem gibt es noch folgende Funktion:

    void getURL (string url [, string fenster [, int methode]]);

    Parameter: string urlEin absoluter oder relativer URL zu dem Script.

    string fensterBezeichnet den (Frame-)Namen eines bestehenden oder eines neuen Brow-serfensters.

    Beispiel: Um die Ausgabe z.B. in einem neuen Browserfenster anzuzeigen, wrdeman folgenden Code verwenden:

    //~ ActionScript

    getURL("meinScript.php", "_blank");

    int methode

    Dynamische Inhalte 51

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • Dieser Parameter verhlt sich wie bei loadVariablesNum() in Kapitel 3.1.2beschrieben. Nheres zu verschiedenen Methoden erfahren Sie in Kapitel3.2.3.

    Anmerkung: Ein mit diesem Befehl aufgerufenes Script bzw. dessen Ausgabe lsst sich in-nerhalb von Flash nicht laden. Diese Methode ist also nur dann geeignet,wenn man vorhat, die Daten mit dem Script weiterzubearbeiten oder imBrowser selbst auszugeben.

    Beispiel:

    //~ ActionScript

    getURL("meinScript.php");

    Dieser Code ldt nicht etwa die Ausgabe des Scripts (hier: meinScript.php) inFlash, sondern ffnet dieses Script im selben Browserfenster. Die HTML-Seite, die das SWF enthlt, von dem dieser Ausruf ausgeht, wird also durchdas Script ersetzt.

    3.2.3 Verschiedene bergabearten/Methoden

    LoadVariables(), loadVariablesNum() und getURL() haben als optionales drittes Argu-ment eine Methode.

    Da Flash sich HTTP-konform (HTTP = Hypertext Transfer Protocol) verhlt, muss dieMethode vom Protokoll untersttzt werden. Es gibt viele verschiedene Methoden; die zweigebruchlichsten heien GET und POST.

    Im Folgenden werden bei beiden Methoden Vor- und Nachteile aufgezeigt. Es ist keine ein-deutige Zuordnung mglich, da was einmal ein Nachteil ist, ein anderes Mal ebenso einenVorteil bedeuten kann. Hier wurde versucht, die verschiedenen Vor- und Nachteile gegen-einander abzuwgen und daraus zu entscheiden, welches Merkmal einer Methode einenVorteil und welches einen Nachteil darstellt.

    GET

    Bei GET werden die Daten mit einem Fragezeichen (?) als Trennzeichen anden URL angehngt und dann weitergesendet. Im Browser des Anwendersist dies nach dem Absenden des Formulars in der URL-Zeile oder im Cachesichtbar.

    Vorteile: Zu versendende Daten knnen einfach ausgewhlt werden.

    Nachteile: Sonderzeichen mssen kodiert werden, d.h. alle nicht alphanumerischenZeichen bis auf -_. mssen in %, gefolgt von dessen ASCII-Code, umgewan-delt werden.

    52 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

  • Die Lnge des Anfrage-Strings ist bei den meisten Server-Systemen be-schrnkt (1 Kbyte = 1024 Zeichen), daher knnen bei der bertragung gr-erer Datenmengen mit der GET-Methode Daten verloren gehen.

    Die Daten werden von Proxies und vom Client im Cache gespeichert, wasbei sensiblen Daten eine Sicherheitslcke darstellt.

    Um Daten mit GET zu versenden, sehen die Aufrufe folgendermaen aus:

    //~ ActionScript

    getURL("meinScript.php", "_blank", "GET");

    loadVariablesNum("meinScript.php", 0, "GET");

    loadVariables("meinScript.php", "_root.movieClip", "GET");

    POST

    Bei der POST-Methode werden die Daten nicht an die URL angehngt, son-dern in einem eigenen Datenpaket, dem Head-Teil der HTTP-Anfrage andas Script bermittelt.

    Vorteile: Die Daten sind nicht sichtbar und werden weder von Proxies noch vomClient im Cache gespeichert.

    Um Daten mit der Methode POST zu versenden, mssen sie nicht explizit ko-diert werden, dies geschieht automatisch.

    Es gibt keine Lngenbeschrnkung, sogar Binrdaten sind mglich (z.B. frDatei-Uploads).

    Nachteile: Zu versendende Daten lassen sich nicht so einfach wie bei der GET-Methodewhlen.

    Um Daten mit POST zu versenden, sehen die Aufrufe folgendermaen aus:

    //~ ActionScript

    getURL("meinScript.php", "_blank", "POST");

    loadVariablesNum("meinScript.php", 0, "POST");

    loadVariables("meinScript.php", "_root.movieClip", "POST");

    Dynamische Inhalte 53

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    BEISPIEL

    BEISPIEL

  • Anwendungsgebiete der Methoden

    GET sollte bei kleinen Formularen, die keine sensiblen Daten enthalten, und bei Formularen,die eventuell als Lesezeichen abgelegt werden, verwendet werden. Besonders bei groenDatenmengen und/oder sensiblen Daten ist die Methode POST vorzuziehen, da es bei POSTweitaus schwieriger ist, sensible Daten auszuspionieren.

    Zustzlich zu der POST-Methode sollten diese Daten auch noch verschlsselt werden z.B.mit SSL (siehe Kapitel 5.2).

    3.2.4 Auswahl der zu sendenden Variablen

    Bei der Verwendung von GET/POST werden alle Variablen, die in Flash definiert wurdenund sich auf derselben Ebene bzw. in derselben Filmsequenz befinden, an das Script gesen-det. Es ist ohne weiteres nicht mglich, einzelne Variablen am Versenden zu hindern.

    Sollten im Flashfilm die Variablen

    Variable _level0.variable1 = "wert"Variable _level0.variable2 = "wert2"Variable _level0.movieClip.variable3 = "wert"Variable _level2.variable4 = "wert"

    vorhanden sein, gibt es folgende vier Mglichkeiten:

    Beim Aufruf von:

    //~ ActionScript_root.getURL("meinScript.php", "_blank", "POST");

    wrden die Variablen variable1 und variable2 an das Script bergeben.

    Beim Aufruf von:

    //~ ActionScript_root.movieClip.getURL("meinScript.php", "_blank", "POST");

    wrde die Variable variable3 an das Script bergeben werden.

    Bei folgendem Aufruf von _level2

    //~ ActionScript_level2.getURL("meinScript.php", "_blank", "POST");

    wrde die Variable variable4 an das Script gesendet werden.

    54 Kapitel 3

    DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

    BEISPIEL

  • Bei folgendem Aufruf von _level4

    //~ ActionScript_level3.getURL("meinScript.php", "_blank", "POST");

    wrde keine der vier Variablen an das Script bergeben werden.

    Anmerkung: Um Daten aus einer andere