248
Joscha Feth Dynamische Webseiten mit Flash und PHP

Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Joscha FethDynamische Webseiten mit Flash und PHP

Page 2: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer
Page 3: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

JOSCHA FETHDYNAMISCHE WEBSEITEN

MIT FLASH UND PHP

Page 4: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die Deutsche Bibliothek – CIP-Einheitsaufnahme

Ein Titeldatensatz für diese Publikation ist beiDer Deutschen Bibliothek erhältlich.

Die Informationen in diesem Produkt werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt.Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen.Trotzdem können Fehler nicht ausgeschlossen werden.Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder einejuristische Verantwortung noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge 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 zulässig.

Fast alle Hardware- und Softwarebezeichnungen, die in diesem Buch erwähnt 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 ausumweltverträglichem und recyclingfähigem 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-Straße 10-12, D-81829 München/GermanyAlle Rechte vorbehalten

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

Page 5: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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 für 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 für 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 <OBJECT>- und <EMBED>-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 Verzögerungen ......................................................................................... 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

Page 6: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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 Funktionsübersicht ....................................................................................................... 79 4.2.3 Umgang mit der Klasse swiffSQL ................................................................................. 84 4.2.4 Beispiel: Daten laden (Variablen) .................................................................................. 84 4.2.5 Beispiel: Daten laden/einfügen (XML) ......................................................................... 89

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

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

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

5.3 Beispiel: Passwortgeschützter Bereich in Flash ................................................... 102

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

5.5 Beispiel: Besucherzähler 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/löschen .......................................................................... 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

Page 7: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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 Funktionsübersicht ..................................................................................................... 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 Funktionsübersicht ..................................................................................................... 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 Funktionsübersicht ..................................................................................................... 210 9.1.2 Events ......................................................................................................................... 220 9.1.3 Eigenschaften .............................................................................................................. 221

10 flash.inc.php ...................................................................................................................... 223 10.1.1 Funktionsübersicht ..................................................................................................... 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

Page 8: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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

Page 9: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

KAPITEL 1EINLEITUNG

Crescit enim cum amplitudine rerum vis ingenii.(Denn mit der Größe der Aufgaben wächst die Kraft des Geistes)

PUBLIUS CORNELIUS TACITUS

Page 10: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

1.1 Über den AutorJoscha Falco Feth ist Programmierer und entwickelt Anwendungen und dynamischeInternetseiten im eigenen Unternehmen. Zu seinem Sprachrepertoire gehören hauptsäch-lich PHP, SQL, Flash ActionScript, C/C++, Delphi und Perl.

1998 entdeckte Joscha die faszinierenden Möglichkeiten von Macromedias vektororientier-tem Flash und dessen interne Programmiersprache »ActionScript«. Im Zusammenspiel mitserverseitigen Scriptsprachen war damit im Internet möglich, was sonst nur mit aufwändigprogrammierten 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 für diese Anwendung warso groß, dass er zusammen mit Wildform Inc. in Los Angeles eine eigenständige An-wendung für Windows entwickelte. Das Programm SWfX wurde bis heute schon einigetausend Mal verkauft und ist mittlerweile auch für Macintosh verfügbar (www.wildform.com).

Anfang 2000 eröffnete Joscha Feth das Flash-Internetportal www.flashtool.de. Er bietetdort von ihm entwickelte Zusatz-Tools an, welche die Online- und Offlinefunktionalitätvon Flash erheblich steigern. Die Seite ist ein großer 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 sechswöchigesIntensivtraining bei SAP LABS FRANCE in Sophia-Antipolis, Frankreich, folgte.

Noch im selben Jahr gründete 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 sindfür die Vorschau in Flash mit dem Programm Flix kodiert worden.

Seit 2000 hält Joscha Feth regelmäßig Vorträge auf der Deutschen Flash-Konferenz und ver-anstaltet Schulungen für Flash.

Jess Märtterer, 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 benötigt, und eignet sich ideal für das Internet mit seiner be-

10 Kapitel 1

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 11: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

schränkten Bandbreite. Von Animationen über Comics und interaktive Spiele bis hin zuOnlineshops lässt sich mit Flash alles realisieren, was im Internet benötigt wird.

PHP ist eine serverseitige Sprache, deren verborgene Stärken 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 mächtige Sprachefür die serverseitige Programmierung.

Flash und PHP sind zwei vollkommen unterschiedliche Sprachen. Verbunden und sich ge-genseitig ergänzend schaffen sie Raum für neue, ungeahnte Möglichkeiten. Ob man nun ei-nen einfachen Besucherzähler benötigt (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 allesmöglich ist. Anhand von Beispielen werden die Vorgehensweise bei häufigen Problemenerläutert und Lösungsmöglichkeiten aufgezeigt. Mit Hilfe dieses Buches sollte es Ihnenmöglich sein, alle Hürden beim Umgang mit Flash und PHP zu überwinden.

Ich werde so ausführlich wie möglich auf vorhandenen Code eingehen und zusätzlicheErklärungen geben. Allerdings sind beide Sprachen, sowohl PHP wie auch Flash, keinesehr kleinen Sprachen, und es ist unmöglich, im Rahmen dieses Buches auf alle Sprach-konstrukte im Einzelnen einzugehen. Deshalb sind zum gänzlichen Verständnis diesesBuches Grundkenntnisse von Flash und PHP erforderlich.

1.2.1 Danksagungen

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

Ich danke Dominik Schech (www.schech.net) für den Entwurf des Covers,

Jess Märtterer (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 Häfele-Feth für die mir gegebene Unterstüt-zung,

meiner Freundin Valerie Grass für ihre Geduld und Ausdauer

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

Einleitung 11

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 12: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

1.2.2 Formales

· Kommentare:

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

//~ einzeiliger Autorenkommentar

/*~ mehrzeiligerAutorenkommentar */

• ActionScript-Code in Flash wird so eingeleitet:

//~ ActionScript

• PHP-Code wird so eingeleitet:

<?php

und so abgeschlossen:

?>

• 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 ausdrücklich derPHP Documentation Group, die freundlicherweise die Erlaubnis erteilt hat.

• Farben:

Alle Konstanten, vordefinierten Variablen, Befehle, Funktionen und reservierten Wörtersind eingefärbt.

Dieses Symbol verweist auf Daten auf der Buch-CD.

12 Kapitel 1

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 13: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

KAPITEL 2GRUNDLEGENDES ZU PHP

Page 14: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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 für seine ei-gene Homepage verwendete, um HTML-Formulare auszuwerten. Mittlerweile verbirgtsich hinter der Abkürzung PHP der lange Name »PHP Hypertext Preprocessor«.

PHP ist eine serverseitige, plattformunabhängige Scriptsprache und für alle gängigenPlattformen frei erhältlich. PHP bringt schon von Haus aus eine sehr gute Datenbank-anbindung an die meisten gängigen 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 erhältlich 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 möglich, 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 können sowohl normalen HTML-Code als auch PHP-Anweisungen enthal-ten.

Bei einem Abruf eines PHP-Scripts über den Browser wird zunächst der PHP-Code ausge-führt.

Dem Browser wird anschließend die vorverarbeitete (daher der Name »Preprocessor«)Datei, d.h. nur die HTML-Anteile und die »Ergebnisse« der PHP-Anweisungen, übermit-telt.

Diese Übersetzung findet vollständig 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«, häufig mitAS abgekürzt, wird auf der Clientseite ausgeführt, d.h. sämtliche 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 für das Abspielen aller Animationen verantwortlich,sondern auch für die Interpretation und Ausführung der ActionScript-Anweisungen.

Dadurch ist es in gewissem Maße möglich, dass ein Flash-Film sofort mit AS auf Benutzer-eingaben reagieren kann, ohne erneut Verbindung zum Server aufnehmen zu müssen (z.B. für interaktive Menüs 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 ausgeführt werden.

14 Kapitel 2

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 15: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Grundlegendes zu PHP 15

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

WAMP und LAMP

Im Internet finden Sie im Zusammenhang mit PHP oft die AbkürzungenWAMP und LAMP.

• LAMP steht für die Kombination von: Linux, Apache, MySQL und PHP.

• WAMP steht für: 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 häufig verwendete Server-Konfigurationen.

Sämtliche in diesem Buch behandelten Beispiele laufen ohne Probleme inbeiden Umgebungen.

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

Die aktuellen PHP-Distributionen sind unter www.php.net für verschiedene Plattformenfrei erhältlich.

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

2.3 Installation von PHP Eine Installationsanleitung für WAMP gibt es unter:

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

oder hier (auch für andere Betriebssysteme als Windows, z.B. LAMP):

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

Ich kann an dieser Stelle leider keine Installationsanleitung für PHP geben – zum einen ausPlatzgründen, zum anderen, weil ich voraussetze, dass Sie sich als Leser dieses Buches be-reits ein wenig mit PHP auskennen. Sollten Sie aber dennoch Unterstützung bei derInstallation benötigen, schauen Sie im Verzeichnis Software und Module\PHP\Installation

Exkurs

Page 16: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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 Verfügung gestellt. Diese Kapitel sollten Sie sicher und einfach durch denInstallationsprozess geleiten.

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

Ich persönlich empfehle hier Apache (www.apache.org).

Wenn Sie Ihre Scripts online testen bzw. einsetzen, müssen Sie beachten, dasses auf Servern, bei denen der SAFE MODE von PHP aktiviert ist, einige Ein-schränkungen 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 Einschrän-kungen unbeeinträchtigt austesten können, stellt Ihnen der Kölner Internet-Provider HostEurope (www.host-europe.de) in Kooperation mit dem herausgebenden Verlag Markt+Technik von Mai 2002 an für die Dauer eines Jahres einen kostenlosen Webspace-Accountzur Verfügung. Um dieses Angebot nutzen zu können, müssen Sie sich als Leser diesesBuches registrieren lassen. Füllen 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 Dankeschön an HostEurope für die Bereitstellung des Dedicated Servers!

16 Kapitel 2

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 17: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

KAPITEL 3DYNAMISCHE INHALTE

Page 18: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

In diesem Kapitel zeige ich Ihnen die grundlegenden Möglichkeiten 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 für das Laden

Um Daten von PHP nach Flash zu laden, werden in Flash einige Funktionen benötigt.Diese werden in diesem Abschnitt vorgestellt. Außerdem werden einige häufige 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 anhält und auf den Abschluss des Befehls wartet, son-dern dass die Timeline sich ohne anzuhalten weiterbewegt. Es kann alsonicht davon ausgegangen werden, dass im Schlüsselbild, das auf den Befehlfolgt, die Daten bereits verfügbar sind. Die Verfügbarkeit von Daten musszuerst überprüft werden. Mehr dazu in Kapitel 3.1.8.

18 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 19: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

loadVariablesNum()

Beschreibung: Mit loadVariablesNum() können 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 für Uniform Resource Locator und ist die Abkürzungfür 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 erläutert.

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 Abkürzung für 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. Mögliche Werte sind POST oder GET.Auf die verschiedenen Methoden wird in Kapitel 3.2.3 näher eingegangen.

Anwendung: Um die Ausgabe eines Scripts (hier: meinScript.php) auf Ebene 0 unseresFilms zu laden, muss der Aufruf folgendermaßen 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

Page 20: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

loadVariables()

Beschreibung: Mit loadVariables() können 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. Mögliche Werte sind POST oder GET.Auf die verschiedenen Methoden wird in Kapitel 3.2.3 näher eingegangen.

Anwendung: Um die Ausgabe eines Scripts (hier: meinScript.php) in eine Filmsequenzauf unserer Hauptzeitleiste zu laden, muss der Aufruf des SWF folgender-maßen 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, müssen 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

Page 21: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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

<?phpecho "variable1=wert&variable2=wert";?>

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

In Flash lädt folgender Code das PHP-Script mit oben stehendem Inhalt:

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

Wenn die Daten geladen wurden, dann sind sie an der Stelle verfügbar, diebei den Befehlen als Ziel angegeben wurde. Das heißt, die Variablen varia-ble1 und variable2 sind jetzt auf der Hauptzeitleiste verfügbar und könnenbeispielsweise 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 lädt Daten normalerweise korrekt, wenn man bei der ersten Variable das &-Zeichenweglässt. 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 verfälscht.

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

Page 22: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Es werden nun z.B. bei der Ausgabe eines Fehlers zwar trotzdem noch mehr (unnötige)Daten geladen, jedoch wird an den übergebenen Variablen nichts verfälscht. Leiten Sie IhreDaten also immer mit einem &-Zeichen ein.

Dasselbe gilt auch für das Ende der Daten. Wenn eine Warnung o. Ä. am Ende ausgegebenwird, dann wird diese an den Wert der letzten Variable angehängt.

Die Ausgabe eines Scripts enthält 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 »variable2«nicht mehr

Variable variable2 = "wert"

sondern:

Variable variable2 = "wertUNGEWOLLTE_WARNUNG"

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

Etwa so:

&variable1=wert&variable2=wert&UNGEWOLLTE_WARNUNG

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

Bei Verwendung eines &-Zeichens am Ende wird in Flash eine überflüssigeVariable mit leerem Namen geladen (wenn danach nichts mehr kommt), dadas &-Zeichen ja normalerweise dafür verwendet wird, eine neue Variableeinzuleiten. Wenn Sie diese Variable stört, so können Sie sie beruhigt lö-schen.

Auf diese Variable können 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

Page 23: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Strukturierte Datenausgabe

Dasselbe gilt auch, wenn man seine Ausgabe strukturieren möchte, um einen besserenÜberblick 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, müssen 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 schlägt die Rechenoperation fehl.

Rechnen mit eingelesenen Werten

Noch eine weitere Besonderheit muss man beachten, wenn man mit eingelesenen Wertenrechnen möchte: 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, dannkönnen 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 folgendermaßen aus-sehen:

&preis1=9.99&preis2=18.07&

Nicht:

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

Dynamische Inhalte 23

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 24: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Leerzeichen

Leerzeichen zwischen dem Variablennamen und dem Gleichheitszeichen werden an denVariablennamen angehängt.

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) angehängt.

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) müssen Siebeachten, dass bei folgender Schreibweise:

&variable1=true&variable2=false&

die Werte von Flash als String angesehen werden. Um zu überprüfen, ob diese Variablendie richtigen Werte haben, müssten Sie folgenden Code benutzen:

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

//~ Bedingung erfüllt} //~ end if

Hier wird überprüft, 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

Page 25: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Dieses Format erzielt das gewünschte Ergebnis:

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

//~ Bedingung erfüllt} //~ end if

Diese Abfrage prüft, 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, müssen 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 für Variablen fungieren. So führt

&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 gewünschte 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. Zurückgegeben wirdein String im kodierten (richtigen) Format.

Dynamische Inhalte 25

Tutorial

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 26: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Beispiel:

Der Code

<?php$string = "Fish & Chips";$kodierterString = urlencode($string);echo "&menue=".$kodierterString."&";?>

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

<?php$string = "&menue1=Fish & Chips&menue2=Beef&";$kodierterString = urlencode($string);echo $kodierterString;?>

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

Page 27: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die in Tabelle 3.1 stehenden ASCII-Werte von Sonderzeichen erhalten Sie bei der Benut-zung von urlencode() automatisch. Jedoch halte ich es für sinnvoll, häufig verwendeteZeichen hier anzuführen, damit diese auch ohne PHP (z.B. nur mit Textdateien) eingesetztwerden können.

Bei der Verwendung von Sonderzeichen wie ü, Ü, ä, Ä, ö, Ö und ß solltendie Zeichen selbst bei einer häufigen Schriftart im Textfeld (in Flash) mit ein-gebunden werden, da sie in den Schriftsätzen anderer Länder 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 möchte (z.B. weil man ein Bild jedeWoche ändert etc.), dann kann es sein, dass bei der Übergabe der Pfade für 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 heißt, bei der Kommunikation zwischenBrowser und Plugin können 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 können. Erfahrungswerte mit dem Netscape 6.x habe ich noch keine.Im Internet Explorer habe ich noch keine bemerkt, aber auch hier sind Fehler nichtgrundsätzlich auszuschließen.

Im Netscape 4.x bringt folgende Ausgabe bzw. deren Laden in Flash oftmals nicht das ge-wünschte 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 heißt, man muss die auf die Unterverzeichnissezielenden ../ in eine Zeichenfolge umwandeln, die Netscape nicht als Pfadangabe interpre-tiert. Dies wäre beispielsweise so etwas:

&pfad=**/bild.swf&

Dynamische Inhalte 27

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 28: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Diese Umwandlung muss man dann innerhalb von Flash wieder rückgängig machen. Diefolgende Funktion erledigt das für uns:

//~ ActionScript

function redoPath(myPath, splitChar) {

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

} //~ 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 können selbstverständlich 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 wäre etwa *.

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

3.1.4 Arrays von PHP nach Flash übergeben

Arrays lassen mehr Möglichkeiten zur Strukturierung von Daten. Wenn Sie z.B. eine Listeübergeben möchten, dann können Sie dies selbstverständlich tun, indem Sie die Variablen-namen mit Zahlen versehen, etwa so:

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

Allerdings wird dies bei größeren Datenmengen erstens relativ unübersichtlich, und zwei-tens ist der Zugriff auf diese Art von Variablen nicht sonderlich komfortabel. Bei Daten, diealle zu einer Gruppe gehören, aber dennoch unterschieden werden müssen, 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 können.

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

Bei beiden Möglichkeiten lassen sich keine mehrdimensionalen Arrays übergeben.

28 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 29: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Erste Möglichkeit: 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 Flashübergeben. Dort kann anhand der Trennzeichen wieder ein Array gebildet werden.

Der Vorteil dieser Methode ist, dass extrem wenige Daten übergeben werden und keineFunktion benötigt wird, welche die Daten (strukturierte Variablen) in eine andere (fürFlash verständliche) 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:

<?php

$testArray = array(); //~ neues Array erstellen

$testArray[0] = "Keine Kommata erlaubt";$testArray[1] = "Hier, sind, aber, trotzdem, welche";

//~ In kommaseparierte Liste umwandeln$arrayString = join(",", $testArray);

//~ Ausgebenecho "&arrayString=".$arrayString."&";

?>

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 Wertgehören.

Sie können natürlich 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 können, dann ist diese Methode unge-eignet. Verwenden Sie in diesem Fall die zweite Methode!

Dynamische Inhalte 29

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

BEISPIEL

Page 30: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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 können Sie diese Methode ohne weiteres anwenden.

Ein PHP-Script hat folgenden Inhalt:

<?php

$nameArray = array(); //~ neues Array erstellen

$nameArray[0] = "Joscha";$nameArray[1] = "Hans";$nameArray[2] = "Peter";$nameArray[3] = "Hannes";$nameArray[4] = "Markus";

//~ In kommaseparierte Liste umwandeln.$arrayString = join(",", $nameArray);

//~ Ausgebenecho "&arrayString=".$arrayString."&";

?>

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.

Zurückgegeben wird das in einen String umgeformte Array mit dem ge-wählten Trennzeichen zwischen den einzelnen Elementen.

In diesem Fall wurde als Trennzeichen ein Komma gewählt, da keiner der Namen einKomma enthält und so in Flash korrekt gesplittet werden kann. Wenn Sie wissen, welcheZeichen das Array enthält, und so ein Trennzeichen wählen können, das nicht in demArray vorkommt, dann ist diese Methode gut geeignet.

30 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Tutorial

·

BEISPIEL

Page 31: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Wenn Sie jedoch nicht wissen, was für Zeichen im Array vorkommen, dann sind Fehlervorprogrammiert – in diesem Fall wird dringend zur zweiten Methode geraten, oder Siemüssen das gewählte Trennzeichen in den Daten URL-kodieren (siehe Kapitel 3.1.3). Diesgeht allerdings nur, wenn Sie ein Trennzeichen wählen, 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 gelöscht.

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

<?php

$nameArray = array(); //~ neues Array erstellen

$nameArray[0] = "Joscha";$nameArray[1] = "Hans";$nameArray[2] = "Peter";$nameArray[3] = "Hannes";$nameArray[4] = "Markus";//~ hier fehlt etwas$nameArray[7] = "Daniel";

//~ Hier Code zum Ausgeben

?>

Dynamische Inhalte 31

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 32: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Es »fehlen« die Elemente 5 und 6 des Arrays $nameArray, denn der String, der nun ausgege-ben würde, wäre folgender:

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

Sie sehen, dass obwohl zwischen den Elementen 4 und 7 eine »Lücke« ist, diese im Stringnicht ausgedrückt wird. Dies mag teilweise geschickt sein; wenn man jedoch die Positionender Elemente bei der Übergabe berücksichtigen möchte, müssen fehlende Elemente als»leer« deklariert werden. Etwa so:

<?php

$nameArray = array(); //~ neues Array erstellen

$nameArray[0] = "Joscha";$nameArray[1] = "Hans";$nameArray[2] = "Peter";$nameArray[3] = "Hannes";$nameArray[4] = "Markus";$nameArray[5] = "";$nameArray[6] = "";$nameArray[7] = "Daniel";

//~ Hier Code zum Ausgeben

?>

Ausgegeben würde dann:

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

Der String unterscheidet sich nur geringfügig von dem anderen, leere Positionen sind beiihm jedoch berücksichtigt.

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

<?php

function fillEmpty(&$array)

{for ($i = 0; $i < sizeof($array); $i++) {

if (!isset($array[$i])) {$array[$i] = "";

} //~ end if} //~ end forksort($array); //~ nach Schlüssel sortierenreset($array); //~ Arrayzeiger zurücksetzen

}

?>

32 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 33: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Diese Funktion fügt »fehlende« Elemente in ein Array ein und sortiert es anhand derSchlüssel.

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

Zweite Möglichkeit: 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 benötigt wird. Diese Art der Übergabe ist jedoch etwas langsamer alsdie erste, da zum einen mehr Daten (Name des Arrays, Schlüssel und eckige Klammern)übergeben werden als bei der ersten Methode und zum anderen das Parsen an sich etwasmehr Zeit benötigt.

Ein PHP-Script hat folgenden Inhalt:

<?php

$nameArray = array(); //~ neues Array erstellen

$nameArray[0] = "Joscha";$nameArray[1] = "Hans";$nameArray[2] = "Peter";$nameArray[3] = "Hannes";$nameArray[4] = "Markus";//~ Hier fehlt etwas$nameArray[7] = "Daniel";//~ Nun noch ein Element mit nicht-numerischem Schlüssel$nameArray["key"] = "value";

while(list($key,$value) = each($nameArray)) {echo "&nameArray[".$key."]=".$value."&\n";

}

?>

Dynamische Inhalte 33

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

·

BEISPIEL

Page 34: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Zuerst wird ein Array erstellt, das nicht nur numerische, sondern auch nicht-numerischeSchlüssel enthält: 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 wäre 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 müssen die Daten also noch in »richtige«Arrays umformen. Die dazu notwendigen Funktionen bzw. Prototypen sind relativ kom-plex und werden an dieser Stelle nicht näher behandelt. Sie sind auf der CD-ROM beigelegtund können selbstverständlich angepasst und verändert werden.

Uns interessiert an dieser Stelle nur ihre Benutzung. Wenn man also die Daten geladen hat,dann muss man eine Funktion ausführen. 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 löscht die altenVariablen.

34 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 35: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Je nach Menge der übergebenen Variablen dauert das Parsen einige Zeit.Beschleunigen kann man das, indem man Arraydaten in eine leere Film-sequenz lädt 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 könnten. Dies dauert unnötig Zeit. Beider Übergabe von Arrays mit mehr als 50 (!) Elementen kann es sein, dassder Flash-Film zu viele Aktionen ausführt 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 möglich, 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 möglich, 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 berücksichtigt werden, son-dern auch, dass die Übergabe von assoziativen Arrays möglich ist. Beides ist bei der erstenMethode nicht so einfach zu erreichen, dafür müssen Sie die Verzögerung in Kauf nehmen,die das Parsen verursacht. Diese Verzögerung ist jedoch bei kleineren Arrays verschwin-dend gering.

3.1.5 Variablen innerhalb des <OBJECT>- und <EMBED>-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

Page 36: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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

• Variablen werden ausschließlich auf Ebene 0 übergeben.

• Die Übergabe schlägt 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, können an dieser Stelle leider keinegenauen Versionsnummern der Browser bzw. Flash-Plugins genannt werden. Ich habemit sehr vielen aktuellen Browsern Tests durchgeführt und keine Probleme entdeckt. Esmag sein, dass diese in neueren Browserversionen behoben wurden.

Bei dieser Art von Übergabe werden die Variablen etwa so angehängt:

meinSWF.swf?variable1=wert&variable2=wert

Jedoch werden die Variablen nicht an den URL der HTML-Seite angehängt, sondern inner-halb des HTML-Codes in die Tags für das SWF geschrieben. Das sieht dann folgender-maßen aus:

<OBJECT>

<PARAM NAME=movie VALUE="meinSWF.swf?variable=wert">

<EMBED src="meinSWF.swf?variable=wert">

</OBJECT>

Die anderen Parameter der Tags können bzw. sollten selbstverständlich hinzugefügt wer-den, hier sind sie jedoch aus Gründen der Übersichtlichkeit weggelassen worden.

Wichtig ist, dass die Variablen an das SWF sowohl im <OBJECT>- als auch im <EMBED>-Tagangehängt werden müssen, sonst schlägt die Übergabe evtl. fehl.

Sie könnten nun in einem PHP-Script verschiedene Variablen ermitteln oder Benutzer-eingaben verarbeiten und dann den Code für das SWF inklusive der angehängten 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:

<?php

/*~ String definieren, der nachher an das SWF im Object- und Embed-Tag übergeben werden soll. Die Werte des Strings sollten URL-kodiert werden! */

$string = "?variable=".urlencode("Fish & Chips");

?>

36 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

BEISPIEL

Page 37: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

<HTML>

<BODY>

<CENTER>

<OBJECT>

<PARAM NAME=movie VALUE="meinSWF.swf<?=$string?>" WIDTH=200 HEIGHT=50

<EMBED src="meinSWF.swf<?=$string?>" WIDTH=200 HEIGHT=50>

</EMBED>

</OBJECT>

</CENTER>

</BODY>

</HTML>

übergibt an Flash bzw. an das SWF eine Variable variable.

Diese kann dort beispielsweise in einem Textfeld angezeigt werden. Dieses Textfeld mussein dynamisches Textfeld sein und entweder auf Ebene 0 liegen und den Namen variablehaben oder – sollte es nicht auf Ebene 0 liegen – den Namen _root.variable.

<?=$string?> ist eine Kurzform von <?php echo $string; ?>.

3.1.6 Caching-Verhalten

Caching – (engl.: cache = Lager, Versteck) Im Cache eines Browsers werden Webseiten,Bilddateien etc. aus dem Internet gespeichert, um bei einem erneuten Aufruf derselbenSeite die Daten nicht laden zu müssen, falls die Daten sich in der Zwischenzeit nicht ver-ändert haben. Es ist möglich, dass der Browser bei mehrmaligem Aufruf eines PHP-Scripts aus Flash fälschlicherweise annimmt, die Datei bzw. deren Ausgabe habe sichnicht verändert und so den alten (noch gespeicherten) Inhalt lädt (siehe unten).

Das Flash-Plugin übernimmt das Caching-Verhalten des jeweiligen Browsers, auf dem esinstalliert ist. Das heißt, zusätzlich zu dem SWF selbst werden Scripts, die aus Flash mitloadVariables() oder loadVariablesNum() geladen werden, im Cache des Browsers ge-speichert.

Dies kann bei mehrmaligen Aufrufen eines Scripts dazu führen, dass kein neuer Inhalt,sondern der Inhalt aus dem Browsercache geladen wird.

Um dies zu umgehen, gibt es zwei Möglichkeiten: Man kann jede Möglichkeit sowohl ein-zeln einsetzen als auch beide Möglichkeiten kombinieren. Ich empfehle, wenn möglich bei-

Dynamische Inhalte 37

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

BEISPIEL

·

HINWEIS

Page 38: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

des einzusetzen, und wenn hundertprozentig sichergestellt werden muss, dass keine Datenaus dem Browsercache geladen werden, die Lösung auf Flash-Seite. Die Lösung 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 angehängt,sodass der Browser bei jedem Aufruf annimmt, es sei ein neuer URL und deshalb die Datenneu lädt, ohne im Cache überhaupt nach (alten) gespeicherten Daten zu suchen. DieseMethode ist je nach angehängtem Wert sehr bis hundertprozentig sicher.

Oft werden im Internet Lösungen angeboten, die eine zufällig ermittelteZahl anhängen, 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) angehängt. 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 angehängt wird, dann muss sie mit ei-nem &-Zeichen von den anderen Variablen getrennt werden, nicht mit einem Fragezeichen(?).

Dies funktioniert; allerdings ist diese Lösung 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 wäre dazu perfekt geeignet:

//~ ActionScript

timeStamp = new Date().getTime();

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

Hier wird das aktuelle Datum angehängt. 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

Page 39: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Wenn Sie an den URL einen Wert anhängen, 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 können. Ebenfalls wird so unterbunden, dass die Seiten von Proxies gespeichertwerden.

Header – (deutsch: »Kopfteil«) Ein Header ist der Anfangsteil eines zu übertragendenDatenpakets. Er enthält alle wichtigen Informationen über die folgenden Daten, wie z.B. Datentyp und -länge oder hier z.B. Caching-Informationen für Proxies und Browser.

Proxyserver – (engl.: proxy = Vollmacht) Proxies dienen als Zwischenspeicher für Daten.Normalerweise wird ein Datenpaket vom Quellserver bis zum Client weitergegeben.Proxies speichern diese Daten zwischen, sodass beim nächsten Abruf derselben Infor-mation der Datenweg verkürzt werden kann.

<?php

//~ Anfang der PHP-Datei, vor jeglicher anderer Ausgabe

//~ Besagt, dass dieses Dokument nicht mehr gültig ist.header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

/*~ Besagt, dass das Dokument seit dem letzten Laden verändert wurde und somitneu geladen werden muss. */header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");

//~ Anweisungen für Proxies und Browserheader("Cache-Control: no-store");

/*~ Header gleichen Typs folgt, soll aber zusätzlich versendet werden, nicht er-setzt, deshalb zweiter Parameter false */

header("Cache-Control: must-revalidate", false);header("Cache-Control: proxy-revalidate", false);header("Cache-Control: max-age=0", false);

Dynamische Inhalte 39

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 40: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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

//~ Anweisung für ä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 für die An-weisung(en) oder weitere Anweisungen (durch Kommata separiert). Es kön-nen beliebig viele Anweisungen für 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 müssen 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 möglich, zusätzliche Header zu senden.

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

40 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Tutorial

·

HINWEIS

·

HINWEIS

Page 41: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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:

<?php

$ip = getenv('REMOTE_ADDR'); //~ IP ermitteln

$ip = "&ip=".$ip."&"; //~ Korrekt formatieren

echo $ip; //~ Ausgeben

?>

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

Page 42: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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

Anders als Umgebungsvariablen sind normale Variablen veränderbar, hierwird eine Umgebungsvariable nur zusätzlich 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 führen 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.

Zusätzlich 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 enthält.

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

3. Als Nächstes müssen wir dafür sorgen, dass die IP-Adresse in ein Flash-kompatiblesFormat umgewandelt wird. Dies erledigen wir folgendermaßen:

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

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

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

echo $ip;

5. Erstellen Sie nun einen neuen Flash-Film.

6. Im ersten Bild fügen Sie eine loadVariablesNum()-Aktion ein, die das eben erstellteScript (hier: getIP.php) auf Ebene 0 lädt.

loadVariablesNum("getIP.php", 0);

Dieser Befehl lädt das Script getIP.php auf Ebene 0. Als Aktion wurde hier weder GETnoch POST angegeben, da keine Variablen aus Flash an PHP verschickt werden müssen.

42 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 43: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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 Verzögerungen

Angenommen, das Script, das Sie aufrufen, muss, um das gewünschte Ergebnis zu liefern,erst zeitaufwändige Operationen durchführen, beispielsweise sehr große Datenmengenverarbeiten, die Anfrage an eine Datenbank weitergeben, einen anderen Server kontaktie-ren etc. Dann dauert die Ausgabe des Ergebnisses etwas länger, 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 zuerstgeprüft werden, ob dieses bereits vollständig übertragen wurde.

Dynamische Inhalte 43

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 44: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Für diese Überprüfung gibt es zwei Möglichkeiten:

Erste Möglichkeit: onClipEvent(data)

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

Bei dieser Möglichkeit ist es nicht möglich, 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 geprüft wird, ob Daten aus einem aufgerufenen Script bereits vollständig geladen wurden. Sobald der Ladevorgang beendet ist, wird eineAktion ausgeführt.

Der Ablauf ist folgender:

1. Daten werden von Flash in eine Filmsequenz geladen.

2. Mit onClipEvent(data) wird überprüft, ob sie bereits vollständig geladen wurden.

3. Wenn die Daten geladen wurden, wird eine oder mehrere Aktionen ausgeführt.

Um zu dem obigen Ergebnis zu gelangen, müssen Sie folgende Schritte ausführen:

1. Erstellen Sie einen neuen Flash-Film.

2. Erstellen Sie eine neue Filmsequenz und ziehen Sie diese aus der Bibliothek auf dieBühne.

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) lädt.

44 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 45: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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 müssen dieDaten wie in Kapitel 3.1.3 beschrieben formatiert sein. Der Inhalt unserer Datei (onClipEvent.php) ist folgender:

<?php

echo "&variable1=wert&";echo "&variable2=wert&";echo "&variable3=wert&";echo "&variable4=wert&";echo "&eoD=Geladen!&";

?>

Um das Beispiel zu vereinfachen, wird ein statischer Inhalt anstelle einesdynamischen Inhalts verwendet. Das Beispiel funktioniert selbstverständ-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-gefügt und als Ereignis »Daten« markiert werden. Dieser Parameter bewirkt, dass dieAktionen innerhalb der Klammern der Funktion onClipEvent() ausgeführt werden, so-bald Daten aus einem Script oder einer Datei per loadVariables() oder loadVariablesNum() vollständig 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 ausgeführt! Sie erhalten also keine Auskunft darüber,welche und ob überhaupt Daten geladen wurden, sondern nur, dass derLadevorgang beendet wurde. Wollen Sie überprüfen, ob die Daten, die Sieerwarten, wirklich geladen wurden, so ist es besser, die zweite Möglich-keit zu verwenden.

Zweite Möglichkeit: Schleife mit if-Abfrage

Diese Methode benötigt 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 überprüfen.

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

Page 46: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Abbildung 3.6: Aufbau einer SWF-Datei, in der mit einer if-Abfrage geprüft wird, ob Daten von einem aufgerufenenScript bereits vollständig 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 überprüft, ob die Daten bereits geladenwurden.

3. Wenn die Daten geladen wurden, wird eine oder mehrere Aktionen ausgeführt.

Erstellung der Applikation:

1. Erstellen Sie einen neuen Film.

46 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 47: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

2. Fügen Sie im fünften Frame ein neues Schlüsselbild ein und nennen Sie dieses check-Loaded.

Es muss nicht der fünfte Frame sein. Aus Gründen 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 später ge-prüft wird, ob die Variablen schon geladen wurden. Somit sollte er eineBezeichnung haben, an der man ihn eindeutig erkennen kann.

3. Wählen 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 einfügen, damit das Ganze etwas übersichtlicher wird.

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

<?php

echo "&variable1=wert&";echo "&variable2=wert&";echo "&variable3=wert&";echo "&variable4=wert&";echo "&varsLoaded=1&";

?>

Die letzte Variable ist die Variable, anhand deren Wert (true) geprüft wird, ob die restli-chen Variablen, die davor stehen, schon geladen wurden. In diesem Fall ist das dieVariable mit dem Namen varsLoaded – Sie können die Variable nennen wie Sie möchten,allerdings muss dann bei der Überprüfung 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 geprüft 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 lädt. 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

Page 48: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

5. Damit die Schleife, sollten keine Daten geladen werden oder ein Fehler im Script auftre-ten, nicht endlos abläuft (was sowohl überflüssige Ressourcen benötigt als auch denBenutzer unnötig warten lassen würde), benötigen wir weitere Funktionen. DieseFunktionen sind für die Funktion des Scripts nicht relevant; ich empfehle aber, sie zu be-nutzen, da so etwaige Fehler im Script einfach erkannt werden können.

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

startTime = getTimer();

Diese Variable brauchen wir später, 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 für den Timeoutausgeführt werden. Sie können den Timeout beliebig wählen. Denken Sie auch anModem-User, die evtl. etwas länger brauchen, um die Daten zu laden; allerdings solltenfür unsere Datenmenge zehn Sekunden ausreichen.

6. Nun muss noch ein gotoAndPlay()-Befehl eingefügt werden, der den Film zu demFrame springen lässt, an dem die Überprüfung stattfindet (in unserem Fall: Frame 5 mitder Bezeichnung checkLoaded).

7. In Frame 5/checkLoaded kommt jetzt der Code für die Überprüfung.

8. Fügen Sie eine if-Abfrage ein und wählen Sie als Bedingung varsLoaded == true.Sollten Sie in Ihrer Datei eine andere Variable zum Überprüfen des Ladestatus verwen-den, müssen 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 überprüft wird (hier: varsLoaded)beim nächsten Laden auf dieselbe Ebene nicht bereits definiert ist bzw. den Wert true(wahr) enthält und somit der Ladevorgang fälschlicherweise für beendet gehalten wird,müssen 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

Page 49: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Eine weitere Möglichkeit wäre, die Variable varsLoaded = false zu set-zen. Das Ergebnis ist dasselbe.

9. Nun können innerhalb der if-Funktion noch Befehle hinzugefügt werden, die ausge-führt werden sollen, wenn die Daten vollständig geladen wurden. In unserem Fall istdas ein gotoAndPlay() auf den Frame mit dem Namen endLoaded.

10. Um zu erkennen, ob das Script schon länger läuft, 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 größer sein, so werden die Aktionen innerhalb der if-Aktion ausgeführt.

Hüten Sie sich vor einer zu kleinen Timeout-Zeit, wenn Sie nicht genauvorausberechnen können, wie groß die Datenmenge ist oder wie schnelldie Server sind – prinzipiell gilt: besser eine zu große Timeout-Zeit alseine zu kleine. Bei wichtigen Daten ist es angebracht, auf einen Timeoutvollständig zu verzichten!

Timeout-Zeit von PHP (set_time_limit())

Ebenfalls sollte auf die Timeout-Zeit von PHP-Scripts geachtet werden. DieAusführung 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-führungszeit eines Scripts auf 0 zurückgesetzt.

Beispiel:

<?php

//~ Script läuft bereits 10 Sekunden

set_time_limit(20);

//~ ab hier läuft das Script weitere 20 Sekunden

//~ weiterer Code

?>

Dynamische Inhalte 49

Exkurs

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

·

HINWEIS

Page 50: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Wenn Sie das Zeitlimit vollständig deaktivieren wollen, müssen Sie set_time_limit(0) aufrufen. Nach diesem Aufruf läuft 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 Ausführungszeiteines Scripts zu verlängern, als entweder den SAFE MODE ab-zuschalten oder das Zeitlimit in der Konfigurationsdatei vonPHP zu verändern. Für mehr Informationen hierzu kontaktie-ren Sie bitte den Administrator Ihres ISP.

11. Solange beide Bedingungen in Frame 5 nicht erfüllt sind, läuft der Film einfach weiter.Demnach müssen wir in Frame 6 eine Aktion einbinden, die einen Rücksprung verur-sacht. Auf diese Weise werden die Abfragen so lange wiederholt, bis eine der beidenBedingungen zutrifft. Dazu fügen wir in Frame 6 einfach einen gotoAndPlay()-Befehlein, der zu der Abfrage zurückspringt.

12. In Schritt 10 haben wir ein Sprungziel festgelegt (Frame 14/endLoaded), zu dem ge-sprungen wird, wenn die Daten vollständig geladen wurden. Daher müssen wir in die-sem Frame noch eine stop()-Aktion einfügen, damit der Film nicht wieder von vornebeginnt. Hier könnten auch Befehle stehen, die nach dem Laden ausgeführt werden sol-len, beispielsweise zusätzlich noch ein trace()-Befehl.

3.2 Variablen von Flash an PHP übergebenIn diesem Unterkapitel wird darauf eingegangen, wie Daten aus Flash an ein PHP-Scriptübergeben werden können. Diesen Weg benötigt 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 müssen 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

Page 51: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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 könnenkeine 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.

Außerdem 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, würdeman folgenden Code verwenden:

//~ ActionScript

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

int methode

Dynamische Inhalte 51

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 52: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Dieser Parameter verhält sich wie bei loadVariablesNum() in Kapitel 3.1.2beschrieben. Näheres zu verschiedenen Methoden erfahren Sie in Kapitel3.2.3.

Anmerkung: Ein mit diesem Befehl aufgerufenes Script bzw. dessen Ausgabe lässt 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 lädt nicht etwa die Ausgabe des Scripts (hier: meinScript.php) inFlash, sondern öffnet dieses Script im selben Browserfenster. Die HTML-Seite, die das SWF enthält, 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) verhält, muss dieMethode vom Protokoll unterstützt werden. Es gibt viele verschiedene Methoden; die zweigebräuchlichsten heißen GET und POST.

Im Folgenden werden bei beiden Methoden Vor- und Nachteile aufgezeigt. Es ist keine ein-deutige Zuordnung möglich, da was einmal ein Nachteil ist, ein anderes Mal ebenso einenVorteil bedeuten kann. Hier wurde versucht, die verschiedenen Vor- und Nachteile gegen-einander abzuwägen 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 angehängt und dann weitergesendet. Im Browser des Anwendersist dies nach dem Absenden des Formulars in der URL-Zeile oder im Cachesichtbar.

Vorteile: Zu versendende Daten können einfach ausgewählt werden.

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

52 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 53: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die Länge des Anfrage-Strings ist bei den meisten Server-Systemen be-schränkt (1 Kbyte = 1024 Zeichen), daher können 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 Sicherheitslücke darstellt.

Um Daten mit GET zu versenden, sehen die Aufrufe folgendermaßen 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 angehängt, 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, müssen sie nicht explizit ko-diert werden, dies geschieht automatisch.

Es gibt keine Längenbeschränkung, sogar Binärdaten sind möglich (z.B. fürDatei-Uploads).

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

Um Daten mit POST zu versenden, sehen die Aufrufe folgendermaßen 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

Page 54: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

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 großenDatenmengen und/oder sensiblen Daten ist die Methode POST vorzuziehen, da es bei POSTweitaus schwieriger ist, sensible Daten auszuspionieren.

Zusätzlich zu der POST-Methode sollten diese Daten auch noch verschlüsselt 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 möglich, 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 Möglichkeiten:

• Beim Aufruf von:

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

würden die Variablen variable1 und variable2 an das Script übergeben.

• Beim Aufruf von:

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

würde die Variable variable3 an das Script übergeben werden.

• Bei folgendem Aufruf von _level2

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

würde die Variable variable4 an das Script gesendet werden.

54 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

BEISPIEL

Page 55: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

• Bei folgendem Aufruf von _level4

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

würde keine der vier Variablen an das Script übergeben werden.

Anmerkung: Um Daten aus einer anderen Ebene als der Ebene 0 (_level0bzw. _root) zu verschicken, muss diese Ebene erst angelegt werden.

Da dies zu unnötigem Datenaufkommen zwischen Flash und Script führt,sollten entweder nicht benötigte Variablen im Voraus gelöscht werden oderder Aufruf aus einer neu erstellten Filmsequenz erfolgen, in die nur dieVariablen, die versendet werden sollen, kopiert wurden.

Versenden durch Löschen der Variablen verhindern

Eine andere Möglichkeit, um auszuwählen, welche Variablen versendet werden sollen, wä-re, die nicht benötigten Variablen zu löschen. Nehmen wir folgendes Szenario:

Es sind folgende Variablen definiert:

Variable _level0.variable1 = "wert"Variable _level0.variable2 = "wert2"Variable _level0.variable3 = "wert3"

Um nun nur die Variablen variable1 und variable3 zu versenden, kann man folgendenCode verwenden:

//~ ActionScript

delete variable2;

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

In diesem Fall ist die Variable variable2 beim Aufruf des Scripts nicht mehr definiert undwird deshalb auch nicht versendet. Sollten Sie die Variable variable2 nach dem Versendenweiterhin benötigen, so ist von dieser Methode abzuraten.

Versenden durch Kopieren der Variablen verhindern

Eine weitere Möglichkeit, um festzulegen, welche Variablen versendet werden und welchenicht, wäre, die zu versendenden Variablen in eine neue (leere) Filmsequenz zu kopierenund den Aufruf zum Senden von dort zu machen.

Dynamische Inhalte 55

BEISPIEL

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 56: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Es sind folgende Variablen definiert:

Variable _level0.variable1 = "wert"Variable _level0.variable2 = "wert2"Variable _level0.variable3 = "wert3"

Um nur die Variablen variable2 und variable3 zu versenden, kopieren Siediese Variablen in eine vorher erstellte (leere) Filmsequenz (hier: emptyClip).

//~ ActionScript

_root.emptyClip.variable2 = _root.variable2;

_root.emptyClip.variable3 = _root.variable3;

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

In diesem Fall wären die drei Variablen noch unverändert auf Ebene 0 unddie Variablen variable2 und variable3 in der Filmsequenz movieClip. Vondort werden dann nur diese beiden Variablen versendet. Die Variable varia-ble1 ist zwar noch auf Ebene 0, wird aber nicht an das Script übermittelt.

Versenden durch genaue Auswahl der Variablen verhindern

Es gibt noch eine weitere Möglichkeit, die zu sendenden Variablen auszuwählen, jedochbasiert diese auf der GET-Methode und sollte somit auch nur angewendet werden, wenndie Kriterien zum Einsatz der GET-Methode (siehe Kapitel 3.2.3) zutreffen.

Man kann Variablen auch selbst an den URL anhängen, indem man beim Parameter url beieiner Funktion (getURL(), loadVariables() oder loadVariablesNum()) anstelle von einemString einen Ausdruck angibt. Ein Fragezeichen (?) leitet die Variablen dann ein (trennt sievon dem URL). Weitere Variablen werden mit dem &-Zeichen voneinander abgetrennt.

Das folgende Beispiel öffnet das Script meinScript.php in einem neuen Brow-serfenster und übergibt die Variablen var1 und var2.

//~ ActionScript

var1 = "Hallo";var2 = "Welt";var3 = "Ich werde nicht angehängt, da ich unnötig bin";varString = "&jetzt=mehrere&verknuepfte=variablen";

getURL("meinScript.php?var1="+var1+"&var2="+var2+varString,"_blank");

Der ersten Variable muss ein Fragezeichen (?) vorangestellt werden, damitder Browser erkennt, dass der URL aufgehört hat und eine Variable folgt. Alleweiteren Variablen müssen durch ein &-Zeichen getrennt werden.

56 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

BEISPIEL

·

BEISPIEL

Page 57: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

So werden in diesem Beispiel nur var1 und var2 versendet, var3 ist zwar im SWF definiert,wird aber nicht weitergegeben. varString enthält mehrere Variablen, sie sind bereits imrichtigen Format innerhalb des Strings gespeichert.

Das Script (hier: meinScript.php) enthält nach oben stehendem Aufruf die Variablen

$var1$var2$hier$variablen

mit den jeweiligen Werten.

Bei dieser Methode gelten alle Beschränkungen, die auch der GET-Methodezu eigen sind. Daher müssen Werte von Variablen, die nicht-alphanumeri-sche Zeichen (ausgenommen -._ ) enthalten, kodiert werden (siehe Kapitel3.1.3).

3.2.5 Arrays

Bei dem Aufruf eines Scripts aus Flash per POST oder GET werden Arrays als kommasepa-rierte Liste übergeben. Man erhält demnach in PHP einen String mit dem gleichen Namendes Arrays in Flash. Ein Array, das in Flash so aussieht:

//~ ActionScript

meinArray = new Array();meinArray[0] = "wert";meinArray[1] = "wert";meinArray[2] = "wert";

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

wird an ein PHP-Script so übergeben:

$meinArray = wert,wert,wert

Die Variable $meinArray enthält also in PHP den Wert wert,wert,wert.

Sollten im Array Stellen nicht definiert sein, also quasi so:

//~ ActionScript

meinArray = new Array();//~ hier "fehlt" ein ElementmeinArray[1] = "wert";meinArray[2] = "wert";//~ hier "fehlen" zwei ElementemeinArray[5] = "wert";

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

Dynamische Inhalte 57

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

·

HINWEIS

Page 58: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

dann wird für jeden fehlenden Wert ein Komma gesetzt. Die VariablemeinArray würde in PHP bei oberem Beispiel also so aussehen:

$meinArray = ,wert,wert,,,wert

Die Variable $meinArray enthält in PHP also den Wert ,wert,wert,,,wert. Das Komma amBeginn wird gesetzt, weil bei einem Array die Zählung bei null (0) beginnt. Somit interpre-tiert Flash dies auch als fehlendes Element.

Leere Elemente werden also auch übermittelt. Das ist deshalb wichtig, damit die Indizeswieder richtig rekonstruiert werden können.

Sollte man also in PHP die kommaseparierte Liste wieder in ein Array umwandeln wollenund benutzt man dazu den Befehl split(), dann erhält man zwar ein Array mit den richti-gen Werten an der richtigen Stelle, jedoch sind die »Lücken« mit leeren Werten aufgefüllt.

Will man dies umgehen, so darf man den String nicht mit split() trennen, sondern mussdie Funktion preg_split() mit dem Flag PREG_SPLIT_NO_EMPTY (siehe unten) verwenden.Allerdings behalten die Elemente bei dieser Funktion nicht ihre angestammten Stellen. DieStruktur des Arrays bleibt also nicht erhalten, da Flash die Elementschlüssel (keys) nichtmit übergibt.

Schlüssel eines Arrays/Key: Wenn array[x] = 0, dann ist x der Schlüssel (engl.: »key«).

Die Funktion preg_split()

array preg_split (string pattern, string subject [, int limit [, int flags]])

Mit preg_split() lässt sich ein String anhand eines regulären Ausdruckstrennen. Es wird ein Array zurückgegeben.

string patternDieser Parameter ist der reguläre Ausdruck, mit dem der String in Elementezerlegt werden soll. Hilfe zu regulären Ausdrücken finden Sie z.B. unterwww.koehntopp.de/php/regexp.html (vielen Dank an die Macher des PHP-FAQs).

string subjectDieser Parameter ist der String, der zerlegt werden soll.

int limitDieser Parameter gibt an, in wie viele Elemente der String maximal zerlegtwerden soll. Der Defaultwert ist kein Limit. Wollen Sie weitere Flags ange-ben, die maximale Anzahl der Elemente aber nicht beschränken, so tragenSie hier –1 ein.

58 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

HINWEIS

Tutorial

Page 59: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

int flagsMit Hilfe von so genannten Flags (engl. flag = Markierung, Flagge) könnenSie das Verhalten der Funktion preg_split() beeinflussen. Es gibt zweiFlags, einmal:

PREG_SPLIT_NO_EMPTYDieses Flag sorgt dafür, dass von preg_split() keine leeren Elementezurückgegeben werden.

und:

PREG_SPLIT_DELIM_CAPTUREWenn dieses Flag aktiviert ist, dann werden die in Klammern eingeschlosse-nen Elemente im regulären Ausdruck aufgezeichnet und ebenfalls wieder-gegeben.

Wenn Sie beide Flags anwenden möchten, so trennen Sie diesemit einem | (senkrechter Strich/pipe) voneinander.

Der Code dazu ist folgender:

<?php

/*~ gibt ein Array mit sechs Elementen (davon einigen leeren) zurück.Die Elemente sind an denselben Stellen wie in Flash.*/

$array1 = split(",", $meinArray);

/*~ gibt ein Array mit drei Elementen (keine leeren) zurück.Die Elemente sind jedoch neu (aufsteigend) geordnet.*/$array2 = preg_split("/,/", $meinArray, -1, PREG_SPLIT_NO_EMPTY);

?>

Assoziative Arrays

Assoziatives Array – Dies bedeutet, dass im Index nicht nur Zahlen stehen, sprich derSchlüssel ist nicht-numerisch.

Dynamische Inhalte 59

Tutorial

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

»normales« Array:

Farben10 = Blau1 = Rot2 = Weiß

assoziatives Array:

Farben2dunkel = Blaumittel = Rothell = Weiß

Farben1[0] und Farben2["dunkel"] würden jeweils den Wert »Blau« liefern.

·

BEISPIEL

Page 60: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Bei der Übergabe von Arrays aus Flash an PHP per POST oder GET ist zu beachten, dassWerte von Arrays nur dann übergeben werden, wenn der Schlüssel eine Zahl ist (Bug?!).

Angenommen, innerhalb von Flash wurde mit folgendem Code

//~ ActionScript

meinArray = new Array();meinArray[0] = "1";meinArray[1] = "2";meinArray["key"] = "Wird nicht versendet";meinArray[2] = "3";

ein Array gesetzt, dann ist der Wert, der im PHP-Script ankommt:

$meinArray = 1,2,3

In Flash hat das Array vier Elemente; wenn es in PHP ankommt, hat es nur noch drei: DasElement mit dem Schlüssel key wurde nicht mit übergeben.

Man muss also darauf achten, dass beim direkten Senden eines Arrays keine Werte mit ei-nem String als Schlüssel vorhanden sind.

Mehrdimensionale Arrays

Mehrdimensionales Array – Man spricht von einem mehrdimensionalen Array, wenndie Werte eines Arrays wiederum Arrays sind.

Wenn man Arrays mit mehreren Dimensionen hat und diese an ein Script weitergibt, sowerden alle weiteren Dimensionen der ersten angehängt.

Angenommen, in Flash ist ein Array so definiert:

//~ ActionScript

meinArray = new Array();meinArray[0] = "1";meinArray[1] = "2";meinArray[2] = "3";meinArray[3] = new Array();meinArray[3][0] = "4";meinArray[3][1] = "5";meinArray[3][2] = new Array();meinArray[3][2][0] = "6";

Dieses Array hat drei Dimensionen. Die erste hat drei Werte (1, 2 und 3), die zweite hatzwei Werte (4 und 5) und die dritte hat einen Wert (6).

Dieses Array würde dem PHP-Script von Flash so übergeben werden:

$meinArray = 1,2,3,4,5,6

60 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 61: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Sie sehen also, dass alle weiteren Dimensionen eines Arrays an die erste angehängt unddann in eine kommaseparierte Liste konvertiert wurden. Die Dimensionen gehen also ver-loren.

Wie im vorherigen Abschnitt angesprochen, werden Werte mit nicht-numeri-schen Schlüsseln nicht übergeben. Dasselbe gilt auch, wenn eine Dimensioneinen String als Schlüssel hat, sprich ein Array, das so definiert ist:

//~ ActionScript

meinArray = new Array();meinArray[0] = "1";meinArray[1] = "2";meinArray[2] = "3";meinArray["key"] = new Array();meinArray["key"][0] = "4";meinArray["key"][1] = "5";meinArray["key"][2] = new Array();meinArray["key"][2][0] = "6";

Bei diesem Array hat die zweite Dimension den Schlüssel key.

Das Array kommt im PHP-Script so an:

$meinArray = 1,2,3

Sie sehen, dass die dritte Dimension, obwohl sie einen numerischen Wert als Schlüssel hat,nicht übergeben wird. Dies liegt daran, dass das zweite Array schon nicht mehr übergebenwird.

Arrays korrekt an PHP übergeben

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

Im vorangegangenen Abschnitt wurde auf Probleme eingegangen, die bei der direktenÜbergabe von Arrays aus Flash an PHP auftreten Ich möchte hier noch einmal näher erläu-tern, warum wir die folgende Funktion benötigen, um ein zufrieden stellendes Ergebnis zubekommen.

Angenommen, man hat in Flash ein Array, das normalerweise als kommaseparierte Listeübergeben wird. Diese Übergabe kann fehlschlagen, wenn innerhalb des Arrays Datenauch Kommata enthalten.

Beim splitten anhand den Kommata wird dann nicht unterschieden zwischen Kommata,welche einzelne Elemente trennen und Kommata innerhalb von Daten. Dies würde dazuführen, dass Elemente und Daten sich vermischen und das im Endeffekt erhaltene Arraysomit unbrauchbar ist.

Dynamische Inhalte 61

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 62: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Weiterhin übergibt Flash keine assoziativen Arrays, also keine Arrays mit nicht-numeri-schen Schlüsseln, sprich es würden in einem solchen Fall einfach Elemente fehlen.

Abbildung 3.8: Der Prototyp printArray wandelt ein in Flash erstelltes Array in einen String um, der von PHP korrektinterpretiert wird.

Um diese beiden Hürden zu überwinden, muss man einen Parser verwenden, der einArray in Flash in die Standardschreibweise (arrayName[key]=value) umschreibt. DiesenString übergibt man dann an das PHP-Script und wandelt dort die Daten mit der Funktionparse_str() wieder in das Array um. Dies wird im Folgenden beschrieben.

Nun könnte man sagen, es sei einfacher, die Variablen in der Form, wie PHP sie benötigt,direkt zu erstellen. Dies funktioniert jedoch nur mit einem Parser, da Flash keine Variablenmit eckigen Klammern zulässt, die innerhalb von Flash deklariert werden (Bug?!).

Es ist also nicht möglich, in Flash beispielsweise folgende Variablen (nicht als Array) zu de-klarieren:

62 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

meinArray = new Array();meinArray[0] = "1";meinArray[1] = "2";meinArray["key"] = "3";meinArray["key2"] = new Array();meinArray["key2"][0] = "4";meinArray["key2"][3] = "5";meinArray["key2"]["key3"] = new Array();meinArray["key2"]["key3"][0] = "6";

Array.prototype.printArray = function (myArrayName){

var tempString = this.__pA(myArrayName);delete __tmp__;return tempString;

}

Array.prototype.__pA = function (arrayName){

for (var i in this) {if (typeof(this[i]) == "object") {

this[i].__pA(arrayName+"["+i+"]",destString);

} else {if (typeof(this[i]) != "function") {

__tmp__ += arrayName+"["+i+"]="+this[i]+"&";} //~ end if

} //~ end if else} //~ end for

return __tmp__;} //~ end function

arrayString = meinArray.printArray("zahlen");delete meinArray; //~ altes Array entfernengetURL ("meinScript.php","_self", "POST");

Page 63: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ ActionScript

meineVariable[1] = wert1meineVariable[2] = wert2meineVariable[key] = wert3

Wir müssen also eine Funktion schreiben, die uns aus einem Array einen String in demFormat zurückgibt, wie wir es benötigen (vgl. Abbildung 3.8).

Der Wert der Variable arrayString in Abbildung 3.8 wäre dann:

zahlen[key2][key3][0]=6&zahlen[key2][3]=5&zahlen[key2][0]=4&zahlen[key]=3&zahlen[1]=2&zahlen[0]=1&

Dieses Format wird von PHP korrekt interpretiert, und die angegebenen Arrays sind inPHP nachher auch als solche ansprechbar.

Wenn das PHP-Script mit diesen Parametern aufgerufen wurde, dann kann man innerhalbvon PHP direkt auf die Variablen zugreifen, indem man sie aus dem in Flash erstelltenString herausparst. Dies geschieht mit Hilfe der Funktion parse_str().

Die Funktion parse_str()

void parse_str (string str [, array arr])Die Funktion parse_str() erstellt aus einem String die entsprechenden Vari-ablen.

string strDieser Parameter ist der String, aus dem die Variablen extrahiert werdensollen.

array arr]Dieser Parameter ist optional. Sie können ein Array angeben, in das dieVariablen geschrieben werden. Lässt man den zweiten Parameter weg, sosind die Variablen direkt ansprechbar.

Beispiel: Angenommen, wir haben einen String

$string = "&variable=wert&testArray[0]=wert";

und parsen diesen mit der Funktion parse_str() folgendermaßen:

parse_str($string);

dann lässt sich nach dem Parsen mit

$variable;$testArray;

auf die Daten zugreifen. Geben wir ein zweites Argument an, etwa so:

parse_str($string, $newArray);

Dynamische Inhalte 63

Tutorial

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 64: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

ließe sich nachher auf die Variablen so zugreifen:

$newArray["variable"];$newArray["testArray"][0];

Wenn Sie nicht genau wissen, wie die Variablen heißen werden,die in dem String enthalten sind, dann ist es sinnvoll, einenzweiten Parameter anzugeben, da eventuell bereits verwendeteVariablen mit gleichem Namen überschrieben werden. GebenSie hingegen ein Array an, in das die Variablen geschriebenwerden, kann dies nicht passieren (sofern das als Argument an-gegebene Array ebenfalls noch nicht deklariert wurde).

Um nun also unseren String, den wir aus Flash bekommen haben, zu parsen und das Pro-dukt von zahlen[1] und zahlen["key"] zu errechnen, benutzen wir folgenden PHP-Code:

<?php

parse_str($arrayString);

echo "Errechnete Zahl: ".($zahlen[1] * $zahlen["key"]);

?>

Dieser Code multipliziert den Wert des ersten Elements des Arrays $zahlen mit dem Wertdes Elements mit dem Schlüssel key und gibt das Ergebnis aus.

Auf dem Bildschirm bzw. im Browser würde dann

Errechnete Zahl: 6

ausgegeben werden.

Wenn Variablennamen Leerzeichen enthalten, also z.B. so: &meine+Variable=wert (das +-Zeichen kodiert hier das Leerzeichen), dann werden diese durchUnterstriche ersetzt, die Variable hieße in diesem Beispiel also nachher meine_Variable.

Sie können den String selbstverständlich auch direkt an den URL anhängen –quasi so:

//~ ActionScript

getURL("meinScript.php?"+arrayString, "_self");

würde einen Aufruf ergeben, der so aussähe:

meinScript.php?array[0]=wert1&array[1]=wert2&array[key]=wert3

Dadurch können Sie auf die Variablen bzw. auf das Array $zahlen in PHP direkt zugreifen.Jedoch schränkt dies das Anwendungsgebiet dieser Möglichkeit der Übergabe von Arrayswieder ein, da die GET-Methode verwendet wird (siehe Kapitel 3.2.3).

64 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

·

HINWEIS

·

BEISPIEL

Tutorial

Page 65: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Sinnvoller und eleganter ist es daher, die parse_str()-Methode von PHP zu verwenden,um aus dem String wieder das entsprechende Array zu formen.

3.2.6 Verarbeitung übergebener Daten in PHP

Nachdem Variablen aus Flash an PHP übergeben wurden, kann man auf diese zugreifen.Wie das funktioniert, wird in den folgenden Abschnitten erklärt.

Ansprechen von Variablen

Auf übergebene Daten lässt sich in PHP sehr einfach zugreifen. Es ist nicht nötig, denAnfragestring in seine Bestandteile zu zerlegen, wie z.B. in Perl. PHP erledigt das vonselbst für uns. Wenn man ein PHP-Script folgendermaßen aufruft

meinScript.php?variable=wert

so kann man innerhalb von PHP auf die übergebene Variable mit

$variable

zugreifen (Variablen haben in PHP immer ein vorangestelltes $-Zeichen). Dasselbe gilt fürArrays (siehe auch Kapitel 3.2.5). Bei dem Aufruf

meinScript.php?array[0]=wert

kann man auf das gesamte Array mit der Variable

$array

und auf einzelne Elemente (hier Element 1) mit

$array[0]

zugreifen.

Das Anhängen an den URL ist gleichbedeutend mit der GET-Methode (siehe Kapitel 3.2.3).Auf Variablen, die per POST übergeben werden, wird genauso zugegriffen.

Anders als in Flash sind Variablennamen in PHP case-sensitive. Das heißt, inPHP wird bei der Benennung von Variablen zwischen Groß- und Klein-schreibung unterschieden.

<?php

$variable = "wert"; //~ alles kleingeschrieben$VARIABLE = "wert"; //~ Alles großgeschrieben$Variable = "wert"; //~ erstes Zeichen groß

?>

deklarieren drei unterschiedliche Variablen.

Dynamische Inhalte 65

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

·

BEISPIEL

Page 66: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

$HTTP_POST_VARS und $HTTP_GET_VARS

Es kann es sein, dass man nicht genau voraussagen kann, wie viele Variablen an ein PHP-Script übergeben werden und wie deren Namen lauten. In diesem Fall kann man nicht di-rekt auf die Variablen zugreifen, daher muss man einen kleinen Umweg gehen. Dazu gibtes zwei durch PHP vordefinierte Variablen.

Das ist einmal für mit der Methode POST übergebene Variablen das Array

$HTTP_POST_VARS

und für Variablen, die mit der GET-Methode übergeben wurden, das Array

$HTTP_GET_VARS

In diesen Arrays befinden sich die per GET bzw. per POST übergebenen Variablen. (Ab PHPVersion 4.1.0 sind die Namen der Arrays $_POST bzw. $_GET. In PHP 4.1.x existieren die »al-ten« Variablen noch, sie werden aber in späteren Versionen abgeschafft werden, es ist alsosinnvoll, gleich die neuen Variablen zu verwenden, wenn man weiß, dass man eineApplikation für PHP > 4.1 programmiert.)

Beide dieser Arrays lassen sich wie normale Arrays verwenden. Der Schlüssel ist derVariablenname und der Wert ist der Variablenwert. Wenn man nun ein PHP-Script folgen-dermaßen aufruft:

meinScript.php?variable1=wert&variable2=wert&array[0]=wert

Dieser Aufruf eines Scripts entspricht dem Senden von Variablen mit der GET-Methode. Umdie eben übergebenen Variablen auszugeben, muss der Inhalt des Scripts meinScript.phpfolgender sein:

<?php

print_r($HTTP_GET_VARS);

?>

Die Funktion print_r() gibt das Array auf dem Bildschirm aus. Wenn man den Quelltextder Ausgabe betrachtet, sieht man sogar die genaue Struktur der Arrays. Im Browser wirddann Folgendes angezeigt:

Array(

[variable1] => wert[variable2] => wert[array] => Array

([0] => wert

))

66 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 67: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Diese Werte befinden sich im Array $HTTP_GET_VARS. Das Array $HTTP_POST_VARS ist in die-sem Fall leer.

Wenn man nun beispielsweise den Wert der Variable variable1 und den Wert des erstenElements des Arrays array ausgeben möchte, müsste man das mit folgendem Code ma-chen:

<?php

echo $HTTP_GET_VARS["variable"];

echo $HTTP_GET_VARS["array"][0];

?>

Dieser Code gibt auf dem Bildschirm bzw. im Browser

wertwert

aus. Des Weiteren kann es sein, dass man abgesehen von Anzahl und Namen der übergebe-nen Variablen auch die Methode nicht kennt oder eventuell beide Methoden benutzt. Fürdiesen Fall gibt es die Funktion array_merge().

Die Funktion array_merge()

array array_merge (array array1, array array2 [, array ...])

Die array_merge()-Funktion fügt beliebig viele Arrays zu einem einzigenzusammen und gibt dieses zurück.

Beispiel:

<?php

$array1 = array(1,2,3);$array2 = array(4,5,6);$array3 = array(7,8,9);

$newArray = array_merge($array1, $array2, $array3);

/*~ Das Array $newArray enthält jetzt die Werte 1,2,3,4,5,6,7,8 und9 */

?>

Nach PHP Version 4.1.0 sind im Array $_REQUEST alle GET-, POST- undCOOKIE-Variablen enthalten. Es ist also nicht mehr nötig, diese mit array_merge() zusammenzuführen. Das Zusammenführen von diesen kann bei-spielsweise sinnvoll sein, wenn man sowohl per GET als auch per POST Datenübergibt, auf diese aber in einem einzigen Schritt zugreifen bzw. das zusam-mengeführte Array in einem Schritt durchlaufen möchte.

Dynamische Inhalte 67

Tutorial

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 68: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

PHP-Version < 4.1.0

<?php

$array = array_merge($HTTP_POST_VARS, $HTTP_GET_VARS);//~ Das Array "$array" hat nun als Inhalt beide Arrays.

print_r($array);

?>

Wenn dieser Aufruf innerhalb einer Funktion oder Klasse geschieht, müssen Sie vorher dieArrays $HTTP_POST_VARS und $HTTP_GET_VARS importieren.

PHP-Version < 4.1.0

<?php

function foo(){

global $HTTP_POST_VARS; //~ entweder soprint_r($HTTP_POST_VARS);

//~ oder:

$getArray = $GLOBALS["HTTP_GET_VARS"];print_r($getArray);

}

?>

Dies sind zwei Methoden, um auf das Array $HTTP_POST_VARS global zuzugreifen.

Die erste Methode unterscheidet sich leicht von der zweiten. Bei der ersten Methode wirddas Array $HTTP_POST_VARS als global deklariert, somit kann man direkt innerhalb derFunktion darauf zugreifen. Bei der zweiten Methode wird einem neuen Array (hier:$getArray) der Inhalt des Arrays $HTTP_GET_VARS zugeordnet. Zugegriffen wird hier aufdas Array nicht dadurch, dass es global deklariert wird, sondern durch ein global gültigesvon PHP definiertes Array ($GLOBALS), das das Array $HTTP_GET_VARS enthält.

Der gängigere Weg ist der erste, jedoch gibt es weder Vor- noch Nachteile –bis auf den geringfügigen Umstand, dass bei der zweiten Möglichkeit mini-mal mehr geschrieben werden muss.

Ab PHP Version 4.1.0 existieren (wie oben bereits gesagt) die Arrays $_GET, $_POST,$_COOKIE und $_REQUEST anstelle der »alten« $HTTP_*_VARS.

Es ist nicht nötig, $_REQUEST in eine Funktion oder Klasse zu importieren. Der Gültigkeits-bereich dieses Arrays ist global.

68 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

BEISPIEL

·

HINWEIS

Page 69: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

PHP-Version = 4.1.0

<?php

print_r($_REQUEST);

?>

Die Arrays $_GET, $_POST und $_COOKIE sind ebenfalls bereits global.

PHP-Version >= 4.1.0

<?php

function foo(){

print_r($_POST);print_r($_GET);

// Hier kommt weiterer Code}

?>

In dem Code oben haben Sie globalen Zugriff auf die Arrays ohne vorherigen Import.

3.2.7 Beispiel: Übergabe und Manipulation eines Strings

Um die Funktionsweise einer Übergabe zu verdeutlichen, ist im Folgenden ein sehr einfa-ches Beispiel erklärt. Es wäre in diesem Falle nicht unbedingt nötig, PHP einzusetzen, umzum gewünschten Ergebnis zu kommen, aber um die Arbeitsweise zu verdeutlichen, ist esgut geeignet. Dieses Beispiel befindet sich im Ordner Beispiele\reverseName\ auf der CD-ROM.

Abbildung 3.9: Dieser Flash-Film erlaubt es dem Benutzer, seinen Namen einzugeben, der dann URL-kodiert und anein PHP-Script weitergegeben wird.

Dynamische Inhalte 69

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

>

·

HINWEIS

Page 70: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Der Ablauf ist folgender:

1. Der Besucher wird zur Eingabe seines Namens aufgefordert.

2. Der Name wird URL-kodiert und an ein PHP-Script weitergeleitet.

3. In PHP wird der Name umgedreht und wieder an den Browser ausgegeben.

Erstellung der Applikation:

1. Erstellen Sie einen neuen Film.

2. Legen Sie im ersten Frame ein leeres dynamisches Textfeld mit dem Namen name an.

3. Erstellen Sie einen Button, ziehen Sie ihn auf den Arbeitsbereich und geben Sie ihm fol-gende Aktionen:

on (release) {

getURL("reverseName.php?name="+escape(name));

}

Bei einem Klick auf diesen Button wird der Inhalt des Textfeldes URL-kodiert mit demVariablennamen name an das PHP-Script reverseName.php angehängt.

4. Der Inhalt des PHP-Scripts reverseName.php ist folgender:

<?php

$name = strrev($name); //~ String umkehren

echo $name; //~ Ausgeben

?>

Die Funktion strrev() kehrt den übergebenen String um. Dann wird er wieder ausge-geben.

Die Funktion strrev()

string strrev (string string)Diese Funktion gibt den String string umgekehrt zurück.

Beispiel:

<?phpecho strrev("ollaH");?>

gibt aus:

Hallo

70 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Tutorial

Page 71: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

3.3 Beispiel: Ein Feedback-FormularDieses Beispiel befindet sich im Ordner Applikationen\swfFeedback\ auf der CD-ROM.

Inhalt des SWF:

Abbildung 3.10: Dieser Flash-Film istein komplettes Feedback-Formular inFlash, das den Status der E-Mail bzw.auftretende Fehler an Flash zurückgibt.

Dynamische Inhalte 71

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 72: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Der Ablauf ist folgender:

1. Die Daten werden vom Besucher eingegeben und an das PHP-Script übergeben.

2. Dort werden die Daten auf Gültigkeit überprüft. (Ist die E-Mail-Adresse gültig? Sind al-le Felder ausgefüllt?)

3. Der Ergebniscode wird an Flash zurückgegeben und dort ausgewertet.

4. Bei einem Fehler erscheint die Fehlermeldung, und der User wird zur Korrektur aufge-fordert. Ansonsten erscheint eine Meldung, die besagt, dass die E-Mail erfolgreich ver-schickt wurde.

Aufbau der Applikation:

1. Erstellen Sie einen neuen Film.

2. Erweitern Sie die Länge der vorhandenen Ebene auf drei Frames.

3. Erstellen Sie eine weitere Ebene mit drei Frames.

4. Auf einer der Ebenen fügen Sie drei Schlüsselbilder ein (hier auf der Ebene 2). Im erstenSchlüsselbild sind die Daten, die zum Versenden gebraucht werden (in unserem Fallwären das die Felder: email, subject und message). Sollten Sie Eingabefelder mit ande-ren Variablennamen oder zusätzliche Eingabefelder benötigen, so müssen Sie das PHP-Script später entsprechend anpassen.

Fügen Sie nun diese drei Texteingabefelder mit den entsprechenden Namen im erstenSchlüsselbild ein. Außerdem wird eine stop()-Aktion benötigt, damit der Film nichteinfach weiterläuft, sondern auf die Eingabe des Besuchers wartet.

5. Im zweiten Schlüsselbild fügen Sie einen Text ein, der während des Übertragungsvor-gangs eingeblendet werden soll. In unserem Fall steht da »Bitte warten«; der Text ist je-doch nicht relevant, es kann genauso eine Ladeanimation oder ein anderer Text sein.

Ebenfalls in diesem Schlüsselbild sollte auch das Array deklariert werden, das die ver-schiedenen Statustexte enthält. In unserem Fall ist das messageArray. Es wäre auchdenkbar, die Statusmeldungen vom PHP-Script übergeben zu lassen. Dies erfordert je-doch zusätzliche Zeit, zusätzliches Datenvolumen und ist nicht zwingend nötig, da dieMeldungen immer dieselben bleiben. Aus diesen Gründen wurde hier davon abgesehenund das Array gleich in Flash deklariert.

6. Im dritten Schlüsselbild müssen Sie ein dynamisches Textfeld einfügen, damit dasErgebnis der Übermittlung ausgegeben werden kann. In unserem Fall lautet die Variabledes dynamischen Textfeldes statusMessage. Fügen Sie auch einen Button ein, mit demzum ersten Frame zurückgesprungen werden kann, falls es einen Fehler bei der Über-tragung gab, oder benötigte Daten nicht oder falsch angegeben wurden und vomBesucher korrigiert werden müssen.

72 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 73: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

7. Nun benötigen wir noch den ausführenden Teil des Flash-Films. Fügen Sie hierzu einebeliebige (leere) Filmsequenz auf die Ebene ein, die keine Schlüsselbilder enthält.Nennen Sie diese Filmsequenz emptyClip. Weisen Sie nun der Filmsequenz eineonClipEvent(data)-Aktion zu, die – nachdem die Daten bzw. das Ergebnis geladenwurde – die Variable statusMessage mit dem Arrayelement gleichsetzt, das zur jeweili-gen result-Variable (von PHP zurückgegeben) gehört. Beispiel: Wenn die E-Mail-Adresse falsch eingegeben wurde und ungültig ist, dann gibt das PHP-Script

&result=3&

aus. Das dritte Element des Arrays messageArray enthält die entsprechende Statusmel-dung dazu. Der von Flash ausgeführte Code wäre dann:

_root.statusMessage = _root.messageArray[3];

Da dies jedoch dynamisch geschehen muss, wird anstelle der 3 die Variable eingesetzt,die das PHP-Script zurückgibt. Der Wert dieser Variable enthält ja den Statuscode. Alsoso:

_root.statusMessage = _root.messageArray[result];

Danach sollte zum nächsten Frame auf der Hauptzeitleiste gesprungen werden.

8. Um die Daten der Textfelder an das PHP-Script zu übertragen und die Daten zu emp-fangen, muss nun noch im ersten Frame (auf der Ebene mit den Schlüsselbildern) einButton erstellt werden, der per loadVariables den URL des PHP-Scripts aufruft, dieDaten per POST an jenes überträgt und dann zum nächsten Frame springt. Geben Sie alsZiel für die Daten die Filmsequenz an, die Sie auf der Ebene ohne Schlüsselbilder er-stellt haben.

9. Nun könnten Sie dem dritten Schlüsselbild noch ein Script zuordnen, das die (betroffe-nen) Textfelder leert, damit niemand Ihren Posteingang mit unnötigen, eventuell leerenE-Mails füllt (würden Sie diese nicht leeren, müsste die entsprechende Person ja nur aufdie Senden-Taste klicken, um E-Mails zu verschicken).

Anhand des Wertes der Variable result, die von PHP zurückgegeben wird, können Sieerkennen, wo der Fehler lag. (Die Variable result befindet sich nach dem Ladevorganginnerhalb der leeren Filmsequenz. Wenn Sie die leere Filmsequenz auf der ersten Ebenemit einem anderen Namen benannt haben als im Beispiel, so müssen Sie das Script ent-sprechend anpassen.)

In unserem Fall werden die Textfelder nur geleert, wenn die E-Mail korrekt versendetwurde, andernfalls bleiben die eingegebenen Daten in den Textfeldern erhalten.

Dynamische Inhalte 73

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 74: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Abbildung 3.11: Ablauf einer Feedback-Meldung mit dem beschriebenen Formular. Hier gibt der Besucher zuerstkeine E-Mail-Adresse ein, er wird aufgefordert, alle benötigten Felder auszufüllen. Nachdem er dies getan hat, wirddie Feedback-Meldung versendet.

74 Kapitel 3

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

E-Mail:

Betreff:

Mitteilung:

Hallo

schöne Grüße!

Senden

E-Mail:

Betreff:

Mitteilung:

[email protected]

Hallo

schöne Grüße!

Senden

Bitte alle benötigtenFelder ausfüllen

Zurück

Alles okay, eMail versendet

Zurück

Page 75: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

KAPITEL 4PHP, MYSQL UND FLASH

Page 76: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

MySQL (www.mysql.com) ist ein relationales Datenbanksystem. Abfragen bzw. manipulierenlässt sich die Datenbank mit der Sprache SQL (Structured Query Language).

Da sowohl PHP als auch MySQL frei erhältlich sind, wird diese Kombination von vielenISPs angeboten.

Das in diesem Kapitel Gezeigte funktioniert prinzipiell auch mit allen ande-ren Datenbanksystemen. Eventuell sind kleinere Anpassungen nötig.

PHP bietet ein komfortables Interface zur Kommunikation mit MySQL und ist deshalb einebeliebte Sprache zum Aufbau von kleineren Applikationen mit MySQL, wie Foren undGästebücher.

Zusammen mit Flash ergeben sich noch weitere Einsatzmöglichkeiten wie z.B. Online-Spiele oder Chats.

Mehr Informationen, Beispiele und Tutorials finden Sie unter: www.little-idiot.de/mysql/

4.1 Interaktionsschema

Abbildung 4.1: Ablauf der Interaktion zwischen Flash und der Datenbank über ein serverseitiges Script

Zuerst werden aus Flash an das Script Daten übergeben. Das Script formt die Daten umund gibt diese im korrekten Format (SQL) an die Datenbank weiter. Diese gibt das ge-wünschte Ergebnis zurück, welches das Script aufbereitet, also in ein für Flash lesbaresFormat umwandelt und ausgibt. Die Ausgabe wird von Flash aufgefangen und kann dannweiterverwendet werden.

Aus dem Interaktionsschema ergibt sich Folgendes:

• Flash kann nicht direkt auf eine Datenbank zugreifen, es wird also ein »Übersetzer«benötigt: ein serverseitiges Script, das die entsprechende Datenbank ansprechen kann(in unserem Fall ist das PHP).

• Es gibt zwei verschiedene Interaktionsketten, beide laufen nacheinander ab und sindabhängig voneinander. Das Script in der Mitte muss anhand der Daten, die es von dereinen Seite bekommt (in unserem Fall ist das Flash), die zweite Interaktion einleiten.

76 Kapitel 4

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 77: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Es wäre theoretisch möglich, ein PHP-Script zu erstellen, das ein bereits kor-rekt formatiertes SQL-Statement aus Flash nur an die Datenbank weiterlei-tet, das Ergebnis empfängt, dieses dann aufbereitet und an Flash zurückgibt.Dies wäre eine sehr komfortable Methode, da man ohne weiteren PHP-Codedirekt an die gewünschten Ergebnisse kommen würde. Von dieser Methoderate ich jedoch dringend ab.

Daten aus vertrauensunwürdiger Quelle (sprich: vom Besucher) dürfen nie-mals ohne Validierung im PHP-Script verwendet werden.

Nehmen wir an, der Programmierer des Flash-Filmes ruft den URL einessolchen Scripts mit einem SQL-Statement auf, das Daten aus einer Daten-bank liest. Dies ist an sich harmlos, solange die Daten öffentlich sind. Da derURL aber bekannt ist (er wird von Flash ja aufgerufen), könnte eine Dritt-person anstelle des vorgesehenen SQL-Statements ohne weiteres auch einenBefehl an das Script schicken, das Daten aus der Datenbank löscht oder imschlimmsten Falle die gesamte Datenbank zurücksetzt.

Nehmen Sie sich also die Zeit, Ihre Scripts auf einen individuellen Fall anzu-passen und überprüfen Sie jede Eingabe, die vom Client kommt. So ersparenSie sich unnötigen Ärger und lassen weniger Lücken für Hacker offen.

4.2 Die Klasse swiffSQLMit der Klasse swiffSQL können Sie direkt aus Flash auf eine MySQL-Datenbank zugrei-fen.

Abbildung 4.2: Das swiffSQL-Logo. Vielen Dank an Marco Stix (www.prografix.at).

Sie legen in Flash einen SQL-String fest und schicken diesen an ein PHP-Script, in das dieKlasse eingebunden ist. Zurück erhalten Sie wahlweise Variablen in der Form:

&row_name_1=wert1&&row_name_2=wert2&

&result_total=2&&result=1&

Oder XML-Daten in der Form:

PHP, MySQL und Flash 77

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 78: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

<?xml version="1.0" encoding="iso-8859-1" ?><result value="1">

<row row_name="wert1" /><row row_name="wert2" />

</result>

Wobei bei beiden row_name gleich dem bzw. den Spaltennamen in der Tabelle ist.

Wenn die Tabelle eine solche Struktur hat:

wird bei folgendem Query

SELECT * FROM fruits

folgende Ausgabe geliefert:

• Bei Variablen:

&id_0=1&&fruit_0=Erdbeere&&id_1=2&&fruit_1=Banane&&id_2=3&&fruit_2=Zitrone&&result_total=3&&result=1&

• Bei XML:

<?xml version="1.0" encoding="iso-8859-1" ?><result value="1">

<row id="1" fruit="Erdbeere" /><row id="2" fruit="Banane" /><row id="3" fruit="Zitrone" />

</result>

Diese zwei Ausgabeformen werden von Flash verstanden. Somit kann die Ausgabe ohneWeiterverarbeitung bzw. Umformung direkt von Flash gelesen werden.

Wie in der Einleitung bereits beschrieben wurde, wäre es das Einfachste, einfach einenSQL-String aus Flash an ein PHP-Script weiterzugeben, das diesen einfach an die MySQL-Datenbank weitergibt, das Ergebnis empfängt und an Flash ausgibt.

78 Kapitel 4

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

fruits

id fruit

1 Erdbeere

2 Banane

3 Zitrone

·

BEISPIEL

Page 79: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Im Normalfall ist dies eine große Sicherheitslücke, da Unbefugte auch Befehle an dieMySQL-Datenbank senden können, um diese zu verändern, zu löschen etc.

Nun stellt sich die Frage, was hier anders ist als an einem solchen PHP-Script.

In der Klasse swiffSQL ist es möglich, den Zugriff zu beschränken, d.h. man kann einzelneMySQL-Befehle sperren oder freigeben. So ist es beispielsweise möglich, den SELECT-Befehlfreizugeben, alle anderen Befehle aber nicht. Dies schafft hinreichende Sicherheit inHinblick auf ungewollte Manipulationen.

4.2.1 Wichtige Hinweise

• Die Klasse swiffSQL befindet sich noch in der Beta-Phase. Auf www.flashtool.de/swiffSQL/ finden Sie jeweils die neueste Version. Momentan sind noch nicht alle My-SQL-Funktionen implementiert und es kann nur ein Objekt der Klasse instanziiert wer-den, da sich die Ausgaben sonst vermischen und überschreiben. Bitte senden Sie Bugsund/oder Anregungen an: [email protected].

• In MySQL Version 4.x werden so genannte Sub-Selects möglich sein. Sollte hierbei einSub-Select mit einer anderen Aktion als SELECT möglich sein, so greift die Zugriffs-beschränkung von swiffSQL eventuell nicht mehr korrekt. Momentan befindet sichMySQL 4 noch in der Alpha-Phase.

4.2.2 Funktionsübersicht

swiffSQL()

Beschreibung: Erstellt ein neues Objekt der Klasse swiffSQL, die eine Datenbankverbin-dung hält, zu der dann Anfragen gesendet werden können.

Definition: new swiffSQL (string outputType, string database [, string host [,string user [, string password [, int port]]]])

Parameter: string outputTypeMit diesem Argument legt man die Art der Ausgabe fest, die nach einemQuery zurückgegeben wird. Mögliche Werte sind VAR für die Ausgabe desErgebnisses als Variablen oder XML für die Ausgabe in XML.Denken Sie daran, die flash.inc.php-Klasse einzubinden, falls Sie als Aus-gabeart VAR wählen.

string databaseMit diesem Argument wird die Datenbank angegeben, zu der eine Verbin-dung erstellt wird.

PHP, MySQL und Flash 79

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 80: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

string hostDer Server, auf dem die Datenbank sich befindet. Optionales Argument.Defaultwert ist localhost.

string userDieses Argument ist der Benutzer der Datenbank. Optionales Argument.Defaultwert ist root.

string passwordDas Passwort zum angegebenen Benutzer. Optionales Argument. Default-wert ist kein Passwort.

int portDer Port, auf dem die Datenbank »lauscht«. Optionales Argument. Default-wert ist Port 3306.

Anwendung: <?php

include("./includes/flash.inc.php");include("./includes/swiffSQL.inc.php");

$swiffSQL = new swiffSQL("XML", "database");

//~ Hier kommt dann die Anfrage

?>

Dieser Code erzeugt eine neue Verbindung zu der Datenbank database auflocalhost. Das Ergebnis oder eventuelle Fehlermeldungen werden alsXML-Daten ausgegeben.

swiffSQL->setPermissions()

Beschreibung: Mit dieser Funktion lässt sich der Zugriff auf die Datenbank beschränken(oder gewähren).Diese Funktion muss nicht zwingend aufgerufen werden. Standard ist nurlesen (SELECT).Hier sind nur einige Befehle für den Zugriff auf Daten in einer MySQL-Datenbank definiert. Sollte ein Befehl eingegeben werden, der momentannicht definiert ist (z.B. ALTER oder SHOW), wird eine Fehlermeldung ausge-geben.

Definition: void swiffSQL->setPermissions ([bool select [, bool insert [, boolupdate [, bool delete [, bool truncate [, bool drop]]]]]])

Parameter: bool selectWenn bei diesem Parameter true (wahr) angegeben wird, ist das Lesen derDatenbank erlaubt. Optionaler Parameter. Standard ist true.

80 Kapitel 4

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 81: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

bool insertWenn bei diesem Parameter true (wahr) angegeben wird, können Daten indie Datenbank eingefügt werden. Optionaler Parameter. Standard ist false.

bool updateWenn bei diesem Parameter true (wahr) angegeben wird, können Daten inder Datenbank verändert werden. Optionaler Parameter. Standard ist false.

bool deleteWenn bei diesem Parameter true (wahr) angegeben wird, können Daten inder Datenbank gelöscht werden. Optionaler Parameter. Standard ist false.Es wird nicht empfohlen, diesen Parameter zu ändern.

bool truncateWenn bei diesem Parameter true (wahr) angegeben wird, kann die Tabellegeleert werden. Optionaler Parameter. Standard ist false. Es wird nichtempfohlen, diesen Parameter zu ändern.

bool dropWenn bei diesem Parameter true (wahr) angegeben wird, können Tabellen,Datenbanken etc. gelöscht werden. Optionaler Parameter. Standard ist false. Es wird nicht empfohlen, diesen Parameter zu ändern.

Anwendung: <?php

include("./includes/flash.inc.php");include("./includes/swiffSQL.inc.php");

$swiffSQL = new swiffSQL("XML", "database");

//~ Hier ist nur das Lesen der Datenbank erlaubt

$swiffSQL->setPermissions(true, true);

//~ Ab hier ist auch das Einfügen von Daten erlaubt

//~ Hier kommt dann die Anfrage

?>

swiffSQL->query()

Beschreibung: Sendet über die erstellte Verbindung eine Anfrage an die Datenbank undgibt das Ergebnis aus. Schlägt fehl und meldet einen Fehler, wenn der Zu-griff nicht gestattet ist (siehe Funktion swiffSQL->setPermissions()).

PHP, MySQL und Flash 81

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 82: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Mögliche Ausgaben:

• Bei Ausgabe von Variablen:

• Bei SELECT:&row_name1=wert1&&row_name2=wert2&&result_total=2&&result=1&

• Bei INSERT:&insert_id=ZAHL&&result=1&

Anmerkung: ZAHL ist bei einer Tabelle, in der ein auto_increment-Feldvorhanden ist, eine Zahl größer als 0. In einer Tabelle, in der kein auto_increment-Feld definiert wurde, ist ZAHL gleich 0.

• Bei DELETE oder UPDATE:&affected_rows=ZAHL&&result=1&Anmerkung: ZAHL ist die Anzahl der geänderten Zeilen.

• Bei allen anderen Befehlen:&result=1&

• Bei Fehlern:&error=Fehlermeldung&&result=0&Anmerkung: Bei Fehlern wird das Script beendet.

• Bei Ausgabe von XML:

• Bei SELECT:<?xml version="1.0" encoding="iso-8859-1" ?><result value="1">

<row field1="value" field2="value" /><row field1="value" field2="value" />

</result>

• Bei INSERT:<?xml version="1.0" encoding="iso-8859-1" ?><insert_id value="ZAHL" />

ZAHL ist bei einer Tabelle, in der ein auto_increment-Feldvorhanden ist, eine Zahl größer als 0. In einer Tabelle, inder kein auto_increment-Feld definiert wurde, ist ZAHLgleich 0.

82 Kapitel 4

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 83: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

• Bei DELETE oder UPDATE:<?xml version="1.0" encoding="iso-8859-1" ?><affected_rows value="ZAHL" />Anmerkung: ZAHL ist die Anzahl der geänderten Zeilen.

• Bei allen anderen Befehlen:<?xml version="1.0" encoding="iso-8859-1" ?><result value="1" />

• Bei Fehlern:<?xml version="1.0" encoding="iso-8859-1" ?><error message="Fehlermeldung" />Anmerkung: Bei Fehlern wird das Script beendet.

Definition: void swiffSQL->query(string sql)

Parameter: string sqlEin gültiger und korrekt formatierter SQL-String.

Anwendung: <?php$swiffSQL = new swiffSQL("XML", "database");$swiffSQL->query("SELECT * FROM fruits");?>

Dieser Code liefert alle Datensätze der Tabelle fruits in der Datenbank database auf dem Server localhost als XML-Daten.

swiffSQL->close()

Beschreibung: Schließt die Verbindung zur Datenbank.Die Verbindung wird zwar beim Beenden des Scripts automatisch geschlos-sen, jedoch werden während der Laufzeit Ressourcen freigegeben, wenn Siedie Verbindung sofort nach erfolgter Anfrage selbst beenden.

Definition: void swiffSQL->close(void)

Parameter: Keine.

Anwendung: <?php$swiffSQL = new swiffSQL("XML", "database");$swiffSQL->query("SELECT * FROM fruits");$swiffSQL->close();?>

Dieser Code öffnet eine Verbindung zu einer Datenbank, stellt eine Anfrage,gibt das Ergebnis als XML-Daten aus und schließt die Verbindung.

PHP, MySQL und Flash 83

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 84: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

4.2.3 Umgang mit der Klasse swiffSQL

Prinzipiell lässt sich sagen, dass die Ausgabe von XML-Daten eleganter und auch komfor-tabler ist. Wenn man XML ausgibt, muss man weder im Voraus die Namen der Felder inder Datenbank wissen, noch muss man eine Ergebnisvariable abfragen. Man muss »nur«das XML-Objekt durchlaufen, und man erkennt, ob und was für Daten geladen wurden.

Bei der Ausgabe von XML hat man im Gegensatz zur Ausgabe von Variablen einenGeschwindigkeitsverlust. Sowohl das Laden von XML-Daten als auch das Parsen dauertlänger, als dies bei Variablen der Fall ist.

Da sich bei verschiedenen Applikationen Unterschiedliches anbietet (bei zeitkritischenApplikationen wie z.B. einem Chat eher Variablen, bei einem Gästebuch etwa XML), möch-te ich hier auf beide Möglichkeiten, Daten zu laden, eingehen. Die Datenbankstruktur fürdie zwei folgenden Beispiele (liegt auf CD-ROM bei: Beispiele\swiffSQL\fruits.sql):

4.2.4 Beispiel: Daten laden (Variablen)

Dieses Beispiel befindet sich im Ordner Beispiele\swiffSQL\Lessons\fruchtSuche\ auf derCD-ROM.

Aufbau des PHP-Scripts:

<?php

//~ Klasse swiffSQL einbindeninclude("./includes/swiffSQL.inc.php");

//~Neues Objekt der Klasse instanziieren$swiffSQL = new swiffSQL("VAR", "database");

//~ Variable $sql kommt vom swf$swiffSQL->query($sql);

$swiffSQL->close();

?>

84 Kapitel 4

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

fruits

id

1

2

3

4

fruit

Erdbeere

Banane

Zitrone

Melone

color

rot

gelb

gelb

grün

Page 85: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Aufbau des SWF:

Abbildung 4.3: In diesem SWF kann der Besucher eine Farbe eingeben, dann wird in der Datenbank nach einerFrucht mit entsprechender Farbe gesucht. Wenn eine oder mehrere Früchte gefunden werden, werden diese ausgegeben.

Ablauf der Applikation:

1. Im SWF wird vom Besucher eine Farbe eingegeben.

2. Diese Farbe wird in einen SQL-String eingefügt und an ein PHP-Script weitergeleitet.

PHP, MySQL und Flash 85

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 86: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

3. Das PHP-Script sendet die Anfrage an die Datenbank, eine Frucht mit der Farbe, die derBesucher zuvor eingegeben hat, zu suchen, und gibt dann das Ergebnis in Flash-kompa-tiblem Format (hier Variablen) aus.

4. Das SWF lädt das Ergebnis und überprüft, ob Früchte gefunden wurden. Falls ja, wer-den diese in einem Textfeld angezeigt, falls nicht, wird eine Meldung ausgegeben.

In diesem Beispiel wird ein SQL-String im SWF generiert und an das PHPweitergeleitet. Es wäre in diesem Fall sinnvoller, nur die Farbe zu überge-ben, da das SWF an keiner sonstigen Stelle mit der Datenbank bzw. demPHP in Interaktion tritt.

Dieses Beispiel ist bewusst einfach gehalten, um den Umgang mit derswiffSQL-Klasse zu zeigen.

Auf der CD-ROM befinden sich zwei Interfaces (eines für Variablen und ei-nes für XML), die die Flexibilität der swiffSQL-Klasse zeigen. Nachdem Siedieses Beispiel verstanden haben, sollten Sie unbedingt einen Blick auf dieseInterfaces werfen.

Die Interfaces befinden sich im Ordner Beispiele\swiffSQL\Interfaces\ auf der CD-ROM.

Aufbau der Applikation:

1. Erstellen Sie einen neuen Flash-Film.

2. Fügen Sie ein Texteingabefeld ein, in das die Farbe eingegeben werden kann, und nen-nen Sie es farbe.

3. Erstellen Sie ein weiteres dynamisches Textfeld (mehrzeilig mit Zeilenumbruch) mit derVariable message. In diesem Textfeld wird nachher entweder die Meldung ausgegeben,dass keine Früchte mit der gesuchten Farbe gefunden wurden, oder bei Erfolg die ge-fundenen Früchte.

4. Nun benötigen wir noch eine leere Filmsequenz. In diese werden die Daten bzw. dieAusgabe des PHP-Scripts geladen. Nennen Sie die Filmsequenz emptyClip und weisenSie ihr folgenden Code zu:

onClipEvent (data) {

if (result == 1) {//~ Daten korrekt geladen

if (result_total == 0) {//~ Keine Früchte gefunden

_root.message = "Keine Frucht mit dieser Farbe in der Datenbank!";} else {//~ Früchte gefunden

_root.message = "Diese Früchte haben die gewünschte Farbe:\n";for (i = 0; i < result_total; i++) {//~ Alle gefundenen Früchte anzeigen

86 Kapitel 4

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 87: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

_root.message += this["fruit_"+i]+"\n";} //~ end for

} //~ end if//~ Geladene Variablen löschenfor (var v in this) {

delete this[v];} //~ end for

} //~ end if} //~ end onClipEvent

Vom PHP-Script werden folgende Daten zurückgegeben:

• Bei Erfolg:

– Bei keinen gefundenen Früchten:&result=1&&result_total=0&

– Bei zwei gefundenen Früchten:&result=1&&fruit_1=Banane&&fruit_2=Zitrone&&result_total=2&

• Bei Fehlschlag:&result=0&&error=Fehlermeldung&

In diesem Beispiel wird nicht auf Fehlschlag überprüft, sondern nur darauf, ob Früchtegefunden wurden oder nicht.

Sobald alle Daten geladen wurden (onclipEvent(data)), wird überprüft, welchen Wertresult hat. Wenn der Wert gleich 1 sein sollte (also Erfolg), dann wird überprüft, ob result_total (die Anzahl der gefundenen Früchte) gleich 0 ist. Wenn ja, wird eineMeldung ausgegeben, dass keine Früchte gefunden wurden, wenn nein, dann wird eineandere Meldung im Textfeld message angezeigt und die Früchte angehängt.

Da die Früchte sich ja in der Form

&fruit_1=name&&fruit_2=name&...&fruit_n=name&

in der Filmsequenz befinden und man die Gesamtzahl weiß (result_total), kann mandiese Variablen einfach mit einer Schleife zusammensetzen und auslesen.

Nachdem die Früchte angezeigt wurden bzw. die Meldung ausgegeben wurde, müssendie geladenen Variablen wieder gelöscht werden, da es möglich ist, dass der Besuchereine neue Anfrage startet.

PHP, MySQL und Flash 87

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 88: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

5. Um eben diese Anfrage starten zu können, wird auf Ebene 0 neben dem Eingabefeld fürdie Farbe noch eine Schaltfläche benötigt. Erstellen Sie diese und weisen Sie ihr folgen-den Code zu:

on (release, keyPress "<Enter>") {// ~ Textfeld auf Ebene 0 leerendelete _root.message;// ~ SQL String erstellensql = "SELECT fruit FROM fruits WHERE color = '"+farbe+"'";// ~ Dokument ladenloadVariables("query.php", "emptyClip", "POST");

} //~ end on

Zuerst wird das Ausgabefenster geleert, damit das Ergebnis der letzten Suche nichteventuell stehen bleibt.

Dann wird der SQL-String erstellt. Dieser ist vorformatiert, und die Eingabe des Be-suchers wird an der entsprechenden Stelle eingefügt.

Dann wird der SQL-String an das PHP-Script übertragen und die Ausgabe in die Film-sequenz emptyClip geladen. Sie können den SQL-String auch nur an den URL anhängenund mit escape() URL-kodieren, es ist jedoch sinnvoller (vor allem, wenn der Stringlänger ist), diesen nicht an den URL anzuhängen, da einerseits Daten verloren gehenkönnen, wenn er zu lang ist, und andererseits eventuell unbefugte Personen auf dummeIdeen gebracht werden.

Wenn Sie den SQL-String per POST übermitteln, sollten Sie darauf achten, dass keine an-deren Daten unnötigerweise an das PHP-Script gesendet werden, da dies den Vorgangnur unnötig verlangsamen würde (siehe auch Kapitel 3.2.4).

6. Nun wenden wir uns dem PHP-Script zu. Binden Sie zuerst die Klassendatei für dieswiffSQL-Klasse ein, damit Sie auf deren Funktionen zugreifen können:

<?php//~ Klasse swiffSQL einbindeninclude("./includes/swiffSQL.inc.php");

7. Nun erstellen Sie ein neues swiffSQL-Objekt.

//~Neues Objekt der Klasse instanziieren$swiffSQL = new swiffSQL("VAR", "database");

Als Ausgabeart wählen Sie VAR – dies bedeutet, dass keine XML-Daten, sondern »nor-male« Variablen ausgegeben werden.

Die Zugangsdaten müssen Sie selbstverständlich für Ihre Datenbank anpassen. DieStruktur der Datenbank inklusive der Früchte finden Sie auf der CD-ROM unterBeispiele\swiffSQL\fruit.sql.

Sie müssen nach dem Erstellen des swiffSQL-Objekts nicht die Funktion setPermissions()aufrufen, da wir aus der Datenbank ja nur lesen wollen. Dies ist standardmäßig bereitsaktiviert.

88 Kapitel 4

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 89: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

8. Als Nächstes senden wir die Anfrage an die Datenbank:

//~ Variable $sql kommt vom swf$swiffSQL->query($sql);

Die Variable $sql wurde zuvor aus Flash an das Script gesendet und enthält den SQL-String inklusive der gesuchten Farbe.

Die Anfrage wird nun an die Datenbank abgesetzt, das Ergebnis empfangen und alsVariablen für Flash lesbar wieder ausgegeben.

9. Nachdem die Anfrage an die Datenbank abgesetzt und das Ergebnis empfangen wurde,können wir die Verbindung wieder schließen:

$swiffSQL->close();?>

4.2.5 Beispiel: Daten laden/einfügen (XML)

Dieses Beispiel befindet sich im Ordner swiffSQL\Lessons\enterFruit\ auf der CD-ROM.

Der XMLNode-Prototyp insertAction():

XMLNode.prototype.insertAction = function () {

if (this.firstChild.nodeName == "insert_id") {//~ Frucht erfolgreich eingefügt

//~ Früchte ladengetFruits();

} else if(this.firstChild.nodeName == "error") {//~ Frucht nicht erfolgreich eingefügt//~ Fehlermeldung ausgebenmessage = this.firstChild.attributes.text;}

}

Der XMLNode-Prototyp showFruits():

XMLNode.prototype.showFruits = function (){

if (this.firstChild.nodeName == "result") {var array = this.firstChild.childNodes;for (var k = 0; k < array.length; k++) {

message += array[k].attributes.fruit;message += " - ";message += array[k].attributes.color;message += "\n";

}

PHP, MySQL und Flash 89

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 90: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

} else if (this.firstChild.nodeName == "error") {message = this.firstChild.attributes.text;}

}

Aufbau des SWF:

Abbildung 4.4: In diesem SWF kann der Besucher eine Frucht inkl. Farbe in eine Datenbank eintragen und bekommt danach eine Liste mit allen Früchten zurück.

90 Kapitel 4

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 91: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Aufbau des PHP-Scripts:

<?php

//~ Klasse swiffSQL einbindeninclude("./includes/swiffSQL.inc.php");

if ($action == "get") {

$sql = "SELECT fruit,

colorFROM fruitsORDER BY fruit";

} else if ($action == "add" AND !empty($fruit) AND !empty($color)) {

$sql = "INSERTINTO fruitsSET fruit = '".$fruit."',

color = '".$color."'";

} else {

exit();

}

//~Neues Objekt der Klasse instanziieren$swiffSQL = new swiffSQL("XML", "database");

//~ Lesen und Schreiben zulassen$swiffSQL->setPermissions(true, true);

//~ Anfrage stellen$swiffSQL->query($sql);

//~ Verbindung schließen$swiffSQL->close();

?>

Ablauf der Applikation:

1. Beim Start des SWF wird ein PHP-Script aufgerufen, das alle in der Datenbank befindli-chen Früchte als XML-Daten ausgibt. Diese Ausgabe wird geladen, und dann werdenalle vorhandenen Früchte inklusive ihrer Farbe in einem Textfeld dargestellt.

2. Der Besucher hat die Möglichkeit, eine eigene Frucht in die Datenbank einzufügen.

PHP, MySQL und Flash 91

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 92: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

3. Wenn der Benutzer dies möchte, werden die Daten (Frucht und Farbe) an ein PHP-Script übergeben, das den Eintrag in die Datenbank vornimmt. Zurückgegeben werdenXML-Daten, die den Status enthalten.

4. Nach dem Eintragen wird die Liste mit den Früchten, die sich nun in der Datenbank be-finden, erneut vom SWF geladen und im Textfeld dargestellt.

Wenn Sie ein etwas allgemeineres Beispiel zum Umgang mit swiffSQL undXML-Ausgabe betrachten möchten, können Sie ein Interface (XMLquery)auf der CD-ROM unter Beispiele\swiffSQL\Interfaces\XML\ finden.

Aufbau der Applikation:

1. Erstellen Sie eine neue PHP-Datei (query.php) und binden Sie die swiffSQL-Klasse ein:

<?php

//~ Klasse swiffSQL einbindeninclude("./includes/swiffSQL.inc.php");

2. Da das Script zwei verschiedene Funktionen ausführt (Ausgabe der Früchte und Ein-tragung einer Frucht in die Datenbank), müssen wir überprüfen, welche Funktion auf-gerufen werden soll, und dann den entsprechenden SQL-String zusammensetzen:

if ($action == "get") {

//~ Früchte sollen geladen werden

$sql = "SELECT fruit,

colorFROM fruitsORDER BY fruit";

} else if ($action == "add" AND !empty($fruit) AND !empty($color)) {

/*~ Frucht soll eingetragen werden, zuvor überprüfen, ob Name und Farbe angegeben wurde. */

$sql = "INSERTINTO fruits`SET fruit = '".$fruit."',

color = '".$color."'";

} else {/*~ Keine Aktion definiert oder Name und Farbe nicht angegeben */exit();

}

92 Kapitel 4

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 93: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Bei jedem Aufruf des PHP-Scripts aus Flash wird eine Variable übergeben ($action).Mögliche Werte sind get (Früchte laden) oder add (Frucht in Datenbank eintragen).Wenn das Script ohne Aktion aufgerufen wird, oder bei der Aktion add kein Name undkeine Farbe angegeben wurde, wird das Script beendet.

Sie könnten den SQL-String auch aus Flash übergeben. In diesem Fall ist es aber sinn-voller, den SQL-String im Script festzulegen, da die Übergabe ein unnötiges Daten-aufkommen wäre. Weiterhin lässt sich so sicher überprüfen, ob wirklich eine Frucht undein Name angegeben wurden. Machen Sie dies clientseitig, so könnte das PHP-Scriptauch direkt aufgerufen werden, z.B. mit folgendem String:

query.php?sql=INSERT INTO fruits SET fuit='',color=''

In diesem Fall würde ein Datensatz ohne Namen und Farbe eingetragen. Dies ist bei ei-ner Überprüfung im PHP-Script nicht möglich.

3. Nachdem der SQL-String definiert wurde, erstellen wir ein neues Objekt der swiffSQL-Klasse:

//~Neues Objekt der Klasse instanziieren$swiffSQL = new swiffSQL("XML", "database");

//~ Lesen und Schreiben zulassen$swiffSQL->setPermissions(true, true);

Diesmal muss aber die Funktion setPermissions() aufgerufen werden, da wir in derDatenbank nicht nur lesen, sondern auch schreiben (einfügen) wollen.

4. Nachdem das Objekt erstellt wurde, senden wir die Anfrage an die Datenbank:

//~ Anfrage stellen$swiffSQL->query($sql);

Zurückgegeben werden XML-Daten.

• Beim Laden der Früchte in der Form:<?xml version="1.0" encoding="iso-8859-1" ?><result value="1">

<row fruit="Erdbeere" color="rot" /><row fruit="Banane" color="gelb" />...

</result>

• Beim Speichern einer Frucht in der Form:<?xml version="1.0" encoding="iso-8859-1" ?><insert_id value="ZAHL" />wobei ZAHL in unserem Fall eine Zahl größer 0 sein muss, da wir ein auto_increment-Feld (id) haben.

• Bei einem Fehler:<?xml version="1.0" encoding="iso-8859-1" ?><error message="Fehlermeldung" />

PHP, MySQL und Flash 93

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 94: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

5. Nachdem die Anfrage an die Datenbank gesendet und das Ergebnis ausgegeben wurde(siehe oben), können wir die Verbindung zur Datenbank wieder schließen:

//~ Verbindung schließen$swiffSQL->close();

?>

6. Nun benötigen wir noch die Flash-Seite, mit der die Ausgabe des PHP-Scripts (gra-fisch) verarbeitet wird.

7. Erstellen Sie zunächst einen neuen Flash-Film und fügen Sie in diesen drei Textfelderein. Eines dieser Textfelder ist ein dynamisches Textfeld mit der Variable message. In diesem werden die geladenen Früchte angezeigt (deshalb das Textfeld eher hoch alsbreit und mit Wortumbruch anlegen). Dazu kommen die zwei Texteingabefelder fruitund color. In diese Textfelder muss der Besucher die Frucht bzw. die Farbe, die er inder Datenbank speichern möchte, eintragen.

8. Nun wird noch eine Schaltfläche benötigt, mit welcher der Besucher seine Frucht (undFarbe) an das PHP-Script schicken kann, das die Eintragung vornimmt. Legen Sie dieseebenfalls auf Ebene 0 an.

9. Im ersten Bild des Films legen Sie folgende Variable fest:

url = "query.php";

Dies ist der URL zu dem zuvor erstellten Script. Es ist sinnvoll, diese Variable festzule-gen, da wir sie an verschiedenen Stellen benötigen. Es wäre selbstverständlich auchmöglich, den URL an den jeweiligen Stellen direkt einzufügen.

10. Da jeweils zu Beginn des Scripts und nach dem Einfügen einer Frucht, also an zwei ver-schiedenen Stellen im SWF, die gesamten sich in der Datenbank befindlichen Früchteangezeigt werden sollen, ist es sinnvoll, diesen Code in einer Funktion unterzubringen.Fügen Sie deshalb ebenfalls im ersten Bild des SWF folgenden Code ein:

function getFruits()

{

//~ Neues XML-Objekt erstellenvar myFruits = new XML();

//~ XML-Daten (Früchte und Farben) ladenmyFruits.load(url+"?action=get");

/*~ Sobald alles geladen wurde, den Prototyp showFruits() aufrufen */myFruits.onLoad = myFruits.showFruits;

}

Dieser Code erstellt ein neues XML-Objekt und lädt dann in dieses die Ausgabe desPHP-Scripts (als Aktion wird get angegeben). Sobald die Ausgabe des Scripts vollstän-

94 Kapitel 4

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 95: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

dig geladen wurde, wird der XMLNode-Prototyp showFruits() auf das XML-Objektmit den geladenen Daten angewandt.

Diesen Prototyp müssen Sie ebenfalls einfügen:

XMLNode.prototype.showFruits = function ()

{

if (this.firstChild.nodeName == "result") {//~ Daten erfolgreich geladen

//~ Alle Früchte und Farben extrahierenvar array = this.firstChild.childNodes;

for (var k = 0; k < array.length; k++) {//~ durchlaufen und Name+Farbe anzeigen

message += array[k].attributes.fruit;message += " - ";message += array[k].attributes.color;message += "\n";

} //~ end for

} else if (this.firstChild.nodeName == "error") {//~ Ein Fehler ist aufgetreten

//~ Fehlermeldung ausgebenmessage = this.firstChild.attributes.text;

} //~ end else if

}

Zuerst wird geschaut, ob der Name des obersten Knotens result oder error ist.

Ist der Name error, ist ein Fehler aufgetreten. Dieser wird dann im Textfeld message an-gezeigt.

Ist der Name result, werden alle childNodes (unsere Reihen, also Früchte mit ihren je-weiligen Farben) in einem Array gespeichert und dieses durchlaufen. Bei jedemElement wird der Name (der Frucht) und die Farbe zu dem Textfeld message in derForm

Fruchtname – Fruchtfarbe\n

hinzugefügt.

Es wäre auch möglich, diesen Prototyp als einfache Funktion zu definie-ren, allerdings erachte ich es immer als sehr komfortabel, wenn man aufthis Zugriff hat; insofern nutze ich diesen Vorteil gerne aus. Sie könnenaber selbstverständlich auch eine normale Funktion verwenden.

PHP, MySQL und Flash 95

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 96: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

11. Als Nächstes wird die Funktion benötigt, mit der sich eine Frucht in der Datenbankspeichern lässt. Dazu benötigen wir zuerst den Code, der die Frucht inklusive Farbe andas PHP-Script übergibt:

function insertFruit(fruit, color)

{

//~ String, der an das Script übergeben wirdstring = "?action=add&fruit="+escape(fruit)+"&color="+escape(color);

//~ Neues XML-Objekt erstellenvar result = new XML();

//~ Ausgabe laden (insert_id oder error)result.load(url+string);

/*~ Sobald alles geladen wurde, den Prototyp insertAction() aufrufen */

result.onLoad = result.insertAction;

}

Zuerst wird der String definiert, der an den URL angehängt wird, die Aktion festlegtund Frucht und Farbe übergibt.

Sowohl der Name der Frucht als auch die Farbe werden URL-kodiert. Dies würde derBrowser eventuell auch automatisch machen, allerdings ist es sauberer und vermeideteventuelle Fehler, wenn der String bereits URL-kodiert übergeben wird.

Sobald die Ausgabe des Scripts vollständig geladen wurde, wird der XMLNode-Prototyp insertAction() auf die geladenen Daten im XML-Objekt result angewandt.Diesen Prototyp müssen Sie einfügen:

XMLNode.prototype.insertAction = function ()

{

if (this.firstChild.nodeName == "insert_id") {//~ Frucht korrekt eingefügt

//~ Aktualisierte Früchteliste ladengetFruits();

} else if(this.firstChild.nodeName == "error") {//~ Beim Einfügen trat ein Fehler auf

//~ Fehlermeldung ausgebenmessage = this.firstChild.attributes.text;

} //~ end else if

}

96 Kapitel 4

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 97: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Zuerst wird überprüft, ob die Frucht korrekt eingefügt wurde (in diesem Fall ist derName des obersten Elements result) oder ob ein Fehler auftrat (der Name des oberstenElements ist dann error).

Wenn ein Fehler auftrat, wird die Fehlermeldung im Textfeld message ausgegeben.Andernfalls wird die Funktion getFruits() aufgerufen und so die aktualisierteFrüchteliste aus der Datenbank geladen und dargestellt.

Damit beim Start des SWF automatisch die Früchte geladen werden, muss nun noch imersten Bild der Aufruf

getFruits();

eingefügt werden.

12. Damit die Funktion insertFruit() vom Besucher aufgerufen werden kann, sobald ereine neue Frucht (und Farbe) in die vorgesehenen Textfelder eingetragen hat, mussdem zuvor erstellten Textfeld auf Ebene 0 folgender Code zugewiesen werden:

on (release) {

insertFruit(fruit, color);

delete message;delete fruit;delete color;

}

Dieser Code ruft die Funktion insertFruit() mit den in den Textfeldern eingetragenenWerten auf und löscht diese danach. Das Textfeld, in dem nachher die aktualisierteFruchtliste (oder ein Fehler) angezeigt wird, sollte ebenfalls geleert werden.

PHP, MySQL und Flash 97

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 98: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer
Page 99: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

KAPITEL 5UMGANG MIT FLASH UND PHP

Page 100: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

In diesem Kapitel werden einige Probleme beim Umgang mit Flash und PHP angespro-chen und Lösungsmöglichkeiten dargeboten. Anhand von einigen Beispielen wird gezeigt,wie sich Flash und PHP elegant und zweckmäßig verbinden lassen.

5.1 Scripts von anderen Servern ausführen/laden Seit dem Flash-Plugin Version 4.0.1.2 ist es nicht mehr möglich, auf Scripts/Dateien vonanderen Servern bzw. Domains zuzugreifen, da dies als Sicherheitslücke angesehen wurde.

Das heißt: Wenn man ein Script aufrufen möchte, das unter www.meinedomain.de/script.php liegt, so muss das SWF sich auch unterhalb von meinedomain.de befinden.

Es ist nicht möglich, von einem Script, das unter www.meinedomain.de/meinswf.swf liegt,auf ein Script zuzugreifen, das unter www.anderedomain.de/script.php liegt.

Diese Beschränkung bezieht sich nur auf das Browser-Plugin, im Stand-alone-Player besteht sie nicht.

Um dennoch auf ein Script, das auf einem anderen Server liegt, zugreifen zu können, gibtes zwei Möglichkeiten:

5.1.1 Proxy-Scripting

Ein Beispiel dazu befindet sich im Ordner Beispiele\extRequest\ auf der CD-ROM.

Bei dieser Methode ruft das SWF ein PHP-Script auf, das auf der selben Domain liegt. Die-ses PHP-Script wiederum kontaktiert das extern liegende Script und gibt dessen Ausgabean das SWF weiter. Das PHP-Script fungiert somit als »Proxy«-Datenquelle.

Eine Funktion, die genau diese Rolle übernimmt, ist Bestandteil der flash.inc.php-Klasse(siehe Kapitel 10).

Bedenken Sie, dass ein PHP-Script, das einen anderen Server kontaktiert,den Server zusätzlich belastet. Das Ausmaß der zusätzlichen Belastung er-gibt sich aus der Häufigkeit des Aufrufs und dem Volumen der übermittel-ten Daten.

5.1.2 DNS-Aliasing

DNS (engl: Domain Name System) – Das DNS ist quasi das »Telefonbuch« des Internets.Es dient dazu, die Domainnamen in ihre entsprechenden IP-Adressen umzuwandelnund vice versa.

100 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

·

HINWEIS

Page 101: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Bei dieser Methode wird ein DNS-Eintrag angelegt, der ein Alias zu einem externen Serverist. Wenn das SWF den Aufruf zu dem DNS-Alias macht, dann fängt der DNS den URL ab,wertet die Anfrage aus und gibt sie an den extern liegenden Server weiter.

Manche Server lehnen Anfragen von anderen Domains ab, somit ist es mög-lich, dass eine Fehlermeldung anstelle der erwarteten Variablen zurückge-geben wird. DNS-Einträge für Server außerhalb Ihrer eigenen Domain anzu-legen kann problematisch sein. Diese Lösung setzt eine enge Zusammen-arbeit mit den Systemadministratoren des extern liegenden Servers voraus,um unerwartetem Verhalten vorzubeugen.

Informationen zum Zugriff auf extern liegende Daten:• Macromedia Technote ID 14213

5.2 SSL mit FlashSSL – (engl.: Secure Sockets Layer) SSL ist eine sichere Übertragungsmethode für Datenim Internet. Für SSL werden Zertifikate für die Gewährleistung der sicheren Übertra-gung benötigt. Mit diesen Zertifikaten kann man sich beispielsweise sicher sein, wo derServer, auf den man Daten überträgt, steht und wer ihn betreibt. Für ein solches Zertifi-kat wird ein Zeuge benötigt (z.B. VeriSign – www.verisign.com). Eine solche Bürgschaftkostet Geld – sollten Sie Interesse an einem Sicherheitszertifikat haben, so wenden Siesich an Ihren ISP, die meisten ISPs bieten für ihre Kunden solche Zertifikate an.

Laut Macromedia soll sich Flash bei der Verwendung eines SSL-Servers in Bezug auf dieSicherheit genauso verhalten wie HTML. Man soll sich beim Umgang mit SSL und Flashgenauso verhalten wie bei SSL und HTML.

Sollten Sie eine Verbindung zu einem sicheren Server aufbauen wollen, so benutzen Sie alsMethode POST und einen HTTPS-URL.

HTTPS – (engl.: Hypertext transfer protocol secure) Bei einem URL, der mit https:// be-ginnt, werden die Daten verschlüsselt zum Webserver übertragen. Hierbei wird dieVerschlüsselungsmethode SSL (siehe oben) angewandt.

Beispiel:

//~ ActionScript

passwort = "12345";

loadVariablesNum("https://sslserver/daten.php", 0);

würde die Variable »passwort« verschlüsselt an den Server (hier: sslserver) übertragenund die Ausgabe auf Ebene 0 laden.

Umgang mit Flash und PHP 101

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 102: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Informationen zu SSL:• www.ssl.de

Informationen zu SSL in Verbindung mit Flash:• Macromedia Technote ID 13931

5.3 Beispiel: Passwortgeschützter Bereich in FlashDieses Beispiel befindet sich im Ordner Applikationen\flashPass\ auf der CD-ROM.

Inhalt des SWF:

Abbildung 5.1: Dieses Bild zeigt den Aufbau der Eingabemaske für passwortgeschützte Daten, die aus einem PHP-Script geladen werden sollen.

Inhalt des PHP-Scripts:

<?php

//~ flash.inc.php-Klasse einbinden

include("./includes/flash.inc.php");

//~ Definition von Benutzern und Passwörtern

$accessArray = array();$accessArray["Joscha"] = "X";$accessArray["User2"] = "Passwort2";$accessArray["User3"] = "PASSwort3";

102 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 103: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ Definition der "geheimen" Daten

$geheim = "Ganz geheim!\nExtra für dich ;-)";

//~ verhindern, dass diese Seite im Cache des Browsers gespeichert wird

flash::drawExpire();

//~ Sicherstellen, dass Benutzer und Passwort per POST übergeben wurden

$user = $HTTP_POST_VARS["user"];$pass = $HTTP_POST_VARS["pass"];

//~ Überprüfung, ob Benutzer und Passwort eingegeben wurden.

if (empty($user) OR empty($pass)) {

//~ Passwort oder Benutzer nicht eingegeben

flash::echoVar("result", "Bitte geben Sie Ihren Benutzernamen und Ihr Kennwort ein!", true);

exit(); //~ Script beenden

} else if (!isset($accessArray[$user]) OR $accessArray[$user] != $pass) {

//~ Passwort oder Benutzer falsch/nicht vorhanden

flash::echoVar("result", "Falsches Passwort/Benutzer", true);

exit(); //~ Script beenden

} else {

//~ alles korrekt, geheime Information ausgeben

flash::echoVar("result", $geheim, true);

} //~ end if else

?>

Es kann sein, dass man innerhalb von Flash bzw. eines SWF einmal Daten benötigt, auf dienur ein oder mehrere bestimmte Benutzer zugreifen dürfen.

Dies lässt sich mit Hilfe von Flash allein nicht sicher lösen, da das Passwort irgendwo imSWF gespeichert werden müsste.

Da Flash aber eine clientseitige Sprache ist und so der Träger (das SWF) mit dem Benutzerin Berührung kommt, würden auch die im SWF gespeicherten Passwörter dem Besucherzugänglich sein. Es ist ein Leichtes, ein SWF von einer Domain entweder direkt herunter-zuladen oder aus dem Cache des Browsers zu holen. Mit einem Hexeditor könnte mandann das SWF begutachten und so Variablen und damit auch die Passwörter aus dem SWFherauslesen.

Umgang mit Flash und PHP 103

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 104: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Wir müssen also eine Methode finden, bei der die Passwörter nicht mit dem Besucher inBerührung kommen. Dazu eignet sich PHP, da der Quellcode von PHP nur eingesehenwerden kann, wenn der Zugriff über das FTP-Protokoll stattfindet. Wenn ein PHP-Scriptper HTTP aufgerufen wird, dann wird niemals der Quellcode angezeigt werden (dies stelltder Interpreter sicher).

Es ist demnach also möglich, die Passwörter bzw. die Benutzer in einem PHP-Script zuspeichern und dort zu überprüfen, ob der Benutzer die Berechtigung hat, die Daten abzu-rufen oder nicht.

Der folgende Entwurf ist lediglich ein Beispiel. Es kann nicht garantiert wer-den, dass hierbei tatsächlich eine Sicherheitsebene erreicht wird, die den ge-schützten Daten angemessen ist! Um eine höhere Sicherheitsebene zu errei-chen, empfehle ich zusätzlich noch den Einsatz von SSL (siehe Kapitel 5.2).

Der Ablauf ist folgender:

1. Der User wird in Flash mit einer Eingabemaske aufgefordert, seinen Benutzernamenund das dazugehörige Passwort einzugeben.

2. Diese Daten werden an das PHP-Script übermittelt.

3. Im PHP-Script wird überprüft, ob der Benutzer gültig ist und ob das Passwort zu die-sem Benutzer mit dem eingegebenen übereinstimmt.

4. Je nach Ergebnis wird entweder eine Fehlermeldung oder die geheimen Daten zurück-gegeben.

5. Die Rückgabe wird in einem Textfeld des SWF angezeigt.

Aufbau der Applikation:

1. Erstellen Sie einen neuen Flash-Film.

2. Fügen Sie direkt im ersten Bild ein Texteingabefeld für den Benutzernamen ein, wählenSie als Linientyp »Eine Zeile« und nennen Sie ihn user. Denken Sie daran, dass in PHPanders als in Flash Variablen case-sensitive sind, d.h. es wird zwischen Groß- undKleinschreibung unterschieden.

Fügen Sie ein weiteres Texteingabefeld ein, wählen Sie diesmal als Linientyp »Kenn-wort«. Wählen Sie bei diesem Feld als Variable pass. Nun benötigen wir noch das Text-feld für die Ausgabe der Fehlermeldungen bzw. der geheimen Daten. Fügen Sie hierzuein mehrzeiliges Textfeld ein und nennen Sie es result.

3. Jetzt können die Daten vom Besucher eingegeben werden. Aber zur Übergabe derDaten an das PHP-Script und die Rückgabe des Ergebnisses wird noch folgender Codeauf einer Schaltfläche benötigt:

104 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 105: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ ActionScript

on (release, keyPress "<Enter>") {

delete result;

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

}

Wenn die Schaltfläche angeklickt oder die Enter-Taste gedrückt wird, wird das Ergeb-nis, das eventuell von einem vorherigen Fehlschlag geladen worden wäre, gelöscht unddie Daten in den Textfeldern erneut an das PHP-Script (hier: checkPass.php) übertragen.Beachten Sie hierbei, dass als Übertragungsmethode POST angegeben wurde. Dies istextrem wichtig, da bei der GET-Methode das Passwort und der Benutzername an denURL angehängt würden und somit eventuell aus dem Cache des Browsers von Un-befugten extrahiert werden könnten. Ein weiterer Grund dafür, hier die POST-Methodezu verwenden, ist, dass dann die Benutzerdaten auch nicht von Proxies zwischenge-speichert werden und somit nicht in Hände von Dritten fallen können.

Sollten Sie ein noch höheres Maß an Sicherheit benötigen, so schauen Siesich bitte Kapitel 5.2 an.

4. Nachdem das SWF nun fertig ist, widmen wir uns dem PHP-Script. Erstellen Sie hierzueine neue PHP-Datei (hier: checkPass.php). Binden Sie zuerst die Klassendatei vonflash.inc.php ein, damit Sie auf deren Funktionen zugreifen können:

include("./includes/flash.inc.php");

Die Klasse flash.inc.php und ihre Funktionen sind in Kapitel 10 näher be-schrieben.

5. Als Nächstes legen wir die Benutzer mit ihren Passwörtern fest, die auf die geschütztenDaten Zugriff haben sollen:

$accessArray = array();

Es ist immens wichtig, dass dieses Array neu definiert wird. Man könnte auch Benutzerzum Array hinzufügen, ohne vorher die Variable $accessArray dem Typ »Array« zuge-ordnet zu haben. Dies würde allerhöchstens eine Warnung produzieren. Sollten Sie dasArray jedoch nicht bei jedem Aufruf des PHP-Scripts neu definieren, so ließen sich anden URL des PHP-Scripts neue Arrayelemente anhängen, etwa so:

http://server/checkPass.php?accessArray[hacker]=trick&user=hacker&pass=trick

Schon käme der Hacker an die geschützten Daten heran, ohne dass er überhaupt einenBenutzernamen oder ein Passwort kennt.

Gehen Sie nicht davon aus, dass niemand die Art der Benutzerspeicherung (also dasArray) erraten wird, sondern stellen Sie sicher, dass Daten aus der Umwelt (demInternet bzw. dem Hacker) nicht die Daten in Ihrem PHP-Script auf ungewollte Weisemanipulieren. Um die Benutzer zu definieren, benötigen wir folgenden Code:

Umgang mit Flash und PHP 105

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

·

HINWEIS

Page 106: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

$accessArray["Joscha"] = "X";$accessArray["User2"] = "Passwort2";$accessArray["User3"] = "PASSwort3";

Das Array wird in der Form

$accessArray["Benutzername"] = "Passwort";

definiert. Sollten Sie einen weiteren Benutzer hinzufügen wollen, so können Sie dieseninklusive Passwort einfach mit einer weiteren Zeile derselben Form definieren. Benut-zernamen und Passwörter sind case-sensitive, d.h. es wird sowohl im Namen als auchim Passwort nach Groß- und Kleinschreibung unterschieden.

6. Als Nächstes definieren wir die geschützte Information:

$geheim = "Ganz geheim!\nExtra für dich ;-)";

Diese Information könnte selbstverständlich auch aus einer Datenbank oder einer ande-ren Datenquelle kommen. Sie ist hier nur der Einfachheit des Beispiels wegen direkt inPHP definiert.

7. Da es sich bei diesem PHP-Script um sensible Daten handelt, fügen wir folgendenBefehl hinzu:

flash::drawExpire();

Dieser Befehl verhindert, dass die Ausgabe des Scripts von Proxies und/oder im Cachedes Besuchers gespeichert wird. Dies ist wichtig, da bei einem erfolgreichen Login diegeschützten Daten zurückgegeben werden und diese nicht aus dem Cache extrahiertwerden dürfen.

8. Nun können wir beginnen, die vom Besucher übergebenen Daten zu überprüfen undim Falle eines Fehlschlags eine Fehlermeldung oder bei Erfolg die geschützten Datenauszugeben.

//~ Überprüfung, ob Benutzer und Passwort eingegeben wurden.

if (empty($user) OR empty($pass)) {

//~ Passwort oder Benutzer wurden nicht eingegeben

flash::echoVar("result", "Bitte geben Sie Ihren Benutzernamen und Ihr Kennwort ein!", true);

exit(); //~ Script beenden

} else if (!isset($accessArray[$user]) OR $accessArray[$user] != $pass) {

//~ Passwort oder Benutzer falsch/nicht vorhanden

flash::echoVar("result", "Falsches Passwort/Benutzer", true);

exit(); //~ Script beenden

106 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 107: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

} else {

//~ alles korrekt, "geheime" Daten ausgeben

flash::echoVar("result", $geheim, true);

} //~ end if else

In der ersten if-Abfrage wird geprüft, ob die Variablen $user und $pass überhaupt ei-nen Inhalt haben. Wenn eine oder beide Variablen keinen Inhalt haben, dann wird eineFehlermeldung ausgegeben.

Bei der zweiten if-Abfrage wird geprüft, ob der eingegebene Benutzer überhaupt gül-tig ist, und wenn ja, ob das eingegebene Passwort mit dem des Benutzers überein-stimmt. Wenn beide Bedingungen erfüllt sind, werden die geschützten Daten ausgege-ben, ansonsten wird eine Fehlermeldung generiert.

Geben Sie in der Fehlermeldung immer an, dass sowohl der Benutzer-name als auch das Passwort falsch sein können. Schränken Sie den Fehlernicht weiter ein, da sonst unbefugte Personen bei einem bekannten Benut-zernamen nur noch Passwörter ausprobieren müssen.

Sie sehen, dass nach der Ausgabe der Fehlermeldungen das Script sofort beendet wird.Dies ist nicht unbedingt nötig, da auch bei weiterer Ausführung die Bedingungen dieAusgabe der geschützten Daten verhindern würden. Allerdings ist es überflüssig, bei ei-ner Fehlermeldung weitere Überprüfungen vorzunehmen, da eventuelle Fehler bei derEingabe so oder so zuerst behoben werden müssen.

5.4 Beispiel: Sessions mit Flash und PHPDieses Beispiel befindet sich im Ordner Applikationen\flashSession\ auf der CD-ROM.

Inhalt des PHP-Scripts:

<?php

//~ flash.inc.php-Klasse einbindeninclude("./includes/flash.inc.php");

//~ Start der Ausgabe

flash::drawExpire();

//~ Session einleiten oder begonnene wieder aufnehmen

$result = session_start();

//~ Je nach Aktion Code ausführen

Umgang mit Flash und PHP 107

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 108: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

108 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Inhalt desSWF

Abbildung 5.2:Dieses Bild zeigtden Aufbau ei-nes SWF, in demzuerst eineSprache festge-legt und dannspäter mit derSession-ID einder Sprache ent-sprechender Textgeladen oder dieSession beendetwerden kann.

Page 109: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

if ($action == "create") {

//~ Neue Session erstellen

//~ Statusmeldungen definieren

$messageArray[0] = "Session konnte nicht gestartet werden.";$messageArray[1] = "Session gestartet.";$messageArray[2] = "Sprache nicht definiert!";

$language = $HTTP_GET_VARS["language"];

if (empty($language)){

//~ Sprache nicht definiertflash::echoVar("result", 0);flash::echoVar("message", $messageArray[2], true);

exit(); //~ Script beenden

} //~ end if

//~ Neue Session-Variable hinzufügensession_register("s_language");

//~ Wert der Session-Variable ändern$HTTP_SESSION_VARS["s_language"] = $language;$s_language = $language;

//~ Ausgabe des Statusflash::echoVar("result", $result);//~ Ausgabe des Sessionnamensflash::echoVar("_SNAME",session_name(), false);//~ Ausgabe der Session-IDflash::echoVar("_SID",session_id(), false);//~ Ausgabe der Statusmeldungflash::echoVar("message", $messageArray[$result], true);

} else if ($action == "get") {

//~ Text ausgeben, abhängig von der zuvor gesetzten Sprache

//~ Deutschen und englischen Text definieren

$messageArray["de"] = "Dies ist der deutsche Text.";$messageArray["en"] = "This is the english text.";$messageArray[""] = "Session nicht aktiv!";

//~ Text in der gewählten Sprache ausgeben

flash::echoVar("message", $messageArray[$HTTP_SESSION_VARS["s_language"]], true);

Umgang mit Flash und PHP 109

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 110: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

} else if ($action == "destroy") {

//~ Session beenden

//~ Statusmeldungen definieren

$messageArray[0] = "Zerstörung fehlgeschlagen!";$messageArray[1] = "Session wurde gelöscht!";

//~ Session zerstören$result = session_destroy();

//~ Ausgabe der Statusmeldungflash::echoVar("message", $messageArray[$result], true);

} else {

//~ Keine Aktion definiert

//~ Statusmeldung definieren

$messageArray[0] = "Aktion nicht definiert!";

//~ Statusausgabeflash::echoVar("result", 0);//~ Ausgabe der Statusmeldungflash::echoVar("message", $messageArray[0]);

} //~ end no correct action

?>

In diesem Beispiel werden die Session-Funktionen von PHP verwendet.Diese sind ab PHP Version 4 verfügbar. Es ist möglich, die Session-Funk-tionen zu benutzen, ohne die Session-Daten an PHP-Scripts anzuhängen, dadie Session Engine von PHP Cookies benutzt. Da aber nicht alle BenutzerCookies aktiviert haben, wird in diesem Beispiel nur darauf eingegangen,wie man die Session-Funktionen ohne die Verwendung von Cookies ein-setzt.

Globale Variablen in Flash

Es gibt in Flash (4/5) keine globalen Variablen, d.h. es ist nicht möglich, eineVariable so zu definieren, dass man überall direkt auf sie zugreifen kann.Angenommen, Sie definieren eine Variable variable auf Ebene 0, dann kön-nen Sie innerhalb einer Filmsequenz auf diese Variable nicht direkt zugrei-fen, sondern müssen den Pfad voranstellen.

110 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Exkurs

·

HINWEIS

Page 111: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Beispiel:

//~ ActionScript

//~ Man befindet sich z.B. in einer Filmsequenz,//~ auf Ebene 0 ist die Variable "variable" definiert.

//~ mit dem Code

trace(variable);

//~ kann ihr Inhalt nicht ausgegeben werden, mit

trace(_root.variable);

//~ hingegen schon.

Das heißt, es gibt zwar keine globalen Variablen, aber man kann auf alleVariablen global zugreifen (solange man ihren genauen Pfad kennt).

Der Ablauf ist folgender:

1. In Flash wählt der Besucher eine Sprache (Englisch oder Deutsch) und startet dann dieSession.

2. Die Session-Daten werden vom PHP-Script an das SWF zurückgegeben.

3. Danach kann mit der Session-ID, die an ein PHP-Script übergeben wird, herausgefun-den werden, welche Sprache der Besucher zuvor gewählt hat, und anhand dieserInformation ein Text in der entsprechenden Sprache geladen werden.

4. Bei Bedarf kann die Session beendet werden.

Aufbau der Applikation:

1. Erstellen Sie einen neuen Flash-Film mit drei Ebenen mit jeweils zwei Bildern.

2. Erstellen Sie in der dritten Ebene ein Textfeld mit der Variable message. Dies wird benö-tigt um Statusmeldungen auszugeben.

3. Fügen Sie in der ersten Ebene eine leere Filmsequenz ein. Benennen Sie diese eindeutig(hier: _SESS). Welchen Namen Sie der Filmsequenz geben, ist nicht wichtig, allerdingswerden in dieser Filmsequenz später die Session-Daten gespeichert. Somit ist es sinn-voll, einen eindeutigen und kurzen (da Sie eventuell oft darauf zugreifen müssen)Namen zu geben. Fügen Sie zu dieser Filmsequenz folgenden Code hinzu:

//~ ActionScript

onClipEvent (data) {

_root.message = message;

delete message;

Umgang mit Flash und PHP 111

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Exkurs

Page 112: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

if (result == true) {

_root.gotoAndPlay (2);

} //~ end if

delete result;

} //~ end onClipEvent(data)

Dieser Code bewirkt, dass nach dem vollständigen Laden von Daten in diese Film-sequenz die Statusmeldung in dem Textfeld, das wir auf der dritten Ebene erstellt ha-ben, ausgegeben wird. Danach wird die Statusmeldung gelöscht, da sie nicht längerbenötigt wird.

Die if-Abfrage bewirkt, sollte der vom PHP-Script zurückgegebene Status true (wahr)sein, dass auf der Hauptzeitleiste ein Bild weiter gesprungen wird. Danach wird dieStatusvariable (result) gelöscht. Wenn der Status true (wahr) ist, enthält die Film-sequenz auch die Session-Daten, die später benötigt werden.

4. Ändern Sie nun das zweite Bild auf der zweiten Ebene in ein Schlüsselbild um, in dasSie eine stop()-Aktion einfügen. Im ersten Bild fügen Sie folgenden Code ein:

//~ ActionScript

MovieClip.prototype.getString = function () {

var authString = this._SNAME+"="+this._SID;

return authString;

}; // ~ end function getString

stop ();

Der Filmsequenz-Prototyp gibt, wenn er aufgerufen wird, einen String zurück, der dieSession-Daten enthält, die an das PHP-Script angehängt werden müssen. Der Stringsieht der Form nach so aus:

PHPSESS=7a9659221e0693185ae4a4249c875ce2

Er wird aus den zuvor vom PHP-Script übergebenen Session-Daten generiert. Wenn Siedie Ausgabe des PHP-Scripts bzw. die Variablen verändern oder diese innerhalb desSWF an anderer Stelle als in einer Filmsequenz speichern, dann müssen Sie diesenPrototyp entsprechend anpassen.

5. Ebenfalls im ersten Bild der zweiten Ebene fügen Sie drei Schaltflächen ein, zwei zurAuswahl der Sprache, nämlich eine für die Sprache Deutsch und eine für Englisch. Diedritte Schaltfläche dient zum Starten der Session.

Der Schaltfläche für Deutsch weisen Sie folgenden Code zu:

112 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 113: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

on (release) {

message = "Deutsch";language = "de";

}

Der Schaltfläche für Englisch weisen Sie folgenden Code zu:

on (release) {

message = "Englisch";language = "en";

}

Der Schaltfläche zum Starten der Session weisen Sie folgenden Code zu:

on (release) {

_SESS.loadVariables("flashSession.php?action=create&language="+language);

delete language;

}

Dieser Code übergibt dem Script die gewählte Sprache und die Aufforderung, dieSession einzuleiten. Die Rückgabe des Scripts wird in die vorher erstellte Filmsequenz_SESS auf Ebene 0 geladen.

Die Information, welche Sprache gewählt wurde, wird entfernt, da sie nicht längerbenötigt wird.

6. Im zweiten Frame der zweiten Ebene benötigen wir zwei Schaltflächen, eine, um denText zu laden, und eine, um die Session zu beenden.

Weisen Sie dem Button für das Laden des Textes folgenden Code zu:

on (release) {

loadVariablesNum("flashSession.php?action=get&"+_SESS.getString(), 0);

}

Dieser Code übergibt dem PHP-Script die Session-Daten, die mit der FunktiongetString() aus dem Container (der Filmsequenz _SESS) in einen String umgewandeltund dann an das Ende des URL zusammen mit der Aktion angehängt werden. DieAusgabe des Scripts wird auf Ebene 0 geladen und der Text im Textfeld message ange-zeigt.

Der Button, um die Session zu beenden, benötigt folgenden Code:

on (release) {

loadVariablesNum("flashSession.php?action=destroy&"+_SESS.getString(), 0);

}

Umgang mit Flash und PHP 113

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 114: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Bei diesem Aufruf werden dem Script ebenfalls die Session-Daten angehängt, dieAktion ist aber, die Session zu beenden. Es wird eine Statusmeldung zurückgegeben,die im Textfeld message auf Ebene 0 angezeigt wird.

7. Nachdem das SWF nun fertig gestellt ist, wenden wir uns dem PHP-Script zu. Zuerstmüssen Sie die flash.inc.php-Klasse einbinden, um Zugriff auf deren Funktionen zu be-kommen. Näheres zu flash.inc.php erfahren Sie in Kapitel 10. Danach senden Sie dieInformation für Browser und Proxies, die Ausgabe des Scripts nicht im Cache zu spei-chern. Dies ist wichtig, da das Script eventuell sehr oft aufgerufen wird.

<?php

include("./includes/flash.inc.php");

flash::drawExpire();

$result = session_start();

Zuerst müssen Sie die flash.inc.php-Klasse einbinden, damit deren Befehle im weiterenScript zugänglich sind.

Die zweite Zeile sorgt dafür, dass die Ausgabe des Scripts nicht im Cache gespeichertwird. Dies ist wichtig, da das Script mehrmals, jedoch mit unterschiedlichen Aktionenaufgerufen wird.

In der dritten Zeile wird die Session eingeleitet bzw. wieder aufgenommen. Die Variable$result enthält danach die Information, ob die Session erfolgreich eingeleitet wurde($result enthält dann den Wert true bzw. wahr) oder ob die Session nicht eingeleitetwerden konnte ($result enthält dann den Wert false bzw. falsch).

Die Funktion session_start()

bool session_start (void)

Die Funktion session_start() benötigt keine Argumente.

Sie leitet entweder eine neue Session ein oder nimmt eine bereits begonneneSession wieder auf.

Zurückgegeben wird immer true (wahr).

Wenn Sie Cookies zum Speichern der Session-Variablen(Session-ID und Session-Name) verwenden möchten, so mussder Aufruf von session_ start() immer vor jeglicher andererAusgabe geschehen!

Die Funktionen session_register() leitet die Session auto-matisch ein, wenn sie vor session_start() aufgerufen wird.

114 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Tutorial

·

HINWEIS

Page 115: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Da das PHP-Script drei Aktionen hat – eine, um die Session zu starten, eine, um einenText zurückzugeben, und eine, um die Session zu schließen – benötigen wir drei Blöcke(und einen, um einen Fehler auszugeben, falls keine Aktion definiert wurde):

if ($action == "create") {

//~ Neue Session erstellen

} else if ($action == "get") {

//~ Text ausgeben

} else if ($action == "destroy") {

//~ Session beenden

} else {

//~ Keine Aktion definiert

} //~ end no correct action

8. Der erste Block erstellt eine neue Session und legt die Sprache des Besuchers fest.

Der Ablauf im Einzelnen:

Zuerst werden die verschiedenen Statusmeldungen definiert. Diese werden benötigt,um dem Besucher mitzuteilen, was gerade geschieht (in einem echten Projekt würdenhöchstwahrscheinlich nur Statuscodes übergeben, da der Besucher nicht zu wissenbraucht, dass eine neue Session eingeleitet wurde etc. Hier aber – um besser zu verdeut-lichen, was geschieht – ist es sinnvoll, Statusmeldungen auszugeben).

Fügen Sie nach

if ($action == "create") {

folgenden Code ein:

//~ Statusmeldungen definieren

$messageArray[0] = "Session konnte nicht gestartet werden.";$messageArray[1] = "Session gestartet.";$messageArray[2] = "Sprache nicht definiert!";

Dann wird überprüft, ob der Benutzer auch eine Sprache gewählt hat. Wenn nicht, wirdeine Statusmeldung und ein Statuscode ausgegeben und danach das Script beendet:

//~ Überprüfen, ob eine Sprache gewählt wurde

if (empty($language)){

//~ Sprache nicht gewählt

flash::echoVar("result", 0);

flash::echoVar("message", $messageArray[2], true);

Umgang mit Flash und PHP 115

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 116: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

exit(); //~ Script beenden

} //~ end if

Sollte der Benutzer die Sprache gewählt haben, wird eine neue Variable in der Sessionregistriert. Dies geschieht mit session_register():

//~ Neue Session-Variable hinzufügen

session_register("s_language");

Die Funktion session_register()

bool session_register (mixed name [, mixed ...])

Mit der Funktion session_register() kann man eine oder mehrere Variab-len verschiedenen Typs (also nicht nur Variablen, sondern auch Arrays) inder Session speichern, die bei der Wiederaufnahme derselben Session dannwieder zur Verfügung stehen. In unserem Fall speichern wir die gewählteSprache des Besuchers in der Session, um später erkennen zu können, inwelcher Sprache dem Besucher der Text ausgegeben werden soll.

Zurückgegeben wird von der Funktion entweder true (wahr), wenn dieVariable erfolgreich registriert wurde, oder false (falsch), wenn die Regis-trierung fehlschlug.

Nachdem die neue Variable registriert wurde, kann man ihren Inhalt verän-dern:

//~ Wert der Session-Variable ändern

$HTTP_SESSION_VARS["s_language"] = $language;

Es gibt zwei Möglichkeiten, wie Session-Variablen in PHP ge-handhabt werden. Welche Methode zu verwenden ist oder ver-wendet werden kann, hängt von der PHP-Konfiguration ab.

Wenn in der php.ini der Wert register_globals auf on gestellt wurde, dannkann man auf die Session-Variablen wie auf normale Variablen zugreifen:

Beispiel:

<?php

//~ Variable registrieren

session_register("test");

//~ Zugriff auf die registrierte Variable

$test = "mit register_globals";

?>

116 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Tutorial

·

HINWEIS

Page 117: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Wenn register_globals nicht aktiviert ist, sondern nur track_vars, dannkann auf die Variablen nicht direkt zugegriffen werden, sondern nur überdas Array $HTTP_SESSION_VARS:

Beispiel:

<?php

//~ Variable registrieren

session_register("test");

//~ Zugriff auf die registrierte Variable

$HTTP_SESSION_VARS["test"] = "mit track_vars";

?>

Ist sowohl register_globals als auch track_vars aktiviert, so bezeichnendie globalen Variablen und die Variablen im Array $HTTP_SESSION_VARSdenselben Wert.

Die Konfiguration hinsichtlich register_globals und track_vars kann nur vom Administrator verändert werden.

9. Nachdem nun die Session gestartet und die Sprache wie folgt festgelegt wurde:

//~ Wert der Session-Variable ändern

$HTTP_SESSION_VARS["s_language"] = $language;

$s_language = $language;

müssen die Session-Daten noch an das SWF zurückgegeben werden.

Die Session-Daten werden auch in einem Cookie auf dem Rechner des Besuchers abge-legt, wenn diese Funktion in der php.ini aktiviert wurde. Allerdings ist es möglich, dassder Besucher keine Cookies annimmt. Dann würde der weitere Ablauf fehlschlagen.

Um also zu gewährleisten, dass die Session-Daten immer übergeben werden, müssensie an das SWF übergeben werden. Dies geschieht mit folgendem Code:

//~ Ausgabe des Statusflash::echoVar("result", $result);

//~ Ausgabe des Session-Namensflash::echoVar("_SNAME", session_name(), false);

//~ Ausgabe der Session-IDflash::echoVar("_SID", session_id(), false);

//~ Ausgabe der Statusmeldungflash::echoVar("message", $messageArray[$result], true);

Umgang mit Flash und PHP 117

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Tutorial

Page 118: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die Ausgabe sieht etwa so aus (andere Session-ID und evtl. anderer Session-Name):

&result=1&&_SNAME=PHPSESSID&&_SID=5ec4284761796b329890949d6324e449&&message=Session+gestartet.&

Zuerst wird der Statuscode ausgegeben (result). Dieser zeigt, ob alles korrekt abgelau-fen ist. Dann folgen der Session-Name (_SNAME), dann die Session-ID (_SID) und danneine Statusmeldung (message).

10. Nun benötigen wir den Code für den nächsten Block. In diesem wird ein Text ausgege-ben, der je nach ausgewählter Sprache entweder englisch oder deutsch ist.

Es wird aber nicht die Sprache übergeben, sondern nur die Session-Daten. In diesemFall gibt es noch ein Missverhältnis zwischen der Datenlänge, d.h. es wäre schnellerbzw. kürzer, die Sprache zu übergeben. Bei großen Projekten allerdings wird höchst-wahrscheinlich nicht nur die Sprache gespeichert, sondern eventuell noch andereInformationen, wie z.B. Benutzername, Passwort etc.

Da dies hier aber ein Beispiel ist und das Prinzip das gleiche bleibt, egal wie viele Datenin der Session gespeichert werden, ist das nicht von Relevanz. Fügen Sie also nach

} else if ($action == "get") {

folgenden Code ein:

//~ Deutschen und englischen Text definieren$messageArray["de"] = "Dies ist der deutsche Text.";$messageArray["en"] = "This is the english text.";$messageArray[""] = "Session nicht aktiv!";

//~ Text in der gewählten Sprache ausgebenflash::echoVar("message", $messageArray[$HTTP_SESSION_VARS["s_language"]],true);

Zuerst werden die zwei verschiedenen Texte definiert. Diese können auch aus einer an-deren Quelle stammen, hier jedoch werden sie der Einfachheit halber innerhalb desPHP-Scripts definiert.

Danach wird der entsprechende Text ausgegeben. Die Variable $s_language enthält diezuvor gewählte Sprache des Besuchers. Sie ist nun wieder verfügbar, und anhand vonihr wird entschieden, welcher der beiden Texte ausgegeben wird.

11. Nun wird noch der Block benötigt, mit dem die Session beendet bzw. gelöscht werdenkann. Fügen Sie hierzu nach

} else if ($action == "destroy") {

folgenden Code ein:

118 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 119: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ Statusmeldungen definieren$messageArray[0] = "Zerstörung fehlgeschlagen!";$messageArray[1] = "Session wurde zerstört!";

//~ Session zerstören$result = session_destroy();

//~ Ausgabe der Statusmeldungflash::echoVar("message", $messageArray[$result], true);

Zuerst werden die Statusmeldungen definiert, dann wird die Session mit session_destroy()zerstört und anschließend das Ergebnis bzw. die entsprechende Statusmel-dung ausgegeben.

Die Funktion session_destroy()

bool session_destroy (void)

Diese Funktion löscht bzw. beendet eine Session und löscht alle Daten, diemit dieser zusammenhängen. Zurückgegeben wird im Erfolgsfall true(wahr) und falls das Löschen fehlschlug, false (falsch).

Argumente gibt es keine, wichtig ist, dass die Session, die zerstört werdensoll, vorher eingeleitet wurde, ansonsten schlägt das Beenden der Sessionfehl.

12. Zuletzt benötigen wir noch den Block, der ausgegeben wird, wenn beim Aufruf desScripts keine Aktion angegeben wurde.

Fügen Sie hierzu nach

} else {

folgenden Code ein:

//~ Statusmeldung definieren$messageArray[0] = "Aktion nicht definiert!";

//~ Statusausgabeflash::echoVar("result", 0);

//~ Ausgabe der Statusmeldungflash::echoVar("message", $messageArray[0]);

} //~ end no correct action

Dieser Code gibt eine Fehlermeldung an das SWF aus, sollte beim Aufruf keine Aktionangegeben worden sein.

Umgang mit Flash und PHP 119

Tutorial

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 120: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Dieses Projekt bzw. diese Applikation ist nur ein Beispiel für den Umgang mit Sessions. Ineinem richtigen Projekt werden die Aktionen, die hier über Schaltflächen ausgelöst wer-den, eher vom Programmierer festgelegt und ohne Zutun des Besuchers ausgelöst. Umaber die Funktionsweise und vor allem den Umgang mit Session-Daten innerhalb vonFlash zu demonstrieren, eignet sich dieses Beispiel gut.

Der Ablauf in einem Projekt wäre wohl eher folgender:

1. Der Besucher kommt auf der Webseite an; es wird automatisch eine Session gestartet.

2. Dann wählt der Besucher seine Sprache.

3. Im weiteren Verlauf werden bei allen Aufrufen an externe PHP-Scripts die Session-Daten übergeben, und so wird erkannt, in welcher Sprache die Daten zurückgegebenwerden müssen (beispielsweise bei einem Menü oder einem Produktkatalog).

4. Die Session wird eventuell nicht explizit beendet, sondern automatisch entfernt, wennkeine Interaktion vom Besucher mehr kommt.

5.5 Beispiel: Besucherzähler mit PHP und FlashDieses Beispiel befindet sich im Ordner Applikationen\swfCount\ auf der CD-ROM.

Inhalt des SWF:

Abbildung 5.3: Dieses SWF ruft ein PHP-Script auf, das in einer Datei auf dem Server die Aufrufe zählt. So lässt sichein einfacher Besucherzähler mit Flash und PHP realisieren.

120 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 121: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Inhalt des PHP-Scripts:

<?php

//~ flash.inc.php-Klasse einbindeninclude("./includes/flash.inc.php");

//~ Ausgabe soll nicht gespeichert werdenflash::drawExpire();

//~ Speicherdatei definieren$countFile = "./count.txt";

//~ Überprüfen, ob Speicherdatei bereits vorhanden ist

if (!file_exists($countFile)) {

//~ Datei existiert noch nicht

//~ Datei im Modus für Lesen und Schreiben öffnen

//~ Da Datei nicht existiert, neu anlegen

$filePointer = fopen($countFile, "w+");

//~ Zugriffsrechte festlegen:

//~ Owner, Public und Group jeweils lesen und schreiben

chmod($countFile, 0666);

} else {

//~ Datei existiert bereits

//~ Datei zum Lesen und Schreiben öffnen

$filePointer = fopen($countFile, "r+");

} //~ end if

//~ Datei zum Schreiben (und Lesen) sperren

if (flock($filePointer, 2)) {

//~ Datei wurde noch nicht gesperrt

//~ Dateiinhalt lesen

$count = fread($filePointer, filesize($countFile));

//~ Gelesene Besucherzahl um eins erhöhen

$count++;

//~ Dateiinhalt löschen

ftruncate($filePointer, 0);

Umgang mit Flash und PHP 121

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 122: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ Dateizeiger auf den Beginn der Datei setzen

fseek($filePointer, 0);

//~ Neue Besucherzahl in die Datei schreiben

fwrite($filePointer, $count);

//~ Sperrung aufheben

flock($filePointer, 3);

} //~ end if

//~ Datei schließen

fclose($filePointer);

//~ Besucherzahl im Flash-Format ausgeben

flash::echoVar("count", $count);

?>

Der Ablauf ist folgender:

1. Das SWF ruft beim Start ein PHP-Script auf.

2. Dieses PHP-Script liest die bisherige Besucherzahl aus einer Datei, erhöht diese Zahl umeins, speichert sie in der Datei und gibt sie in Flash-kompatiblem Format aus.

3. Diese Ausgabe wird von Flash geladen und die Besucherzahl in einem Textfeld ange-zeigt.

Da es sich bei dieser Applikation um ein Beispiel handelt, wurde auf dieAusgabe von Fehlermeldungen verzichtet. Vor dem Einsatz sollten Sie zu-nächst das Script im Browser direkt aufrufen, um eventuelle Fehlermeldun-gen sehen zu können.

Aufbau der Applikation:

1. Erstellen Sie einen neuen Flash-Film mit zwei Ebenen.

2. Auf der einen Ebene erstellen Sie ein dynamisches Textfeld mit der Variable showCount.Dies ist das Textfeld, in dem später die Besucherzahl ausgegeben wird.

3. Auf der anderen Ebene fügen Sie eine (leere) Filmsequenz ein, die folgenden Code ent-hält:

//~ ActionScript

onClipEvent (load) {

loadVariables("swfCount.php", this);

}

122 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 123: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

onClipEvent (data) {

_root.showCount = "Sie sind Besucher # "+count;

}

Der erste onClipEvent ruft das Script swfCount.php beim Start der Filmsequenz auf undlädt dessen Ausgabe in die Filmsequenz.

Der zweite onClipEvent gibt die Besucherzahl zusammen mit dem kurzen Text aufEbene 0 aus, sobald die Besucherzahl komplett geladen wurde.

Waren z.B. bereits 22 Besucher auf der Seite (inklusive des momentanenBesuchers), dann ist die Ausgabe folgende:

Sie sind Besucher # 22

4. Aufbau des PHP-Scripts: Zu Beginn muss die flash.inc.php-Klasse eingebunden werden,um auf ihre Funktionen zugreifen zu können. Danach müssen Sie die Anweisung anBrowser und Proxies senden, die Ausgabe des Scripts nicht zu cachen. Dies ist wichtig,falls einer der Besucher in naher Zukunft wieder auf Ihre Seite gelangen sollte. Es wirddadurch sichergestellt, dass er immer die aktuellste Besucherzahl bekommt. Zuletztmuss noch eine Datei definiert werden, in der die Besucherzahl gespeichert wird:

<?php

//~ flash.inc.php-Klasse einbindeninclude("./includes/flash.inc.php");

//~ Ausgabe soll nicht gespeichert werdenflash::drawExpire();

//~ Speicherdatei definieren$countFile = "./count.txt";

Achten Sie darauf, dass das Script in diesem Verzeichnis bzw. für die SpeicherdateiSchreibrechte hat. Die Rechte des Verzeichnisses bzw. des Scripts können Sie mit chmodändern (siehe Exkurs zu chmod unten).

CHMOD – Rechte unter Linux vergeben

chmod – (engl.: change mode = Modus ändern) chmod heißt der Befehl un-ter Linux, um die Rechte einer Datei oder eines Ordners zu ändern.

Anmerkung: Dieser Exkurs ist nur für die Arbeit unter Linux etc. wichtig, un-ter Windows ist der Inhalt dieses Exkurses hinfällig, da das Rechtesystemein anderes ist.

Für cgi-Scripts beispielsweise ist es unbedingt nötig, die Rechte des Scriptskorrekt zu setzen, damit sie ausgeführt werden können. Bei PHP-Scriptsmuss das Script selbst zwar nicht bestimmte Rechte bekommen, sobald ein

Umgang mit Flash und PHP 123

Exkurs

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

BEISPIEL

Page 124: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

PHP-Script jedoch mit dem Dateisystem zu tun hat (vor allem beimSchreiben/Erstellen von Dateien und Ordnern) muss man sich zwangsläu-fig mit dem Rechtesystem von Linux oder anderen Unix-Derivaten ausei-nander setzen.

In diesem Fall würde das Script vom Eigentümer gelesen, geschrieben undausgeführt werden können. Alle anderen können es nur lesen und aus-führen, aber nicht ändern.

• Was bedeuten diese CHMOD-Nummern? 0: keine Rechte1: nur ausführen2: nur schreiben3: lesen und schreiben4: nur lesen5: lesen und ausführen6: lesen und schreiben7: lesen, schreiben und ausführen

• Beispiele bei Dateien:777: Alle können lesen, schreiben und ausführen.755: Der Eigentümer kann alles, alle anderen können nur lesen und aus-führen. 644: Der Eigentümer kann lesen und schreiben, alle anderen können nurlesen.

• Beispiele bei Verzeichnissen:777: Alle können lesen, schreiben und suchen.755: Der Eigentümer kann alles, andere können nur suchen.

• Beispiele für typische Einstellungen:cgi-Scripts: 755 (z.B. Perl-Scripts)Datendateien: 666 (wie z.B. unsere Datei, um die Besucher zu zählen)Konfigurationsdateien: 644 (Dateien, die nicht durch Scripts aktualisiertwerden)Ordner: 777 (mit korrekten Zugriffsrechten der Dateien)

• Tipp: Wenn Sie den Modus eines Scripts auf 400 ändern, dann wird es de-aktiviert (der Eigentümer hat noch Leserecht, alle anderen haben keinerleiRechte). Sie können es jederzeit wieder in einen anderen Modus bringen,um es zu reaktivieren.

124 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Lesen (4)

Schreiben (2)

Ausführen (1)

Insgesamt:

User/Owner(Eigentümer)

x

x

x

(4+2+1) = 7

Group(Gruppe)

x

x

(4+1) = 5

Others/Public(Öffentlichkeit)

x

x

(4+1) = 5

Exkurs

Page 125: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

5. Der nächste Schritt besteht darin, einen Dateizeiger zu erstellen, der uns in der ge-wünschten Speicherdatei die bisherige Besucherzahl lesen und dann die neue Besucher-zahl speichern lässt. Hierzu müssen wir überprüfen, ob die Datei, in der wir lesen bzw.schreiben wollen, überhaupt existiert, und je nachdem den Dateizeiger erstellen:

//~ Überprüfen, ob Speicherdatei bereits vorhanden ist

if (!file_exists($countFile)) {

//~ Datei existiert noch nicht

//~ Datei im Modus für Lesen und Schreiben öffnen

//~ Da Datei nicht existiert, neu anlegen

$filePointer = fopen($countFile, "w+");

//~ Zugriffsrechte festlegen:

//~ Alle dürfen die Datei lesen und schreiben

chmod($countFile, 0666);

} else {

//~ Datei existiert bereits

//~ Datei zum Lesen und Schreiben öffnen

$filePointer = fopen($countFile, "r+");

} //~ end if

Die Funktion file_exists()

bool file_exists (string filename)

Die Funktion file_exists() nimmt als Argument einen Dateinamen bzw.einen Pfad zu einer Datei.

Wenn die Datei existiert, wird true (wahr) zurückgegeben, wenn sie nichtexistiert, liefert die Funktion den Wert false (falsch) zurück.

Mit file_exists() wird überprüft, ob die Datendatei bereits existiert.

Wenn die Datei noch nicht existiert, wird versucht, sie anzulegen und zum Lesen undzum Schreiben zu öffnen. Wenn die Datei noch nicht existierte, ist es sinnvoll, dieDateirechte gleich korrekt zu setzen. In diesem Fall wird der Modus der Datei auf 666geändert, was typisch für eine Datendatei ist (siehe Exkurs zu chmod() oben).

Wenn die Datei bereits existiert, wird sie zum Lesen und Schreiben geöffnet, ihre Datei-länge allerdings nicht auf 0 zurückgesetzt, da ja sonst die bereits gespeicherte Besucher-anzahl verloren ginge.

Umgang mit Flash und PHP 125

Tutorial

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 126: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Nachdem der Dateizeiger erstellt worden ist, kann in der Datei sowohl gelesen als auchgeschrieben werden.

6. Da ein Besucherzähler (je nach Besucherzahlen) oft bis sehr oft aufgerufen wird, ist essinnvoll, die Datendatei während des Schreibens für andere Zugriffe zu sperren, da essonst bei zeitgleichem Zugriff mehrerer Instanzen des Scripts zu einer Beschädigungder Datendatei kommen kann.

//~ Datei zum Schreiben (und Lesen) sperren

if (flock($filePointer, 2)) {

//~ Datei wurde noch nicht gesperrt

//~ Dateiinhalt lesen

$count = fread($filePointer, filesize($countFile));

//~ Gelesene Besucherzahl um eins erhöhen

$count++;

//~ Dateiinhalt löschen

ftruncate($filePointer, 0);

//~ Dateizeiger auf den Beginn der Datei setzen

fseek($filePointer, 0);

//~ Neue Besucherzahl in die Datei schreiben

fwrite($filePointer, $count);

//~ Sperrung aufheben

flock($filePointer, 3);

} //~ end if

Mit der Funktion flock() wird überprüft, ob die Datei bereits gesperrt ist (in diesemFall würde nicht in die Datei geschrieben werden), und eventuell eine Sperrung für ex-klusives Schreiben erstellt.

Gibt flock() true (wahr), also eine Bestätigung für eine erfolgreiche Sperrung zurück,so wird der momentane Dateiinhalt gelesen (das ist die bisherige Besucherzahl) und inder Variable $count gespeichert. Die gelesene Besucherzahl wird dann um eins erhöht(für den momentanen Besucher).

Danach wird die Dateilänge mit der Funktion ftruncate() auf 0 zurückgesetzt, d.h. derInhalt der Datei wird gelöscht. Da wir aber zuvor die Besucherzahl aus der Datei gele-sen haben, befindet sich der interne Dateizeiger am Ende der Datei. Diesen kann manmit der Funktion fseek() wieder an den Anfang der Datei bewegen.

126 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 127: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Nachdem der Dateizeiger wieder am Anfang der Datei steht, kann in die Datei geschrie-ben werden, in diesem Fall die neue Besucherzahl ($count). Nach dem Schreibvorgangkann bzw. sollte die Sperrung der Datei gelöst werden.

7. Nachdem nun die Besucherzahl gelesen und aktualisiert wurde, kann bzw. sollte dieDatendatei geschlossen werden.

//~ Datei schließen

fclose($filePointer);

//~ Besucherzahl in Flash-Format ausgeben

flash::echoVar("count", $count);

?>

8. Die neue Besucherzahl wird dann in Flash-kompatiblem Format ausgegeben und kannso von dem SWF weiterverarbeitet werden.

Beispiel einer Ausgabe ist:

&count=22&

Dieser Besucherzähler ist noch sehr einfach. Ein Beispiel für eine etwas komplexere Ein-satzmöglichkeit wäre z.B., an verschiedenen Stellen des SWF Angelpunkte mit Aufrufendieses Scripts einzubauen und in verschiedenen Dateien zu speichern. So wäre es z.B. mög-lich zu erfassen, wie viele Besucher das Intro übersprungen oder wie viel Prozent derGesamtbesucherzahl sich die Referenzen angesehen hat etc.

Umgang mit Flash und PHP 127

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 128: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

5.6 Beispiel: automatische Sprachauswahl mit Hilfe von PHP

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

Inhalt des SWF:

Abbildung 5.4: Dieses SWF lädt den Willkommenstext, welcher im PHP-Script in der richtigen Sprache ermitteltwird und zeigt in in dem Textfeld text an.

Inhalt des PHP-Scripts:

<?php

//~ Klasse flash.inc.php einbindeninclude("./includes/flash.inc.php");

//~ Ausgabe soll nicht gespeichert werdenflash::drawExpire();

//~ Verschiedene Sprachen zusammenfassen

$myLanguages["de"] = array("de", "at", "ch");$myLanguages["en"] = array("en", "us", "uk");$myLanguages["fr"] = array("fr");$myLanguages["it"] = array("it");

128 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 129: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ Willkommenstexte definieren

$myTexts["de"] = "Willkommen!";$myTexts["en"] = "Welcome!";$myTexts["fr"] = "Bienvenue!";$myTexts["it"] = "Benvenuto!";

//~ Standard für Willkommenstext

$standardLanguage = "de";

//~ Sprache des Client (Browsers) auslesen

$lang = getenv('HTTP_ACCEPT_LANGUAGE');

//~ Array erzeugen, da z.B. en,pdf

$lang = split(",",$lang);

//~ erstes Element wählen

$userLanguage = $lang[0];

//~ Überprüfen, zu welcher Sprachgruppe die Sprache des Clients gehört

while (list($key,$valueArray) = each($myLanguages)) {

if (in_array($userLanguage, $valueArray)) {

//~ Zugehörigkeit gefunden

$standardLanguage = $key;

} //~ end if

} //~ end while

//~ Willkommenstext korrekt formatiert ausgeben

flash::echoVar("text", $myTexts[$standardLanguage], true);

?>

Der Ablauf ist folgender:

1. Das SWF ruft das PHP-Script auf.

2. Das Script ermittelt anhand der Browsersprache die Sprache des Besuchers.

3. Wenn diese Sprache definiert wurde, wird der entsprechende (korrekt für Flash forma-tierte) Text ausgegeben, ansonsten der Text der Standardsprache.

4. Der zurückgegebene Text (in diesem Fall »Willkommen« in verschiedenen Sprachen)wird in einem Textfeld angezeigt.

Umgang mit Flash und PHP 129

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 130: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Aufbau der Applikation:

1. Erstellen Sie einen neuen Flash-Film mit zwei Ebenen.

2. Erstellen Sie auf der zweiten Ebene ein dynamisches Textfeld mit der Variable text.

3. Auf der ersten Ebene erstellen Sie eine (leere) Filmsequenz, die folgenden Code zuge-ordnet bekommt:

onClipEvent (load) {

loadVariables("flashLanguage.php", this);

}

onClipEvent (data) {

_root.text = this.text;

}

Der erste onClipEvent() ruft das Script flashLanguage.php beim Start der Filmsequenzauf und lädt dessen Ausgabe in die Filmsequenz.

Der zweite onClipEvent() gibt zeigt den zurückgegebenen Text in einem Textfeld aufEbene 0 an, sobald er vollständig geladen wurde.

Ist die Sprache des Besuchers z.B. Englisch, dann ist die Ausgabe folgende:

Welcome!

4. Das PHP-Script wird wie folgt erstellt: Zuerst muss die Klasse flash.inc.php eingebundenwerden, um auf ihre Funktion zugreifen zu können. Dann muss noch dafür gesorgtwerden, dass die Ausgabe des Scripts nicht im Cache des Browsers gespeichert und so-mit eventuell bei einem weiteren Besuch wiederholt angezeigt wird. Dies übernimmtder folgende Code:

<?php

//~ Klasse flash.inc.php einbindeninclude("./includes/flash.inc.php");

//~ Ausgabe soll nicht gespeichert werdenflash::drawExpire();

5. Dann müssen verschiedene Sprachen sowohl definiert als auch in Gruppen zusammen-gefasst werden. So ist z.B. das Wort für »Willkommen« im britischen und amerikani-schen Englisch dasselbe. Wir fassen diese Sprachen also in einer Gruppe zusammen:

//~ Verschiedene Sprachen zusammenfassen

$myLanguages["de"] = array("de", "at", "ch");$myLanguages["en"] = array("en", "us", "uk");$myLanguages["fr"] = array("fr");$myLanguages["it"] = array("it");

130 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

BEISPIEL

Page 131: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Der Schlüssel des Arrays ist die Sprache, die nachher ausgegeben wird. Für dieseSchlüssel müssen in einem anderen Array Texte angegeben werden. Die Elemente desArrays sind die verschiedenen Sprachen, die einer Gruppe zugeordnet werden. Demdeutschen Willkommenstext werden z.B. die deutsche, österreichische und schweizeri-sche Sprachvariante des Deutschen zugeordnet.

Es ist selbstverständlich auch möglich, für die Ausgabe einer Sprache nur eine einzigeandere Sprache zu definieren, jedoch bietet sich die Zusammenfassung in Gruppen an.

6. Nun muss das Array festgelegt werden, das die verschiedenen Willkommenstexte ent-hält:

//~ Willkommenstexte definieren

$myTexts["de"] = "Willkommen!";$myTexts["en"] = "Welcome!";$myTexts["fr"] = "Bienvenue!";$myTexts["it"] = "Benvenuto!";

Die Schlüssel des Arrays müssen hier mit den Schlüsseln identisch sein, die im vorigenArray definiert wurden.

7. Nun muss noch eine Standardsprache festgelegt werden:

//~ Standard für Willkommenstext

$standardLanguage = "de";

Die Standardsprache muss deshalb festgelegt werden, da es sein kann, dass der Browsereinen Sprachcode übermittelt, der entweder in keiner der Gruppen definiert wurdeoder unverständlich ist.

Wenn die Sprache, die der Browser übermittelt, in einer der Gruppen gefunden wird,dann wird die Standardsprache durch diesen Code ersetzt.

8. Nun muss noch die Sprache des Browsers ausgelesen werden. Dies geschieht mit Hilfeder vom Browser automatisch übermittelten Variable $HTTP_ACCEPT_LANGUAGE.

//~ Sprache des Clients (Browsers) auslesen

$lang = getenv('HTTP_ACCEPT_LANGUAGE');

//~ Array erzeugen, da z.B. en,pdf

$lang = split(",", $lang);

//~ erstes Element wählen

$userLanguage = $lang[0];

Da einige Browser (z.B. der Netscape 4.78) die HTTP_ACCEPT_LANGUAGE als kommasepa-riertes Array mit Zusatzinformationen übermitteln (z.B. en,pdf), müssen wir das ersteElement (den Sprachcode) extrahieren.

Umgang mit Flash und PHP 131

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 132: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

9. Nun muss überprüft werden, zu welcher Sprachgruppe die Sprache des Browsersgehört bzw. welcher Willkommenstext an den Benutzer ausgegeben werden soll:

//~ Überprüfen, zu welcher Sprachgruppe die Sprache des Clients gehört

while (list($key,$valueArray) = each($myLanguages)) {

if (in_array($userLanguage, $valueArray)) {

//~ Zugehörigkeit gefunden

$standardLanguage = $key;

} //~ end if

} //~ end while

Der oben stehende Code durchläuft das Array, in dem die Sprachgruppen definiertwurden. Findet er den Sprachcode des Browsers in einem der Arrays, so ersetzt er dieStandardsprache (hier: Deutsch) durch den Schlüssel des Arrays, also durch den Wertfür die Sprachgruppe.

Wenn die Variable $userLanguage den Wert uk enthält, dann wird dieserWert in dem Array gefunden, das den Schlüssel en hat. Somit wird alsAusgabesprache Englisch festgelegt.

Wenn die Variable $userLanguage den Wert cz enthält, dann wird dieserWert in keiner der (hier) definierten Sprachgruppen gefunden und dieStandardausgabesprache bleibt Deutsch.

10. Nachdem die Ausgabesprache ermittelt wurde, muss der entsprechende Text noch aus-gegeben werden. Dies geschieht mit folgendem Code:

//~ Willkommenstext korrekt formatiert und kodiert ausgeben

flash::echoVar("text", $myTexts[$standardLanguage], true);

?>

Die Browsersprache kann von der wirklichen Sprache des Benutzers ab-weichen. Einige Browser senden auch mehr als einen Sprachcode mit, indiesem Fall wird der Text der Standardsprache (hier: Deutsch) ausgege-ben. Um hundertprozentig die Sprache zu wählen, die der Besucher ver-steht, sollten Sie ihn selbst wählen lassen.

132 Kapitel 5

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

BEISPIEL

·

HINWEIS

Page 133: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

KAPITEL 6COOKIES MIT FLASH UND PHP

Page 134: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Cookie (engl.: Plätzchen, Keks) – Cookies (plural) sind Dateien, die von Anbietern imInternet auf der Festplatte des Besuchers gespeichert werden können. Sie enthalten z.B.Informationen über den letzten Besuch, die Anzahl der Besuche oder auch verschlüsseltePasswörter.

Mit Flash allein lassen sich keine Cookies setzen und lesen, zusammen mit PHP jedoch las-sen sich Cookies auch bei Flash-Projekten ohne weiteres einsetzen. Die Akzeptanz fürCookies ist nicht sehr groß, und sehr viele Surfer verweigern die Annahme von Cookies.An manchen Stellen jedoch sind Cookies besser als irgendeine andere Methode geeignet,um Daten von bestimmten Besuchern bzw. von jedem Besucher zu speichern, um späterwieder darauf zugreifen zu können. Im folgenden Beispiel wird solch ein Einsatzgebiet ge-zeigt. Um das Beispiel nachvollziehen zu können, müssen Sie die Annahme von Cookies inIhrem Browser aktiviert haben.

6.1 Beispiel: Cookies setzen / löschenDieses Beispiel befindet sich im Ordner Applikationen\swfCookie\ auf der CD-ROM.

Inhalt des PHP-Scripts:

<?php

//~ flash.inc.php-Klasse einbindeninclude("./includes/flash.inc.php");//~ Speichern der Ausgabe verhindernflash::drawExpire();$action = $HTTP_GET_VARS["action"];if (empty($action)) {

//~ Keine Aktion definiert, also Cookie lesenif (isset($c_Pos)) {

//~ Position aus Cookie extrahieren$posArray = explode("|", $c_Pos);//~ Positionen ausgebenflash::echoVar("xPos", $posArray[0]);flash::echoVar("yPos", $posArray[1]);$message = "Position geladen!";

} else {//~ Keine Position gespeichert$message = "Keine Position gespeichert!";

}} else if ($action == "set") {

//~ Cookie setzen//~ Positionen in Cookie speichern - Gültigkeit: 24h$result = setcookie("c_Pos", $xPos."|". $yPos, time()+3600*24);

134 Kapitel 6

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 135: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

if ($result) {//~ Cookie erfolgreich gesetzt$message = "Position gespeichert!";

}} else if ($action == "del") {

//~ Cookie löschen$result = setcookie("c_Pos", "", time() - 3600);$message = "Cookie gelöscht!";

} //~ end if//~ Statusmeldung ausgebenflash::echoVar("message", $message, true);

?>

Aufbau des SWF:

Abbildung 6.1: In diesem SWFbefindet sich eine Filmsequenz(circle), die der Besucher mitder Maus verschieben kann. BeimAbsetzen wird die Position derFilmsequenz in einem Cookie ge-speichert. Bei wiederholtem Aufrufder Seite bzw. des SWF wird diePosition der Filmsequenz wiederhergestellt.

Cookies mit Flash und PHP 135

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 136: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Der Ablauf ist folgender:

1. Im SWF befindet sich ein Kreis, der mit der Maus auf der Bühne verschoben werdenkann.

2. Wird der Kreis an einer bestimmten Stelle abgesetzt, so werden die Positionsdaten (X-Wert und Y-Wert) an ein PHP-Script übermittelt.

3. Dieses PHP-Script speichert die gesetzte Position in einem Cookie mit einer Gültigkeits-dauer von einem Tag.

4. Wenn der Besucher nun innerhalb eines Tages auf die Seite mit diesem SWF zurück-kehrt, dann werden mit PHP die Positionsdaten aus dem Cookie ausgelesen, in Flashgeladen und der Kreis an die entsprechende Stelle gesetzt.

Der Aufbau der Applikation:

1. Erstellen Sie einen neuen Flash-Film.

2. Erstellen Sie auf Ebene 0 ein neues dynamisches Textfeld mit dem Namen message. Indiesem Textfeld werden nachher Statusmeldungen ausgegeben.

3. Erstellen Sie ebenfalls auf Ebene 0 eine neue Filmsequenz (hier: circle). In dieserFilmsequenz erstellen Sie eine neue Schaltfläche (hier: circleButton) mit beliebigerForm (hier: Kreis). Um die Filmsequenz verschiebbar zu machen und die Positionen ineinem Cookie zu speichern, müssen Sie dieser Schaltfläche folgenden Code zuweisen:

on (press) {

_root.message = "Verschieben...";

this.startDrag();

}

on (release) {

_root.message = "Speichere aktuelle Position...";

this.stopDrag();

tStamp = new Date().getTime();

pos = "xPos="+_x+"&yPos="+_y;

_root.loadVariables("swfCookie.php?action=set&"+pos+"&"+tStamp);

}

Bei der ersten Aktion für den Button wird die Filmsequenz bei einem Klick auf denButton an die Maus angeheftet und kann verschoben werden.

Wird die Maus losgelassen, so wird der Code in on (release) ausgeführt. Er entferntdie Filmsequenz von der Maus.

136 Kapitel 6

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 137: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

In der dritten Zeile wird ein Timestamp erstellt, das ist deshalb wichtig, da das PHP-Script nicht aus dem Cache geladen werden darf.

In der vierten Zeile wird die Position der Filmsequenz in einen String umgeformt, derdann an das PHP-Script übergeben wird. Die Aktion »Cookie setzen« (action=set) undder Timestamp werden zusätzlich noch an den URL angehängt. Die Aktion teilt demPHP-Script mit, die Positionsdaten zu verarbeiten und in einem Cookie zu speichern.

4. Nun wird noch der Code benötigt, um die Filmsequenz an eine bestimmte (im Cookiegespeicherte) Position zu verschieben. Dazu weisen Sie der Filmsequenz folgenden Codezu:

onClipEvent (load) {

this.loadVariables("swfCookie.php");

}

onClipEvent (data) {

this._x = this.xPos;

this._y = this.yPos;

_root.message = this.message;

}

Der erste Event lädt die im Cookie gespeicherte Position in die Filmsequenz (das PHP-Script extrahiert die Position aus dem Cookie und gibt sie dann für Flash lesbar aus).Der zweite Event bewegt die Filmsequenz an die entsprechende Position (wenn eine ge-speichert wurde), sobald alle Daten geladen sind.

5. Erstellen Sie nun eine weitere Schaltfläche (hier: button) auf Ebene 0 und weisen Sie die-ser folgenden Code zu:

on (release) {

message = "Cookie wird gelöscht...";

loadVariablesNum("swfCookie.php?action=del", 0);

}

Bei einem Klick auf diese Schaltfläche wird das PHP-Script mit der Aktion »Löschen«aufgerufen (action=del). Das PHP-Script löscht dann das gespeicherte Cookie. Beimnächsten Aufruf der Seite mit dem SWF wird die Filmsequenz dann nicht bewegt, dakeine Positionsdaten gespeichert wurden.

6. Der Flash-Teil dieser Applikation ist nun beendet. Der Inhalt des PHP-Scripts ist folgen-der:

Cookies mit Flash und PHP 137

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 138: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

<?php

//~ flash.inc.php-Klasse einbindeninclude("./includes/flash.inc.php");

//~ Speichern der Ausgabe verhindernflash::drawExpire();

Zuerst wird die flash.inc.php-Klasse eingebunden, damit auf deren Funktionen zugegrif-fen werden kann. Dann wird dafür gesorgt, dass die Ausgabe des Scripts nicht im Cachegespeichert wird.

7. Da das PHP-Script drei verschiedene Aufgaben hat – Inhalt des Cookies ausgeben,Cookie speichern und Cookie löschen –, wird anhand einer Variable action erkannt,welche Aktionen ausgeführt werden sollen. Für diese Unterscheidung wird folgendeStruktur benötigt:

if (empty($action)) {

//~ Keine Aktion definiert, also Cookie lesen

} else if ($action == "set") {

//~ Cookie speichern

} else if ($action == "del") {

//~ Cookie löschen

} //~ end if

8. Diese drei Blöcke enthalten nun unterschiedlichen Code. Zuerst definieren wir denCode, um den Inhalt des Cookies bzw. die Position auszugeben. Dazu fügen wir nach

if (empty($action)) {

folgenden Code ein:

if (isset($c_Pos)) {

//~ Position aus Cookie extrahieren$posArray = explode("|", $c_Pos);

//~ Positionen ausgebenflash::echoVar("xPos", $posArray[0]);flash::echoVar("yPos", $posArray[1]);

$message = "Position geladen!";

} else {

//~ Keine Position gespeichert

$message = "Keine Position gespeichert!";

}

138 Kapitel 6

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 139: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Zuerst wird überprüft, ob das Cookie bereits gesetzt wurde. Die Variable im Cookie, inder die Position gespeichert wird, ist $c_Pos. Wenn $c_Pos definiert ist, dann ist dasCookie bereits gesetzt worden. Die Variable $c_Pos hat folgende Form:

x-Wert|y-Wert

Das bedeutet: Wenn die Filmsequenz auf die Position

_x = 100

und

_y = 50

gezogen wurde, enthält die Variable $c_Pos folgenden Wert:

100|50

Um aus diesem Wert wieder die X-Position und die Y-Position zu bekommen, muss andem |-Zeichen gesplittet werden. Zurückgegeben wird ein Array, das als erstes Elementden X-Wert und als zweites Element den Y-Wert enthält.

Diese Werte werden dann ausgegeben. Mit den Beispielwerten von oben wird dieAusgabe so aussehen:

&xPos=302.25&&yPos=139.25&

Wenn das Cookie noch nicht gesetzt wurde, werden keine Positionswerte zurückgege-ben.

An verschiedenen Stellen werden Statusmeldungen definiert, diese werden ganz amEnde des Scripts ausgegeben. Sie werden hier nicht näher beschrieben, da sie für dieFunktionalität der Applikation nicht weiter wichtig sind.

9. Nun wenden wir uns dem Teil des PHP-Scripts zu, in welchem das Cookie gesetzt bzw.die Position der Filmsequenz gespeichert wird. Fügen Sie nach

} else if ($action == "set") {

folgenden Code ein:

//~ Positionen in Cookie speichern; Gültigkeit: 24h

$result = setcookie("c_Pos", $xPos."|".$yPos, time()+3600*24);if ($result) {

//~ Cookie erfolgreich gesetzt$message = "Position gespeichert!";

} else {//~ Fehlschlag beim Setzen des Cookies$message = "Fehler beim Speichern!";

} //~ end if

Cookies mit Flash und PHP 139

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 140: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Von dem SWF werden drei Informationen übergeben, einmal die Aktion (action=set),die dazu führt, dass der oben stehende Code ausgeführt wird, und dazu der X-Positionswert ($xPos) der Filmsequenz und der Y-Positionswert ($yPos) der Film-sequenz.

Die Positionswerte werden mit der Funktion setcookie() in einem Cookie in der Form

X-Wert|Y-Wert

gespeichert.

Die Gültigkeit des Cookies beträgt genau 24 Stunden. Nach 24 Stunden ist das Cookieungültig und kann nicht mehr verwendet werden bzw. es wird vom Rechner des Clientsentfernt. Sie können die Gültigkeitsdauer selbstverständlich verlängern, jedoch sollte inunserem Fall eine Zeit von 24 Stunden ausreichend sein. Die Angabe der Gültigkeitmuss in Sekunden erfolgen (3600[Sekunden pro Stunde]*24[Stunden]).

Die Variable, die gespeichert wird, und unter der nachher auch die Positionswerte zufinden sind, ist in diesem Fall $c_Pos.

Sie können diese Variable nennen, wie es Ihnen beliebt, allerdings sollten Sie darauf ach-ten, dass Sie der Variable erstens einen eindeutigen und einmaligen Namen geben, unddass Sie die Variable zweitens kennzeichnen bzw. nachher erkennen können, dass dieseine Variable aus einem Cookie ist. Hier geschieht das durch das Voranstellen von c_.

Sollten Sie eine Variable im Cookie speichern bzw. einen Namen für die Variable benut-zen, welchen Sie auch im PHP-Script verwenden, so kann es dazu kommen, dass dieseVariable versehentlich überschrieben wird.

Achten Sie also darauf, dass Sie einen eindeutigen und einmaligen Namen vergeben.Bei sensiblen Daten ist es zudem noch sinnvoll, die Variablennamen nicht so zu wählen,dass jeder, der in das Cookie hineinsieht, sofort erkennt, für was die Variable verwendetwird.

Wenn Sie ein Cookie speichern, das die Login-Informationen z.B. eines Forums enthält,so nennen Sie die Variable nicht

master_password

sondern besser:

mpw

oder geben Sie ihr einen anderen Namen, der nicht sofort auf den Inhalt schließen lässt.

Wenn Sie Passwörter in Cookies speichern, dürfen Sie diese selbstverständlich keines-falls unverschlüsselt speichern. Eine übliche Vorgehensweise ist, nur die Prüfsumme ei-nes Passworts und den Primärschlüssel des Benutzers in der Datenbank im Cookie zuspeichern. Andernfalls würde das Passwort nämlich immer im Klartext per HTTP ver-schickt werden, was eine große Sicherheitslücke darstellt.

140 Kapitel 6

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 141: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die Funktion setcookie()

int setcookie (string name [, string value [, int expire [, stringpath [, string domain [, int secure]]]]])

Mit dieser Funktion lassen sich Cookies senden bzw. setzen. Zurückgegebenwird ein entweder true (wahr) bei Erfolg der Funktion oder false (falsch)bei einem Fehlschlag.

Alle Parameter bis auf name sind optional. Wenn Sie nur das Argument nameangeben, wird das Cookie gelöscht.

Parameter:

string nameDer Name des Cookies und gleichzeitig auch der Name der Variable, dienachher in PHP verfügbar ist. Sie sollten im Namen keine Sonderzeichenverwenden, sondern nur Zeichen, die auch in PHP bei Variablennamen ver-wendet werden dürfen.Der Variablenname ist case-sensitive, d.h. es wird zwischen Groß- undKleinschreibung unterschieden.

Beispiel: Wenn Sie ein Cookie mit folgendem Code setzen:<?phpsetcookie("c_test", "Hallo");?>Dann können Sie in PHP (vorausgesetzt, register_globals in der php.iniwurde auf on gesetzt) durch$c_test$HTTP_COOKIE_VARS["c_test"]auf den Inhalt der Variable zugreifen.

string valueDieses Argument bezeichnet den Wert des Cookies. Der Wert wird automa-tisch URL-kodiert und beim Laden des Cookies wieder dekodiert.Wenn Sie das Cookie löschen wollen, so lassen Sie dieses Argument aus bzw.verwenden "", um es zu übergehen.

int expireDieses Argument ist das Verfallsdatum des Cookies. Es muss in Sekundenseit dem 1. Januar 1970 angegeben werden.Die Sekunden seit dem 1. Januar 1970 können mit der Funktion time() er-mittelt werden.

Beispiel: Um ein Cookie mit 24 Stunden Gültigkeit zu erstellen, muss manfolgenden Code benutzen:<?php/*~ Sekunden seit dem 1. Jan. 1970 bis zum Verfallsdatum errechnen

Cookies mit Flash und PHP 141

Tutorial

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 142: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Sek. seit dem 1. Jan. 1970 plus 3600 (Sekunden pro Stunde) mal 24(Stunden pro Tag)*/$expire = time() + 3600 * 24;setcookie("c_test", "Hallo", $expire);?>Um dieses Argument zu übergehen, setzen Sie es einfach gleich 0

string pathMit diesem Parameter kann man den Pfad bestimmen, in dem das Cookiegültig ist.

Beispiel:<?phpsetcookie ("c_test", "Hallo", 0, "/test");?>Dieses Cookie ist nun im Verzeichnis /test und allen Unterverzeichnissengültig. In einem übergeordneten Verzeichnis lässt sich nicht auf den Inhaltdes Cookies zugreifen.Um dieses Argument zu übergehen, setzen Sie es einfach gleich "".

string domainMit diesem Parameter kann man die Domain bestimmen, auf der dasCookie gültig ist.

Beispiel:<?phpsetcookie("c_test", "Hallo", 0, "", "flashtool.de");?>Dieses Cookie ist nur auf der Domain flashtool.de gültig.Um dieses Argument zu übergehen, setzen Sie es einfach gleich "".

int secureMit diesem Parameter kann festgelegt werden, ob die Daten des Cookiesnur bei einer gesicherten Verbindung (HTTPS; siehe Kapitel 5.2) übertragenwerden dürfen.

Beispiel:<?phpsetcookie("c_test", "Hallo", 0, "", "", 1);?>Dieses Cookie bzw. dessen Daten würde(n) nur bei einer gesichertenVerbindung übertragen werden bzw. verfügbar sein.Um dieses Argument zu übergehen bzw. eine Übertragung immer zuzulas-sen, setzen Sie es einfach gleich 0.

Cookies können konstruktionsbedingt erst bei der nächstenHTTP-Anforderung ausgelesen werden.

142 Kapitel 6

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Tutorial

Page 143: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Beispiel:<?phpsetcookie("c_test", "Hallo");echo $c_test;?>Man könnte annehmen, dass dieses Script

Hallo

ausgibt, dies ist aber nicht richtig. Cookies werden nur bei Beginn desAufrufs eines Scripts geladen. In diesem Fall ist das Cookie (und damit dieVariable $c_test) zum Zeitpunkt der Ausgabe noch nicht verfügbar. WennSie das oben stehende Script im Browser aktualisieren, ist das Cookie ver-fügbar und es wird

Hallo

ausgegeben. Wenn Sie eine Variable sowohl in einem Cookie speichern alsauch sofort darauf zugreifen wollen, dann empfiehlt sich folgender Code:

<?phpif (!isset($c_test)) {

$c_test = "Hallo";}setcookie("c_test", $c_test);print_r($c_test);?>

In diesem Fall würde die Ausgabe sofort funktionieren. Mit der if-Abfragewird sichergestellt, dass die Variable bei erneutem Laden bzw. Aktualisierennicht überschrieben wird.

Cookies müssen mit denselben Parametern gelöscht werden, mit denen siegesetzt wurden.

Beispiel: Der folgende Code

<?php//~ Cookie mit Gültigkeit von einem Jahr erstellensetcookie("c_test", "Hallo", time() + 3600 * 24 * 365;?>

Cookies mit Flash und PHP 143

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Tutorial

Page 144: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

müsste so gelöscht werden:

<?php//~ Gültigkeitsdatum auf 1h in der Vergangenheit setzen.setcookie("c_test", "", time() – 3600;?>

10. Dann benötigen wir den Teil des Scripts, in dem das Cookie gelöscht wird. Fügen Sienach} else if ($action == "del") {folgenden Code ein:

//~ Cookie löschensetcookie("c_Pos", "",time() - 3600);

//~ Cookie erfolgreich gelöscht$message = "Cookie gelöscht!";

}

Mit diesem Code wird das Cookie gelöscht. Die Funktion setcookie() wird mit leeremvalue-Parameter aufgerufen. Der Wert, der dem expire-Parameter übergeben wird, be-zeichnet ein Datum bzw. eine Sekundenzahl seit dem 1. Januar 1970 in der Vergangen-heit.

11. Im gesamten Script wurden an verschiedenen Stellen Statusmeldungen definiert ($message). Diese Statusmeldung wird nun ausgegeben. Und zwar mit folgendemCode:

//~ Statusmeldung ausgeben

flash::echoVar("message", $message, true);

Dieser Code gibt eine Statusmeldung in der Form

&message=kodierte+Statusmeldung&

aus, die von Flash in einem Textfeld angezeigt wird. Diese Statusmeldung ist für dieFunktionstüchtigkeit nicht relevant, erleichtert aber das Verständnis dieses Beispiels.

6.2 Wichtiges bei Verwendung von CookiesSehr viele Personen, besonders diejenigen, die oft und viel im Internet zu tun haben, könn-ten die Annahme von Cookies verweigern. Wenn Sie Cookies verwenden, so sollten Siediese nur an Stellen einsetzen, wo sie zusätzlichen Nutzen bringen. Ein Onlineshop, derverlangt, dass der Besucher Cookies annimmt, schreckt ab. Programmieren Sie deshalbIhre Seiten immer so, dass die volle Funktionalität auch ohne Cookies gegeben ist.

144 Kapitel 6

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Tutorial

Page 145: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Mehr Informationen zu Cookies finden Sie unter:www.netscape.com/newsref/std/cookie_spec.html

Microsofts Internet-Explorer 4 mit Service-Pack 1 geht nicht korrekt mitCookies um, die den Pfad-Parameter beinhalten. Netscape Communicator 4.05 und Microsoft Internet Explorer 3.x scheinenmit Cookies Probleme zu haben, wenn die Argumente für Pfad und Zeitnicht angegeben sind. (Quelle: : www.php.net)

6.3 SicherheitsaspekteSpeichern Sie niemals jegliche Art von sensiblen Daten (Passwörter, persönliche Daten desBenutzers etc.) in Cookies.

Cookies liegen auf dem Rechner des Client in Form von Dateien vor und können mit einemeinfachen Texteditor geöffnet und gelesen werden. Sollten Sie dennoch Passwörter etc. inCookies speichern, so sollten Sie diese verschlüsseln – Passwörter z.B. mit der md5()-Funktion von PHP.

Sollten Sie es nicht vermeiden können, sensible Daten in Cookies zu speichern, so verwen-den Sie beim Übermitteln der Cookie-Daten unbedingt eine sichere Verbindung. Nur sokann sichergestellt werden, dass die Daten auf direktem Weg zum Server gelangen undnicht von Dritten manipuliert oder abgefangen werden können.

Cookies mit Flash und PHP 145

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 146: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer
Page 147: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

KAPITEL 7XML MIT FLASH UND PHP

Page 148: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

XML – (engl. eXtensible Markup Language = »erweiterbare Auszeichnungssprache«)XML wird verwendet, um komplexe Datenstrukturen auf Textbasis darzustellen. Dervom W3C festgelegte Standard wird von Flash seit Version 5 verstanden.

Mit XML wird in Flash ein weiteres Verfahren geboten, Daten mit anderen Applikationenauszutauschen. Um komplexe Datenstrukturen darzustellen, ist XML besser geeignet alsdie herkömmliche Weise über Variablen (&variable1=wert&variable2=wert), jedoch ist inFlash 5 der XML-Parser noch sehr langsam und unbeholfen. Bei Datenmengen um ca. 60Kbyte geht er teilweise vollständig in die Knie. Zudem kommt noch hinzu, dass das Ladenvon XML-Daten wesentlich länger dauert als das Laden von herkömmlichen Variablen. DieZeitdifferenz kann bei großen Datenmengen eventuell schon bei einigen Sekunden liegen,was XML für zeitkritische Dinge unbrauchbar macht.

Dennoch möchte ich an dieser Stelle auf den Umgang mit XML eingehen, da in PHP seitVersion 4.0 standardmäßig Funktionen für den Umgang mit XML vorhanden sind (Beta inden PHP-Versionen von 3.0.8 bis 3.0.18).

Auf diese Funktionen werde ich im Rahmen dieses Buches nicht eingehen, jedoch auf denAustausch von Daten in XML zwischen Flash und PHP.

7.1 Ein- und Ausgabe von DatenIn diesem Unterkapitel werde ich auf die Ein- und Ausgabe von Daten mit Hilfe der XML-Funktionen von Flash und der Funktionen von PHP eingehen.

7.1.1 Funktionen

Die folgenden Funktionen gibt es in Flash (ab Version 5) standardmäßig. Mit Ihnen lassensich XML-Daten erstellen, bearbeiten, laden und senden.

XML.load()

Beschreibung: Mit dieser Funktion können Daten von einem angegebenen URL in einXML-Objekt geladen werden. Die Funktion läuft asynchron ab. Bereits imXML-Objekt vorhandene Daten werden verworfen.

Definition: XMLObject.load (string url)

Parameter: string url

Ein relativer oder absoluter URL. Der URL kann eine XML-Datei oder ein(PHP-)Script sein, das XML-Daten ausgibt. Der angegebene URL muss sich

148 Kapitel 7

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 149: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

unterhalb der Domain befinden, auf der sich das SWF befindet; Zugriff aufexterne URLs ist nicht möglich (siehe auch Kapitel 5.1).

Anwendung: //~ ActionScript

myXML = new XML();

myXML.load("meinScript.php");

/*~ Das XML-Objekt myXML enthält nach dem Ladevorgang die Daten,die das PHP-Script ausgegeben hat.*/

Diese Funktion ist asynchron, d.h. die Daten stehen eventuellnicht sofort nach dem Aufruf von load() zur Verfügung. Umzu überprüfen, ob der Ladevorgang bereits beendet wurde,können die Funktion onLoad() und die Eigenschaft loadedverwendet werden (siehe unten).

XML.send()

Beschreibung: Mit dieser Funktion kann ein XML-Objekt aus Flash per POST an einen URLgesendet werden. Das XML-Objekt wird automatisch kodiert.

Definition: XMLObject.send (string url [, string target])

Parameter: string urlEin relativer oder absoluter URL.

string targetDieses Argument ist optional.Dieses Argument bezeichnet das Browserfenster, in dem der URL geöffnetwird. Dies kann sowohl ein bereits bestehendes als auch ein neues Brow-serfenster sein.

Anwendung: //~ ActionScript

myXML = new XML();

XMLElement = myXML.createElement("Child");XMLElement.attributes.age = "10";

myXML.appendChild(XMLElement);myXML.docTypeDecl = "myXML=";

myXML.send("meinScript.php", "_blank");

Dieser Code öffnet das Script meinScript.php in einem neuen Browserfensterund übergibt ein XML-Objekt bzw. XML-Daten in der folgenden Form:

<Child age="10" />

XML mit Flash und PHP 149

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 150: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Da das XML-Objekt Anführungszeichen enthält, müssen vorder Bearbeitung der XML-Daten in PHP zuerst die hinzuge-fügten \ (Backslashes) entfernt werden. Dies geschieht mit derFunktion stripslashes().

Beispiel: Im oberen Script ist der Variablenname des gesendeten XML-Objekts$myXML. Um die Backslashes zu entfernen, muss der Aufruf also so lauten:

<?php$myXML = stripslashes($myXML);?>

XML.sendAndLoad()

Beschreibung: Diese Funktion übergibt die Daten eines XML-Objekts mittels POST an einPHP-Script und empfängt dessen Ausgabe in einem anderen XML-Objekt.Das XML-Objekt wird automatisch kodiert.

Definition: XMLObject.sendAndLoad (string url, object targetXMLObject)

Parameter: string urlEin relativer oder absoluter URL zu einem (PHP-)Script, das XML-Datenzurückgibt. Der angegebene URL muss sich unterhalb der Domain befin-den, auf der sich das SWF befindet; Zugriff auf externe URLs ist nicht mög-lich (siehe auch Kapitel 5.1).

object targetXMLObjectEin in Flash vorher definiertes XML-Objekt. Wenn dieses Objekt bereitsDaten enthält, werden diese durch die geladenen Daten überschrieben.

Anwendung: //~ ActionScript

myXML = new XML();targetXML = new XML();

XMLElement = myXML.createElement("Child");XMLElement.attributes.age = "10";

myXML.appendChild(XMLElement);myXML.docTypeDecl = "myXML=";

myXML.sendAndLoad("meinScript.php", targetXML);

Dieser Code sendet das XML-Objekt myXML an das Script meinScript.php undempfängt dessen Ausgabe im XML-Objekt targetXML.

Beachten Sie, dass zusätzliche Backslashes hinzugefügt wur-den, um vorhandene Anführungszeichen zu escapen. Wie Siediese entfernen, erfahren Sie bei der Anwendung des Befehlssend() in diesem Abschnitt (siehe oben).

150 Kapitel 7

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

·

HINWEIS

Page 151: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

7.1.2 Events

XML.onLoad()

Beschreibung: Diese Funktion wird automatisch aufgerufen, sobald ein XML-Dokumentbzw. XML-Daten empfangen wurden. Diese Funktion kann mit einer eige-nen Funktion überschrieben werden (siehe unten).

Definition: XMLobject.onLoad (bool success)

Parameter: bool successDieser Parameter gibt an, ob der Ladevorgang erfolgreich abgeschlossenwurde oder nicht. Wenn ja, dann ist dieser Wert true (wahr), wenn einFehler auftrat, dann ist er false (falsch).

Anwendung: //~ ActionScript

myXML = new XML();myXML.load("meinScript.php");myXML.onLoad = fertig;

function fertig (success){

if (success) {

trace("Korrekt geladen.");

} else {

trace("Es trat ein Fehler auf!");

} //~ end if

} //~ end func

Der obere Code lädt die Ausgabe des Scripts meinScript.php. Wenn derLadevorgang erfolgreich abgeschlossen wurde, wird

Korrekt geladen.

auf dem Bildschirm ausgegeben, andernfalls:

Es trat ein Fehler auf!

XML mit Flash und PHP 151

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 152: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

7.1.3 Eigenschaften

XML.loaded

Beschreibung: Diese Eigenschaft zeigt an, ob ein Ladevorgang erfolgreich beendet wurdeoder nicht. Bei erfolgtem Laden enthält sie den Wert true (wahr), währenddes Ladevorgangs oder bei einem Fehler den Wert false (falsch). DieseEigenschaft kann nicht manuell verändert werden.

Definition: XMLObject.loaded = true|falsetrue|false bedeutet hier, dass die Eigenschaft einen dieser beiden Werte an-nehmen kann, also kann sie entweder true (wahr) sein oder false (falsch).

Parameter: Keine. Eigenschaft.

Anwendung: //~ ActionScript

myXML = new XML();

if (myXML.loaded == undefined) {

trace ("undefined");

}

myXML.load("meinScript.php");

trace(myXML.loaded); //~ gibt false zurück

myXML.onLoad = function (){

trace(myXML.loaded); //~ gibt true zurück

} //~ end func

Hier wird die loaded-Eigenschaft dreimal abgefragt, einmal vor demLadevorgang, einmal direkt nach dem Aufruf von load() und einmal, nach-dem die Daten geladen wurden. Es wird Folgendes auf dem Bildschirm aus-gegeben:

undefinedfalsetrue

Daraus ergibt sich Folgendes:

· Wenn noch keine Daten in das XML-Objekt geladen wurden, ist dieEigenschaft undefiniert.

152 Kapitel 7

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 153: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

· Wenn die Daten gerade geladen werden, ist die Eigenschaft definiert undfalse (falsch).

· Wenn die Daten komplett geladen wurden, ist die Eigenschaft definiertund true (wahr).

XML.docTypeDecl

Beschreibung: Mit dieser Funktion kann man die DOCTYPE-Deklaration (DTD) des XML-Objekts definieren bzw. verändern. Normalerweise wird die DTD dazu ver-wendet, die Gültigkeit und Struktur der Daten zu beschreiben. Hier jedochwird sie benötigt, damit PHP bzw. ein PHP-Script ein übergebenes XML-Objekt überhaupt als Variable erkennt, deshalb auch das Gleichheitszeichen.

Definition: XMLObject.docTypeDecl = string DTD

Parameter: Keine. Eigenschaft.

Anwendung: //~ ActionScript

myXML = new XML();

myXML.docTypeDecl = "myXML=";

XMLElement = myXML.createElement("Child");XMLElement.attributes.age = "10";myXML.appendChild(XMLElement);

myXML.send("meinScript.php", "_blank");

In diesem Fall heißt die Variable innerhalb des PHP-Scripts meinScript.php,die die Daten des XML-Objekts myXML enthält, $myXML.

Beachten Sie, dass zusätzliche Backslashes hinzugefügt wur-den, um vorhandene Anführungszeichen zu escapen. Wie Siediese entfernen, erfahren Sie bei der Anwendung des Befehlssend() in diesem Abschnitt (siehe oben).

XML mit Flash und PHP 153

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 154: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

7.2 Beispiel: Daten von PHP nach Flash übergebenDieses Beispiel befindet sich im Ordner Beispiele\XML\phpXML\ auf der CD-ROM.

Aufbau des SWF:

Abbildung 7.1: Dieses SWF lädt XML-Daten von einem PHP-Script, speichert diese in einem XML-Objekt und gibtsie in anderem Format in einem Textfeld wieder aus.

Der XMLNode-Prototyp print():

XMLNode.prototype.print = function (level){

var string;

for (var i = 0; i < this.childNodes.length; i++) {

//~ Tabs je nach Level hinzufügen

for (var o = 0; o < level; o++) {

string += "\t";

}

//~ Knotenname und Attribute hinzufügen

string += this.childNodes[i].aText();

if (this.childNodes[i].hasChildNodes()) {

154 Kapitel 7

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 155: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ Hat untergeordnete Knoten

//~ level um eins erhöhen

level++;

//~ Funktion mit untergeordnetem Knoten starten

string += this.childNodes[i].print(level);

} //~ end if

} //~ end for

//~ String zurückgeben

return string;

} //~ end function print

Der XMLNode-Prototyp aText():

XMLNode.prototype.aText = function (){

var string;

//~ Name des Knotens hinzufügen

string += this.nodeName;

//~ Attribute in Array speichern

array = this.attributes;

//~ Array mit Attributen durchlaufen

for (var key in array) {

//~ Attribute hinzufügen

string += " | "+key+" = "+array[key];

} //~ end for

//~Zeilenumbruch hinzufügen

string += "\n";

//~ String zurückgeben

return string;

} //~ end function aText

XML mit Flash und PHP 155

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 156: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Aufbau des PHP-Scripts:

<?php

//~ Array definieren

$fruitArray[0]["name"] = "Zitrone";$fruitArray[0]["farbe"] = "gelb";

$fruitArray[1]["name"] = "Erdbeere";$fruitArray[1]["farbe"] = "rot";

$fruitArray[2]["name"] = "Heidelbeere";$fruitArray[2]["farbe"] = "blau";

$fruitArray[3]["name"] = "Granny-Smith";$fruitArray[3]["farbe"] = "grün";

$fruitArray[4]["name"] = "Orange";$fruitArray[4]["farbe"] = "orange";

//~ Header für XML-Daten sendenheader("Content-Type: text/xml");

//~ korrektes encoding ausgebenecho "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>";

//~ Ausgabe der XML-Daten

echo "<Fruechte Size=\"".sizeof($fruitArray)."\">";

while (list($key,$valueArray) = each($fruitArray)) {

$n = $valueArray["name"];

$f = $valueArray["farbe"];

echo "<Frucht Name=\"".$n."\" Farbe=\"".$f."\" />";

} //~ end while

echo "</Fruechte>";

?>

Der Ablauf ist folgender:

1. Ein Array in PHP wird als XML mit bestimmter Struktur ausgegeben.

2. Das SWF lädt diese XML-Struktur, extrahiert ihre Elemente und gibt diese mit Hilfe ei-ner Funktion in anderer Form in einem Textfeld aus.

156 Kapitel 7

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 157: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Der Aufbau der Applikation:

1. Erstellen Sie einen neuen Flash-Film.

2. Erstellen Sie ein dynamisches Textfeld auf Ebene 0 mit dem Namen text. Dieses Text-feld wird benötigt, um später die geladenen Daten auszugeben.

3. Fügen Sie nun im ersten Bild die zwei oben stehenden Prototypen (XMLNode.print()und XMLNode.aText()) ein. Diese werden benötigt, um die XML-Struktur umzuformenund im Textfeld auszugeben. Ich werde nicht näher auf die Prototypen eingehen, da siemit Hilfe des Flash-Manuals und der beigefügten Kommentare ohne weiteres verstan-den werden können.

4. Anschließend müssen Sie zusätzlich zu den Prototypen im ersten Bild noch folgendenCode einfügen:

//~ Neues XML-Objekt erstellen

myXML = new XML();

//~ XML-Dokument laden

myXML.load("phpXML.php");

//~ Überprüfen, ob XML-Dokument geladen wurde

myXML.onLoad = function () {

//~ XML-Dokument wurde vollständig geladen

if(!myXML.loaded) {

text = "Es trat ein Fehler auf!";

} else {

//~ XML-Dokument umstrukturiert in Textfeld ausgeben

text = myXML.print();

}

}

Zuerst wird ein neues XML-Objekt erstellt, das nachher unsere Daten aus dem PHP-Script bzw. aus dessen Ausgabe enthalten soll.

Dann wird mit der XML-Funktion load() die Ausgabe des PHP-Scripts (hier: phpXML.php) in das XML-Objekt geladen.

Sobald die XML-Daten vollständig geladen wurden, wird der Code, der in den Klam-mern der XML-Funktion onload() steht, ausgeführt.

Dort wird überprüft, ob beim Laden ein Fehler aufgetreten ist. Wenn ja, wird eine Mel-dung in dem erstellten Textfeld ausgegeben. Wenn nein, dann wird das Parsen desXML-Objekts gestartet und die Ausgabe im Textfeld angezeigt.

XML mit Flash und PHP 157

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 158: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

5. Wenden wir uns nun dem PHP-Script zu, das die XML-Daten ausgibt.

6. Zuerst muss ein Array definiert werden. Etwa so:

<?php

//~ Array definieren

$fruitArray[0]["name"] = "Zitrone";$fruitArray[0]["farbe"] = "gelb";

$fruitArray[1]["name"] = "Erdbeere";$fruitArray[1]["farbe"] = "rot";

$fruitArray[2]["name"] = "Heidelbeere";$fruitArray[2]["farbe"] = "blau";

$fruitArray[3]["name"] = "Granny-Smith";$fruitArray[3]["farbe"] = "grün";

$fruitArray[4]["name"] = "Orange";$fruitArray[4]["farbe"] = "orange";

Sie können selbstverständlich auch direkt XML-Daten ausgeben oder diese aus einerDatenbank laden. Hier wird der Einfachheit halber jedoch gezeigt, wie man eine XML-Struktur aus einem Array bildet und diese ausgibt.

7. Zur Ausgabe benötigen wir folgenden Code:

//~ Header für XML-Daten sendenheader("Content-Type: text/xml");

//~ korrektes encoding ausgebenecho "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>";

//~ Ausgabe der XML-Daten

echo "<Fruechte Size=\"".sizeof($fruitArray)."\">";

while (list($key,$valueArray) = each($fruitArray)) {

$n = $valueArray["name"];$f = $valueArray["farbe"];

echo "<Frucht Name=\"".$n."\" Farbe=\"".$f."\" />";

} //~ end while

echo "</Fruechte>";

?>

Zuerst wird mit der Header-Funktion dem Browser mitgeteilt, dass es sich bei den aus-gegebenen Daten um XML-Daten handelt. Geben wir die Daten ohne diese Informationaus, würden sie als HTML dargestellt. Mit dieser Information zeigt ein XML-kompa-tibler Browser (z.B. Internet Explorer) das XML-Dokument auch als solches an.

158 Kapitel 7

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 159: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Nachdem der Header gesendet wurde, wird das Array $fruitArray durchlaufen unddie Daten werden korrekt formatiert direkt an den Bildschirm ausgegeben. Wichtig ist,dass alle Daten URL-kodiert werden. XML erlaubt nur alphanumerische Zeichen und(.-_).

Die Form der Ausgabe ist folgende:

<?xml version="1.0" encoding="iso-8859-1" ?><Parent numofChildren="2">

<Child age="1" /><Child age="2" />

</Parent>

In unserem konkreten Fall ist die Ausgabe dann diese:

<?xml version="1.0" encoding="iso-8859-1" ?><Fruechte Size="5">

<Frucht Name="Zitrone" Farbe="gelb" /><Frucht Name="Erdbeere" Farbe="rot" /><Frucht Name="Heidelbeere" Farbe="blau" /><Frucht Name="Granny-Smith" Farbe="gr%FCn" /><Frucht Name="Orange" Farbe="orange" />

</Fruechte>

Diese Ausgabe wird von Flash geladen und dann in ein anderes Format gebracht.Selbstverständlich können Sie noch mehr Ebenen hinzufügen als nur eine. Die Ausgabeim Textfeld nach dem Parsen sieht in diesem Fall so aus:

Fruechte | Size = 5Frucht | Name = Zitrone | Farbe = gelbFrucht | Name = Erdbeere | Farbe = rotFrucht | Name = Heidelbeere | Farbe = blauFrucht | Name = Granny-Smith | Farbe = grünFrucht | Name = Orange | Farbe = orange

XML mit Flash und PHP 159

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 160: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

7.3 Beispiel: Daten von Flash nach PHP übergebenDieses Beispiel befindet sich im Ordner Beispiele\XML\flashXML\ auf der CD-ROM.

Aufbau des SWF:

Abbildung 7.2: In diesem SWF wird ein XML-Objekt erstellt, das auf Knopfdruck per POST als XML-Dokument anein PHP-Script übergeben wird.

Aufbau des PHP-Scripts:

<?php

//~ Header für XML-Dokument sendenheader("Content-Type: text/xml");

//~ Slashes, die zum Escapen verwendet wurden, entfernen.$myXML = stripslashes($myXML);

160 Kapitel 7

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 161: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ XML-Dokument ausgebenecho $myXML;

?>

Der Ablauf ist folgender:

1. In Flash bzw. dem SWF wird ein XML-Objekt erstellt.

2. Dieses XML-Objekt wird als XML-Dokument mittels POST an das PHP-Script überge-ben.

3. Das PHP-Script gibt das XML-Dokument im Browser aus.

Der Aufbau der Applikation:

1. Erstellen Sie einen neuen Flash-Film.

2. Erstellen Sie ein neues XML-Objekt mit folgendem Code:

//~ ActionScript//~ Neues XML-Objekt erstellenmyXML = new XML();//~ DOCTYPE-Deklaration definierenmyXML.docTypeDecl = "myXML=";/*~ Nun können weitere Knoten erstellt

und an das XML-Objekt angeheftet werden*/

Erstellen Sie danach beliebig viele Knoten, wie z.B. in unserem Beispiel (siehe oben).

Wie die Struktur des XML-Dokuments aussieht, ist im Moment nicht von Bedeutung,wichtig für uns ist die DOCTYPE-Deklaration.

Die DOCTYPE-Deklaration legt fest, mit welchem Variablennamen das XML-Dokumentnachher in PHP angesprochen werden kann. Wenn Sie diese Definition nicht machen,kann das XML-Dokument innerhalb von PHP nicht angesprochen werden.

Wenn die Deklaration folgendermaßen aussieht:

//~ ActionScript

XMLObjekt.docTypeDecl = "XML=";

kann man nach dem Senden des XML-Objekts an das PHP-Script mit $XMLauf das Objekt zugreifen.

Sie dürfen nur Zeichen verwenden, die ein Variablenname in PHP enthal-ten darf. Ein gültiger Variablenname in PHP beginnt mit einem Dollar-zeichen ($), gefolgt von einem Buchstaben oder Unterstrich. Hinter diesemkönnen beliebig viele Buchstaben, Zahlen oder Unterstriche in beliebigerKombination folgen.

XML mit Flash und PHP 161

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

BEISPIEL

·

HINWEIS

Page 162: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

3. Erstellen Sie nun auf Ebene 0 eine Schaltfläche und weisen Sie ihr folgenden Code zu:

//~ ActionScript

on (release) {

myXML.send("flashXML.php", "_self");

}

Dieser Code sendet das XML-Objekt bei Klick auf die Schaltfläche per POST an das PHP-Script flashXML.php und öffnet es im selben Browserfenster.

4. Nun wenden wir uns dem PHP-Script zu. Das PHP-Script soll das XML-Objekt bzw. dieXML-Daten auf dem Bildschirm ausgeben. Dazu benötigen wir folgenden Code:

<?php

//~ Header für XML-Dokument sendenheader("Content-Type: text/xml");

//~ Slashes, die zum Escapen verwendet wurden, entfernen.$myXML = stripslashes($myXML);

//~ XML-Dokument ausgebenecho $myXML;

?>

Zuerst muss eine entsprechende Kopfzeile gesendet werden, d.h. dem Browser mussmitgeteilt werden, dass XML-Daten ausgegeben werden. Dies macht die header()-Funktion.

Da im XML-Objekt Anführungszeichen vorhanden sind, wurden diese mit einem \(Slash) deaktiviert (escaped). Dies muss man rückgängig machen, indem man dieSlashes mit der Funktion stripslashes() aus dem String entfernt.

Danach werden die XML-Daten an den Browser ausgegeben.

In unserem Fall (mit dem XML-Objekt aus dem Beispiel) würde das so aussehen:

<Software><Hersteller Name="Macromedia">

<Produkt Name="Flash" Version="5.0" /><Produkt Name="Dreamweaver" Version="4.0" />

</Hersteller></Software>

Es kann sein, dass in Ihrem Browser nichts angezeigt wird. Das liegt dann daran, dassder Browser kein XML versteht. Wenn Sie aber in den Quelltext schauen, können Sie zu-mindest die Struktur erkennen, die Sie zuvor in Flash definiert haben.

An dieser Stelle könnte man (anstatt die XML-Daten nur auszugeben)auch mit den XML-Funktionen von PHP auf diese Daten zugreifen.

162 Kapitel 7

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 163: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

KAPITEL 8SERVERSEITIGE ERZEUGUNG

VON FLASH-INHALTEN

Page 164: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

In diesem Kapitel wird die serverseitige Erzeugung von Flash-Inhalten bzw. SWFs ange-sprochen. Es werden verschiedene Möglichkeiten gezeigt, von der reinen Neuerstellungdes SWF bis hin zur Manipulation von vorgefertigten Templates.

8.1 ... mit Ming und PHPMing ist eine Bibliothek, mit der man SWF-Files erstellen kann. Eigentlich ist Ming eine C-Bibliothek, allerdings wurden einige Wrapper für populäre Sprachen geschrieben, soauch für PHP.

Die aktuelle Version des Moduls für PHP ist Version 0.2a. Mit dieser Version wurden dieBeispiele erstellt und getestet.

Die Ming-Bibliothek (für Windows und Linux) und andere Tools befinden sich im OrdnerSoftware und Module\Ming\ auf der CD-ROM.

Mehr Informationen finden Sie unter: www.opaque.net/ming/

8.1.1 Einbindung des Ming-Moduls

Damit man auf die Ming-Funktionen zugreifen kann, muss vorher die Ming-Bibliothek ge-laden werden. Es ist möglich, dass das Ming-Modul bereits auf manchen Servern globalverfügbar ist und ohne Einbinden verwendet werden kann. Dies erfahren Sie bei Ihrem ISPbzw. dessen Administrator. Die Mehrzahl der ISPs wird jedoch das Ming-Modul nicht aufihren Servern installiert haben, deshalb muss es von Hand dynamisch eingebunden wer-den.

Dies geht mit folgendem Code:

<?php

//~ Beginn der Datei

dl("./php_ming.so");

//~ hier kommt weiterer Code

?>

Die dl()-Funktion lädt das Ming-Modul dynamisch. Eventuell kann auch das dynamischeLaden von Modulen (in diesem Fall das Ming-Modul) fehlschlagen, wenn in der php.ini derSchalter enable_dl auf off gestellt ist. Ob dies der Fall ist, können Sie entweder bei IhremISP bzw. dessen Administrator erfahren oder einfach durch Ausprobieren feststellen. DieBibliothek wird in diesem Fall eine Fehlermeldung generieren und die Ausführung desScripts abbrechen.

164 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 165: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Wichtig ist, dass das Einbinden vor dem Zugriff auf die Funktionen des Moduls geschieht.Wird das Modul danach erst eingebunden, sind zum Zeitpunkt der Ausführung die Funk-tionen noch nicht verfügbar.

Bibliotheken haben für Linux normalerweise die Endung .so auf NT-Servernbzw. Windows-Rechnern die Endung .dll. Beide Module finden Sie auf derCD-ROM.

Die Funktion dl()

int dl (string library)

Das Argument für die Funktion ist der Dateiname des Moduls.

Zurückgegeben wird von der Funktion entweder true (wahr), wenn dieBibliothek erfolgreich geladen wurde, oder false (falsch) bei einem Fehl-schlag.

Sollte PHP im SAFE MODE laufen, so ist es nicht möglich, dasMing-Modul dynamisch einzubinden. In diesem Falle mussder Administrator des betreffenden Servers das Modul sta-tisch einkompilieren.

Der Upload der Bibliothek muss im Binärmodus (Binary Mode) erfolgen.Der Binärmodus stellt sicher, dass die Datei nicht angetastet wird und keinedass systemspezifischen Konvertierungen (Zeilenumbrüche etc.) vorgenom-men werden. Sollten Sie die Bibliothek im ASCII-Modus hochladen, so wirdsie unbrauchbar.

8.1.2 Wichtige Informationen zu Ming

An dieser Stelle möchte ich noch einige Informationen liefern, die Ihnen beim Umgang mitMing eventuell von Nutzen sein können.

Ming mit Flash 4

Ming läuft ab Version 0.2a standardmäßig mit Flash 5 ActionScript. Wenn Sie Flash 4ActionScript erzeugen wollen, so müssen Sie folgende Funktion vor der Ausgabe des SWFaufrufen:

<?php

//~ Ming-Modul einbinden

Ming_useSWFVersion(4);

Serverseitige Erzeugung von Flash-Inhalten 165

Tutorial

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

·

HINWEIS

Page 166: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ weiterer Code hier

?>

Der Aufruf dieser Funktion teilt Ming mit, den »alten« Flash 4-Compiler zu verwenden.

Ming mit PHP Version 4.1

Ming läuft momentan noch nicht mit PHP Version > 4.1.0. Dave Hayden ist momentan da-bei, das Modul an PHP 4.1.0 anzupassen. Besuchen Sie www.opaque.net/ming/ für mehrInformationen.

Ming Online-Hilfe

Da das Ming-Modul einige Klassen umfasst, kann im Rahmen dieses Buches unmöglichauf jede einzelne inklusive deren Funktionen eingegangen werden. Die Online-Hilfe imchm-Format befindet sich auf der beiliegenden CD-ROM. In dieser werden alle Klassenund Funktionen ausführlich erläutert (in englischer Sprache).

Die Ming Online-Hilfe befindet sich unter Software und Module\Ming\ming.chm auf derCD-ROM.

Ming-Dokumentation auf php.net

Unter www.php.net/manual/en/ref.ming.php finden Sie ebenfalls Informationen zumMing-Modul und dessen Funktionen.

8.1.3 Beispiel: Leeres SWF erzeugen

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

Inhalt des PHP-Scripts:

<?php

//~ Ming-Modul ladendl("./libraries/php_ming.so");

//~ Neues Movie-Objekt erstellen$myMovie = new SWFMovie();

//~ Framerate definieren$myMovie->setRate(20);

166 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 167: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ Bühnengröße definieren$myMovie->setDimension(550, 400);

//~ Hintergrundfarbe definieren$myMovie->setBackground(0, 78, 152);

//~ Header für SWF schickenheader("Content-type: application/x-shockwave-flash");

//~ SWF an den Browser ausgeben$myMovie->output();

?>

Aufbau des Scripts:

1. Erstellen Sie eine neue PHP-Datei.

2. Zuerst muss das Ming-Modul eingebunden werden. Dies geschieht mit folgendemCode:

<?php

//~ Ming-Modul ladendl("./libraries/php_ming.so");

3. Nachdem das Modul geladen wurde, kann auf dessen Funktionen zugegriffen werden.Das Ming-Modul enthält verschiedene Klassen, die dann verfügbar werden. Da wir einSWF (einen Flash-Film) erstellen wollen, muss zuerst ein neues Objekt der KlasseSWFMovie() erstellt werden, das unser SWF repräsentiert. Dies geht folgendermaßen:

//~ Neues Movie-Objekt erstellen$myMovie = new SWFMovie();

4. Nachdem das Objekt erstellt wurde, können Funktionen auf dieses Objekt angewendetwerden, mit denen sich Eigenschaften des SWF einstellen lassen:

//~ Framerate definieren$myMovie->setRate(20);

//~ Bühnengröße definieren$myMovie->setDimension(550, 400);

//~ Hintergrundfarbe definieren$myMovie->setBackground(0, 78, 152);

Zuerst wird die Framerate (Bilder pro Sekunde) eingestellt, die das SWF nachher habensoll, dann die Bühnengröße in Pixel (hier: 550x400 Pixel) und zuletzt die Hintergrund-farbe des SWF als RGB (hier: ein dunkles Blau).

5. Nachdem alle Eigenschaften eingestellt wurden, kann das SWF erstellt bzw. ausgegebenwerden.

Serverseitige Erzeugung von Flash-Inhalten 167

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 168: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ Header für SWF schickenheader("Content-type: application/x-shockwave-flash");

//~ SWF an den Browser ausgeben$myMovie->output();

?>

Damit der Browser erkennt, dass jetzt Daten vom Typ Shockwave-Flash kommen undkeine Text bzw. HTML-Daten, muss ein entsprechender HTTP-Header gesendet wer-den. Achten Sie darauf, dass vor der Ausgabe des Headers nichts anderes ausgegebenwird, da sonst das Senden fehlschlägt.

Nachdem der Header gesendet wurde, können mit der Funktion output() die Datendes fertigen SWF ausgegeben werden.

8.1.4 Beispiel: Konvertierung eines JPEGs in ein SWF

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

HTML-Datei:

<html><head>

<title>jpg2swf</title></head><body bgcolor="#FFFFFF">

Bitte wählen Sie eine JPEG-Datei!<form action="jpg2swf.php" enctype="multipart/form-data" method="post"><input name="image" type="file" accept="image/jpeg"><br><input type="submit" value="Upload"></form>

</body></html>

PHP-Script (jpg2swf.php):

<?php

if ($image == "none") {

echo "Bitte wählen Sie eine JPEG-Datei!";

exit();

} else if ($image_type != "image/jpg" AND

$image_type != "image/jpeg" AND

168 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 169: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

$image_type != "image/pjpeg") {

echo "Dies ist keine JPEG-Datei!";

exit();

}

//~ Ming-Modul laden

dl("./libraries/php_ming.so");

/*~ Bild öffnen."b" bedeutet, dass die Datei im Binärmodus geöffnet wird, dies ist nur unter Windows wichtig, unter Unix/Linux wird dieser Parameter ignoriert

*/

$filePointer = fopen($image, "rb");

//~ Neues SWF-Objekt instanziieren$myMovie = new SWFMovie();

//~ Neues Bitmap-Objekt instanziieren$myBitmap = new SWFBitmap($filePointer);

//~ Höhe des Bildes auslesen$bHeight = $myBitmap->getHeight();

//~ Breite des Bildes auslesen$bWidth = $myBitmap->getWidth();

//~ die Größe des SWF an die Größe des Bildes anpassen$myMovie->setDimension($bWidth, $bHeight);

//~ Hintergrundfarbe definieren (weiß);$myMovie->setBackground(255, 255, 255);

//~ Bitmap zum SWF hinzufügen$myMovie->add($myBitmap);

//~ Dateiname generieren$saveName = "swf/".$image_name.".swf";

//~ SWF speichern$myMovie->save($saveName);

//~ Auf neu erstelltes SWF weiterleitenheader("Location:output.php?swfPath=".$saveName."&width=".$bWidth."&height=".$bHeight);

?>

Serverseitige Erzeugung von Flash-Inhalten 169

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 170: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Das PHP-Script (output.php):

<!-- $swfPath, $width and $height are submitted values -->

<HEAD><TITLE>jpg2swf</TITLE></HEAD><BODY bgcolor="#FFFFFF"><CENTER>

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" WIDTH=<?=$width?> HEIGHT=<?=$height?>>

<PARAM NAME=movie VALUE="<?=$swfPath?>"><PARAM NAME=quality VALUE=high><PARAM NAME=bgcolor VALUE=#FFFFFF>

<EMBED src="<?=$swfPath?>" quality=high bgcolor=#FFFFFF WIDTH=<?=$width?>HEIGHT=<?=$height?> TYPE="application/x-shockwave-flash"PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>

</OBJECT></CENTER></BODY></HTML>

Der Ablauf ist folgender:

1. Zuerst wird vom Besucher eine Datei ausgewählt, diese wird an den Server bzw. an dasPHP-Script geschickt.

2. Das PHP-Script überprüft, ob eine Datei hochgeladen wurde und ob diese eine JPEG-Datei ist.

3. Wenn ja, lädt das PHP-Script das Ming-Modul und formt das JPEG in ein SWF um.

4. Dieses SWF wird dann auf dem Server gespeichert.

5. Nach dem Speichern wird auf ein PHP-Script weitergeleitet, das das erstellte SWF ein-bindet und ausgibt.

Der Aufbau der Applikation:

1. Zuerst wird die HTML-Datei benötigt, die das Formular zum Hochladen des JPEGs ent-hält. Das Dateifeld muss so aussehen:

<pre><form action="jpg2swf.php" enctype="multipart/form-data" method="post">

170 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 171: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

<input name="image" type="file"><br><input type="submit" value="Upload"></form></pre>

Wichtig dabei ist, dass der Formulartyp multipart/form-data ist. Lassen Sie denFormulartyp weg, wird der Standard (aplication/x-www-form-urlencoded) verwendetund die Datei nicht übertragen. Weiterhin muss die Übertragungsmethode POST sein.

Der Name des Dateifeldes ist nachher die Variable in PHP, die den Dateipfad der hoch-geladenen Datei auf dem Server enthält – in diesem Fall $image. Beim Hochladen wer-den noch weitere Informationen übergeben, z.B. der Typ der hochgeladenen Datei:$image_type. Mit diesen Informationen werden wir überprüfen, ob die hochgeladeneDatei wirklich ein JPEG ist.

Das Ziel des Formulars muss das PHP-Script sein, in dem wir später das JPEG konver-tieren wollen (hier: jpg2swf.php).

Auf einem Server mit aktiviertem SAFE MODE sind keine Dateiuploadsmöglich.

2. Wenden wir uns nun dem PHP-Script zu. Zuerst muss überprüft werden, ob eine Dateiübertragen wurde, und wenn ja, ob diese auch eine JPEG-Datei ist. Die machen wir mitfolgendem Code:

<?php

if ($image == "none") {

echo "Bitte wählen Sie eine JPEG-Datei!";exit();

} else if ($image_type != "image/jpg" AND$image_type != "image/jpeg" AND$image_type != "image/pjpeg") {

echo "Dies ist keine JPEG-Datei!";exit();

}

Wenn das Dateifeld leer gelassen wurde, hat die Variable, die auf die übertragene Dateiverweist, den Inhalt none.

Den Typ der übertragenen Datei erhalten Sie, wenn Sie an die Variable des Dateifeldesnoch ein _type anhängen.

Wenn ein Fehler auftritt, wird eine Fehlermeldung ausgegeben und das Script beendet.

3. Nachdem wir nun wissen, dass eine JPEG-Datei erfolgreich übertragen wurde, ladenwir das Ming-Modul:

Serverseitige Erzeugung von Flash-Inhalten 171

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 172: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ Ming-Modul laden

dl("./libraries/php_ming.so");

Weitere Informationen zum Laden des Ming-Moduls siehe oben.

4. Nun öffnen wir die hochgeladene Bilddatei zum Lesen, da Ming einen gültigen Datei-zeiger benötigt, um das JPEG zu konvertieren.

/*~ Bild öffnen."b" bedeutet, dass die Datei im Binärmodus geöffnet wird, dies ist nur unter Windows wichtig, unter Unix/Linux wird dieser Parameter ignoriert

*/$filePointer = fopen($image, "rb");

Da eine Bilddatei eine Binärdatei ist, muss sie (unter Windows) auch als solche geöffnetwerden. Den Dateizeiger, den wir erhalten, benötigen wir später, um ihn an Ming zuübergeben.

5. Nun müssen wir ein Objekt der Klasse SWFMovie() erstellen, zu dem das konvertierteJPEG hinzugefügt werden kann:

//~ Neues SWF-Objekt instanziieren$myMovie = new SWFMovie();

6. Nun benötigen wir noch ein Bitmap-Objekt:

//~ Neues Bitmap-Objekt instanziieren$myBitmap = new SWFBitmap($filePointer);

Der SWFBitmap-Klasse wird beim Instanziieren der vorhin erstellte Dateizeiger auf diehochgeladene JPEG-Datei übergeben.

7. Da wir das JPEG nur in ein SWF umwandeln möchten und keine sonstigen Objekte zudem SWF hinzufügen wollen, benötigen wir die Größe des Bitmap-Objekts, damit wirdiese auch als Größe unseres SWF verwenden können. Dies geschieht mit folgendemCode:

//~ Höhe des Bildes auslesen$bHeight = $myBitmap->getHeight();

//~ Breite des Bildes auslesen$bWidth = $myBitmap->getWidth();

//~ die Größe des SWF an die Größe des Bildes anpassen$myMovie->setDimension($bWidth, $bHeight);

Die ausgelesene Höhe bzw. Breite wird dem SWF als Größe gegeben. Somit haben wirein SWF mit der Größe des übertragenen JPEG.

8. Nun muss das Bitmap bzw. das SWFBitmap-Objekt noch zum SWF bzw. zum SWF-Objekt hinzugefügt werden. Dies geschieht folgendermaßen:

172 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 173: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ Bitmap zum SWF hinzufügen$myMovie->add($myBitmap);

9. Nun muss das generierte SWF noch gespeichert werden. Erstellen Sie hierzu ein Unter-verzeichnis ./swf und fügen Sie folgenden Code zum PHP-Script hinzu:

//~ Dateiname generieren$saveName = "./swf/".$image_name.".swf";

//~ SWF speichern$myMovie->save($saveName);

Die Variable $image_name enthält den Dateinamen des JPEG-Bildes, wie es auf demSystem, von welchem es hochgeladen wurde, hieß. Wir fügen einfach ein .swf an denDateinamen an und speichern es im Unterverzeichnis ./swf ab.

Für dieses Verzeichnis müssen entsprechende Rechte (Schreibrechte) gesetzt werden.

Wenn Sie eine Datei mit gleichem Namen nochmals hochladen, wird die bereits vorhandene Datei überschrieben. Sie sollten also entweder eindeu-tige Dateinamen verwenden oder einen zufällig ermittelten String an denNamen des Bildes anfügen.

10. Nachdem das SWF erstellt wurde, zeigen wir es mit

//~ Auf neu erstelltes SWF weiterleitenheader("Location:output.php?swfPath=".$saveName."&width=".$bWidth."&height=".$bHeight);

?>

im Browser an. Vor dem header()-Aufruf darf keine Ausgabe an den Browser gemachtwerden, da sonst die Weiterleitung nicht mehr funktioniert. Anstelle des Aufrufs von$myMovie->save() und der Weiterleitung hätte man auch den entsprechenden Headerfür SWF-Dateien senden und dann $myMovie->output() verwenden können. Allerdingswürde dann der Inhalt des SWF (das konvertierte Bild) nicht gespeichert, sondern nurausgegeben.

11. An das PHP-Script (output.php) werden der Pfad des gerade erstellten SWF und dessenMaße übergeben. Aus diesen Informationen wird dann der entsprechende HTML-Codeerstellt, mit dem das SWF eingebunden und somit angezeigt wird.

8.1.5 Beispiel: Darstellung von Text

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

Serverseitige Erzeugung von Flash-Inhalten 173

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 174: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Vorbereitung (Konvertierung der Schriftendatei unter Windows)

Ming kann mit TTF-Schriftarten nicht direkt umgehen. Diese müssen erst in ein von Minglesbares Format umgewandelt werden:

1. Erstellen Sie einen neuen (leeren) Flash-Film.

2. Fügen Sie auf der Bühne ein Textfeld hinzu und wählen Sie die Schriftart (in unseremFall u11.ttf).

3. Exportieren Sie diesen Film als Generator-Vorlage mit externen Schriftdateien (DATEI/FILM EXPORTIEREN/GENERATOR-VORLAGE (*.SWT)/[X] EXTERNE SCHRIFTDATEIEN ERSTELLEN/OK). Es werden dann eine Generator-Vorlage (swt) und eine Schriftendatei (fft) erstellt.

4. Öffnen Sie die Makefdb-Applikation von Ming (auf CD-ROM) und geben Sie Folgendesein:

Prompt> makefdb.exe u11.fft

Daraufhin wird eine Datei mit dem Namen u11.fdb erstellt.

5. Diese fdb-Datei (hier u11.fdb) ist in Ming als Schriftart verwendbar und kann zumErstellen von Text verwendet werden. Auf der CD-ROM finden Sie bereits einige in dasfdb-Format konvertierte Standardschriftarten. (Danke an www.neuralust.com/~ming-docs/.)

Script

Inhalt des PHP-Scripts:

<?php

//~ Ming-Modul ladendl("./libraries/php_ming.so");

//~ Neues Movie-Objekt erstellen$myMovie = new SWFMovie();

//~ Framerate definieren$myMovie->setRate(20);

//~ Bühnengröße definieren$myMovie->setDimension(550, 400);

//~ Hintergrundfarbe definieren$myMovie->setBackground(0, 78, 152);

174 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 175: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ SWFFont-Objekt erstellen$myFont = new SWFFont("fdb/u11.fdb");

//~ SWFText-Objekt erstellen$myText = new SWFText();

//~ Schriftart für Text definieren$myText->setFont($myFont);

//~ Farbe des Textes definieren$myText->setColor(255, 255, 255);

//~ Text festlegen$myText->addString("Hallo");

//~ Text zum SWF hinzufügen$pen = $myMovie->add($myText);

//~ Text verschieben$pen->moveTo(100,100);

//~ Header für SWF schickenheader("Content-type: application/x-shockwave-flash");

//~ SWF an den Browser ausgeben$myMovie->output();

?>

Aufbau des Scripts:

1. Erstellen Sie eine neue PHP-Datei und laden Sie das Ming-Modul:

<?php

//~ Ming-Modul ladendl("./libraries/php_ming.so");

2. Erstellen Sie ein neues SWFMovie-Objekt, zu dem der Text nachher hinzugefügt wird:

//~ Neues Movie-Objekt erstellen$myMovie = new SWFMovie();

//~ Framerate definieren$myMovie->setRate(20);

//~ Bühnengröße definieren$myMovie->setDimension(550, 400);

//~ Hintergrundfarbe definieren$myMovie->setBackground(0, 78, 152);

Serverseitige Erzeugung von Flash-Inhalten 175

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 176: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Definieren Sie auch die Framerate, die Größe des SWF und die Hintergrundfarbe.

3. Nun laden wir die erstellte Schriftart (hier: u11.fdb):

//~ SWFFont-Objekt erstellen$myFont = new SWFFont("fdb/u11.fdb");

Dieser Code erstellt ein neues SWFFont-Objekt aus einer fdb-Datei. Wie Sie fdb-Dateienaus TTF-Schriftarten erstellen, ist oben beschrieben.

4. Nun muss der Text erstellt werden:

//~ SWFText-Objekt erstellen$myText = new SWFText();

//~ Schriftart für Text definieren$myText->setFont($myFont);

//~ Farbe des Textes definieren$myText->setColor(255, 255, 255);

//~ Text festlegen$myText->addString("Hallo");

Zuerst wird ein SWFText-Objekt erstellt. Dann werden die Eigenschaften festgelegt.Zuerst wird die Schriftart für den Text definiert. Hier müssen Sie das zuvor erstellteSWFFont-Objekt angeben. Dann wird die Farbe des Textes (hier: weiß) festgelegt undzuletzt der Text selbst.

5. Nachdem das SWFText-Objekt erstellt wurde, muss es noch zum SWF bzw. zumSWFMovie-Objekt hinzugefügt werden:

//~ Text zum SWF hinzufügen$pen = $myMovie->add($myText);

//~ Text verschieben$pen->moveTo(100, 100);

Beim Hinzufügen erhält man eine Variable zurück, die in diesem Falle die Position desSWF repräsentiert.

Diese kann man mit moveTo() auf der Bühne verschieben.

6. Nun ist das SWF fertig und kann ausgegeben werden:

//~ Header für SWF schickenheader("Content-type: application/x-shockwave-flash");

//~ SWF an den Browser ausgeben$myMovie->output();

?>

176 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 177: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Sie können das fertige SWF selbstverständlich auch speichern. Dies geschieht dann mitdem Aufruf von:

$myMovie->save("dateiname.swf");

Der Header für SWF sollte hierbei nicht versendet, aber dafür sollte z.B. mitheader("Location: …") der Benutzer auf dieses SWF (bzw. auf eine PHP/HTML-Seite,die dieses SWF einbindet) weitergeleitet werden.

8.2 ... mit Swift-Generator und PHPDer Swift-Generator inklusive Handbuch befindet sich im Ordner Software und Module\Swift-Generator\ auf der CD-ROM.

Swift-Generator ist ein Tool, mit dem sich in Flash erstellte, so genannte Generator Templates(SWT-Dateien) manipulieren lassen. Swift-Generator selbst hat nichts mit PHP zu tun, je-doch ist es angebracht, ihn zu behandeln, da sowohl libswf als auch Ming keine Manipu-lation von Templates zulassen, sondern nur dazu geeignet sind, neue SWF-Dateien zu er-stellen.

Obwohl mit Hilfe des Wrappers für den Besucher nicht deutlich wird, dass der Swift-Generator verwendet wird, ist er doch im Hintergrund tätig. Wer Swift-Generator benutzt,muss ein kleines Button-Banner einbinden. Wer dieses Banner nicht auf seiner Seite mit ein-binden möchte, muss eine Lizenzgebühr von 100 EUR/USD entrichten.

Mehr Informationen finden Sie unter: www.swift-tools.com

8.2.1 Voraussetzungen

Benötigt wird ein Server, auf dem es erlaubt ist, eigene CGIs in anderen Sprachen als PHPauszuführen (der Swift-Generator ist eine ausführbare Binärdatei, die auf den Server über-tragen werden muss; höchstwahrscheinlich wurde er mit C++ geschrieben), PHP4, einFlash-Template, eine SWS-Datei (Scriptdatei mit Anweisungen für den Swift-Generator)und die swiPHP-Klasse. Swift-Generator ist für verschiedene Plattformen erhältlich. Jenach Server sollten Sie die jeweils neueste Version für Ihre Plattform von www.swift-tools.com herunterladen.

8.2.2 Aufbau eines Flash-Films

Damit ein Flash-Film als Template für den Swift-Generator verwendet werden kann, mussein bestimmter Aufbau eingehalten werden.

Sollten Sie z.B. den Text eines Textfeldes austauschen bzw. verändern wollen, so müssenSie diese Elemente in geschweiften Klammern schreiben.

Serverseitige Erzeugung von Flash-Inhalten 177

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 178: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Der Flash-Film ist folgendermaßen aufgebaut:

Abbildung 8.1: Dieses SWF hat zwei Variablen, die durch den Swift-Generator verändert werdenkönnen: einmal {name} und einmal {zahl}.

Um nun einen anderen Namen einzufügen, die for-Schleife zehnmal ablaufenzu lassen und das fertige SWF an den Browser auszugeben, muss man imSWS-Script, das man an den Swift-Generator übergibt, folgenden Code ver-wenden:

% Template wählenINPUT " simple.swt"% den String {name} im SWT durch Joscha ersetzenSET name "Joscha"% den String {zahl} im SWT durch 10 ersetzenSET zahl "10"% Neues SWF direkt an den Browser ausgebenOUTPUT -cgi "-"

Mit diesem Code enthält die Variable »variable« nachher folgenden Inhalt:

Hallo, mein Name ist Joscha!!!!!!!!!!

Sie sehen also, dass Wörter bzw. Ausdrücke, eingeschlossen von geschweiften Klammern(z.B. {name}), vom Swift-Generator manipuliert werden können. Bei Bildern, Filmsequen-zen etc. verhält sich dies etwas anders, die Vorgehensweise bei diesen Objekten wird imWeiteren noch beschrieben.

8.2.3 Erstellen von SWT-Dateien

Swift-Generator benötigt ein so genanntes Template. Das heißt, Sie erstellen wie gewohntIhren Flash-Film, allerdings exportieren Sie diesen dann nicht als SWF-Datei, sondern alsSWT-Datei (DATEI/FILM EXPORTIEREN/GENERATOR-VORLAGE *.SWT).

178 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

BEISPIEL

Page 179: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Swift-Generator kann zwar auch SWF-Dateien als Templates verwenden, allerdings sindSWT-Dateien immer vorzuziehen, da diese zusätzliche Informationen, wie z.B. Schrift-artendefinitionen etc. enthalten. Sollten Sie also die Quelldateien besitzen, so empfiehlt essich, eine Generator-Vorlage zu erstellen.

8.2.4 Dumps von SWT-Dateien erstellen

Anders als beim Ersetzen von Variablen (z.B. {name}) werden bei anderen Objekten wie z.B. Textfeldern, Filmsequenzen oder Schriftarten so genannte IDs benötigt, um diese zumanipulieren. Diese IDs werden beim Export aus Flash automatisch festgelegt und sindnormalerweise nicht sichtbar. Um aber auf diese Objekte Zugriff zu erhalten bzw. um siemanipulieren zu können, benötigen wir diese IDs.

Eigens um den gesamten Inhalt eines Templates (SWF oder SWT) inklusive der internenIDs zu erhalten gibt es einen Befehl, der einen Dump einer SWT bzw. SWF-Datei erstellt,aus dem dann die IDs entnommen werden können.

Unter Windows ist dies:

DOS Prompt> swiftgen.exe –d template.swt

Dieser Befehl würde alle definierten Textfelder, Variablen, Filmsequenzen, Schriftarten etc.inklusive IDs auf dem Bildschirm ausgeben.

Da diese Ausgabe im DOS-Fenster etwas unpraktisch ist, ist es sinnvoll, die Ausgabe in ei-ne Datei umzuleiten:

DOS Prompt> swiftgen.exe –d template.swt > ausgabe.sws

Dies ergibt bei dem oben beschriebenen Beispiel bzw. dessen Template folgenden Code:

% Script template from Template file simple.swtINPUT "simple.swt"

% Output for testingOUTPUT "export.swf"

% Output for CGI% OUTPUT -cgi "-"

% Font definitions% FONT 1 is Arial (224 glyphs)

SUBSTITUTE TEXTFIELD 2 {

% Depends on Flash variable 'variable'

FONT 1 HEIGHT 12 COLOR #0066cc

ALIGN "left"

}

Serverseitige Erzeugung von Flash-Inhalten 179

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 180: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die ID von dem dynamischen Textfeld mit der Variable variable ist hier 2. Die SchriftartArial hat die ID 1. Diese Werte benötigen Sie nachher auch beim Einsatz des swiPHP-Wrappers.

Wenn Sie größere Änderungen im Flash-Film vorgenommen haben, solltenSie nach dem Export der Template-Datei unbedingt einen neuen Dump ma-chen, da sich eventuell die verwendeten IDs verändert haben könnten.

8.2.5 Der swiPHP-Wrapper

Wrapper – Ein Wrapper (engl. »Umwickler«) ist eine Routine, die nur eine einfacheAufbereitung der Parameter durchführt und dann die eigentliche Behandlungsroutineaufruft. In diesem Falle ist ein Wrapper ein Bindeglied zwischen zwei verschiedenenSprachen. Man kann mit Hilfe des Wrappers also in einer Sprache auf Klassen, Funkti-onen etc. einer anderen Sprache zugreifen. Hier ist es ein Wrapper, mit dem sich aus PHPheraus der Swift-Generator ansprechen lässt.

Der swiPHP-Wrapper befindet sich im Ordner Klassen\swiPHP\ auf der CD-ROM.

Warum einen Wrapper?

Nun mag sich die Frage stellen, warum ich einen Wrapper geschrieben habe und sozusa-gen einen Umweg über PHP gehe. Darauf lässt sich Folgendes erwidern:

• Wer PHP bereits kann, wird sich mit der Klasse sehr einfach tun, ansonsten müsste mannoch eine weitere (die Swift-Generator eigene) Sprache/Syntax lernen.

• SWS-Dateien werden on-the-fly generiert, d.h. man benötigt keine statische SWS-Dateimit allen Informationen. Dies bedeutet auch, dass sich der Inhalt der SWS-Datei zurLaufzeit ändern kann, indem Bedingungen, Loops – sprich alle Sprachkonstrukte, die inPHP möglich sind – genutzt werden. Ebenfalls kann sich der Inhalt der SWS-Datei zurLaufzeit maßgeblich durch User-Eingaben, Bilduploads etc. verändern.

• Möglichkeiten von PHP erweitern die Funktionalität von Swift-Generator, sprich demBenutzer der Klasse stehen alle Datenquellen offen, die auch PHP offen stehen (z.B.Oracle, MsSQL, PostgreSQL, DB++, Dateien etc. )

Klasseninformation

Die swiPHP-Klasse muss instanziiert werden, d.h. es muss zusätzlich zum Einbinden derDatei swiPHP.inc.php (ohne Anführungszeichen) noch eine Instanz der swiPHP-Klasse ge-schaffen werden.

180 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 181: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Das geht folgendermaßen:

<?php

include("./includes/swiPHP.inc.php");

$myMovie = new swiPHP("path/to/swiftgen.cgi");

?>

Zuerst wird per include()-Befehl die Datei eingebunden, die die swiPHP-Klasse enthält.Dann wird eine neue Instanz der swiPHP-Klasse erstellt.

Obwohl die Klasse ohne weiteres Wissen über die Funktionsweise und die Swift-eigeneSprache benutzt werden kann, ist es eventuell doch sinnvoll, das auf der CD-ROM beige-legte Handbuch zu konsultieren, um eventuelle Fehler in der eigenen Programmierung zuvermeiden bzw. zu beheben.

Bugs und Anregungen

Wenn Sie Fehler in der Klasse oder am Code entdecken und Verbesserungen vorschlagenmöchten, schreiben Sie an: [email protected].

8.2.6 Funktionsübersicht

Im Folgenden finden Sie das gesamte Funktionsrepertoire der Klasse swiPHP inklusiveBeispielen.

swiPHP

Beschreibung: Erstellt ein neues Objekt der Klasse swiPHP, die den Inhalt einer SWS-Dateiund so indirekt den Inhalt einer SWF abbildet.

Definition: new swiPHP (string swiftgenLocation)

Parameter: string swiftgenLocation

Dieser Parameter zeigt den Ort an, an dem sich der Swift-Generator bzw.das cgi befindet. Der Parameter kann entweder ein absoluter URL sein oderein relativer Pfad. Zurückgegeben wird das neue swiPHP-Objekt.

Anwendung: • Bei relativem Pfad:

<?php

include("./includes/swiPHP.inc.php");

Serverseitige Erzeugung von Flash-Inhalten 181

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 182: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

?>

• Bei absolutem URL:

<?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("http://domain/path/swiftgen.cgi");

?>

swiPHP->testRun()

Beschreibung: Wenn diese Funktion aufgerufen wird, dann wird das SWF nicht generiert,sondern vor der Generierung gestoppt und der Inhalt der SWS-Datei ange-zeigt.

Definition: void swiPHP->testRun (void)

Parameter: Keine.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->testRun();

?>

swiPHP->displayCopyrights()

Beschreibung: Gibt die Copyright-Informationen des Swift-Generators auf dem Bildschirmaus.

Definition: void swiPHP->displayCopyrights (void)

Parameter: Keine.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->displayCopyrights();

?>

182 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 183: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

swiPHP->setTempDir()

Beschreibung: Angabe eines Verzeichnisses zum temporären Speichern der generiertenSWS-Dateien.

Definition: void swiPHP->setTempDir (string path)

Parameter: string path

Ein Pfad, wo die dynamisch generierten SWS-Dateien gespeichert werden.Das PHP-Script muss Schreibrechte in diesem Ordner haben!

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->setTempDir("");

?>

Bei diesem Code werden die temporär angelegten SWS-Dateien im selbenVerzeichnis gespeichert, in dem dieses Script liegt.

swiPHP->mysqlConn()

Beschreibung: Öffnet eine Verbindung zu einem MySQL Server.

Diese Funktion wurde nur übernommen, um das gesamte Be-fehlsrepertoire des Swift-Generators vollständig im Wrapperwiderzuspiegeln.

Da PHP MySQL standardmäßig unterstützt, empfehle ich die-se Funktionen zu verwenden, falls nichts anderes möglich ist.Die Funktionen von PHP sind einerseits stabiler, als die desSwift-Generators und andererseits werden mehr Möglich-keiten geboten, auf die MySQL-Datenbank zuzugreifen.

Definition: void swiPHP->mysqlConn (string database [, string host [, stringuser [, string password [, int port]]]])

Parameter: string databaseDer Name der Datenbank.

string hostDer Server, auf dem sich die Datenbank befindet. Optionaler Parameter.Standard ist localhost.

Serverseitige Erzeugung von Flash-Inhalten 183

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 184: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

string userEin Benutzer, der Zugriff auf die Datenbank hat. Optionaler Parameter.Standard ist die momentane User-ID (Unix/Linux).

string passwordDas Passwort des Benutzers. Optionaler Parameter. Standard ist kein Pass-wort.

int portDer Port für den Zugriff auf die Datenbank. Optionaler Parameter. Standardist 3306.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->mysqlConn("database", "flashtool.de");

?>

Dieser Code öffnet eine Datenbankverbindung zur Datenbank database auf dem Serverflashtool.de.

swiPHP->odbcConn()

Beschreibung: Öffnet eine Verbindung zu einer ODBC-Datenquelle.

Diese Funktion wurde nur übernommen, um das gesamte Be-fehlsrepertoire des Swift-Generators vollständig im Wrapperwiderzuspiegeln.

Da PHP ODBC standardmäßig unterstützt, empfehle ich dieseFunktionen zu verwenden. Die ODBC-Funktionen von PHPsind einerseits stabiler als die des Swift-Generators und ande-rerseits werden mehr Möglichkeiten geboten, auf ODBC-Datenquellen zuzugreifen.

Definition: void swiPHP->odbcConn (string datasource [, string user [, stringpassword]])

Parameter: string datasourceODBC-Datenquelle.

string userEin Benutzer, der Zugriff auf die Datenquelle hat. Optionaler Parameter.Standard ist die momentane UIN (Unix/Linux).

184 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 185: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

string passwordDas Passwort des Benutzers. Optionaler Parameter. Standard ist keinPasswort.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->odbcConn("datasource", "user", "pass");

?>

Öffnet eine ODBC-Verbindung zur Datenquelle datasource.

swiPHP->defineDbQuery()

Beschreibung: Setzt eine Anfrage an die Datenbank (MySQL) bzw. Datenquelle (ODBC) ab.

Definition: void swiPHP->defineDbQuery (string destinationVariable, stringquery)

Parameter: string destinationVariableDie Variable, die nachher im SWF oder im SWS-Script das Ergebnis derDatenbankabfrage erhält.

string queryDer Anfragestring, der an die Datenbank weitergeleitet wird.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->mysqlConn("database", "flashtool.de");

$swiPHP->defineDbQuery("dest", "SELECT * FROM fruits");

?>

Dieser Code setzt eine Anfrage (SELECT * FROM fruits) an eine Datenbankdatabase auf dem Server flashtool.de ab.

Serverseitige Erzeugung von Flash-Inhalten 185

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 186: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

swiPHP->defineSound()

Beschreibung: Ersetzt einen Sound im Template durch einen anderen.

Definition: void swiPHP->defineSound (string libraryName, string newSoundFile[, int bits])

Parameter: string libraryNameDer Symbolname des Sounds im Template, der ersetzt werden soll.

string newSoundFileDer Pfad zu dem Soundfile, das anstelle des alten eingesetzt werden soll.Mögliche Sounddateien sind:

· WAV (Microsoft RIFF). Restriktionen: 8 oder 16 Bit PCM; 5.5, 11, 22 oder44 kHz.

· MP3. Restriktionen: 11, 22 oder 44 kHz.

int bitsDieser Parameter bezeichnet die Kompressionsnummer der Bits. MöglicheWerte sind 2, 3, 4 oder 5. Optionaler Parameter. Defaultwert ist 4. Wenn dasneue Soundfile eine mp3-Datei ist, wird dieser Parameter ignoriert.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->defineSound("sound.wav", "./newsound.mp3");

?>

Dieser Code ersetzt einen Sound mit dem Symbolnamen sound.wav imTemplate durch eine mp3-Datei mit dem Namen newsound.mp3.

swiPHP->defineFont()

Beschreibung: Ersetzt eine Schrift im Template durch eine andere.

Definition: void swiPHP->defineFont (int tagId, string fontFileName)

Parameter: int tagIdDie ID der zu ersetzenden Schriftart. Kann im Dump abgelesen werden (siehe Kapitel 8.2.4).

string fontFileNameDie neue Schriftartendatei.

186 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 187: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->defineFont(1,"./wingding.ttf");

?>

Dieser Code ersetzt den Font mit der ID 1 im Template durch den Font win-ding.ttf (WingDings).

swiPHP->defineImage()

Beschreibung: Ersetzt ein Bild im Template durch ein anderes.

Definition: void swiPHP->defineImage (string oldImage, string newImageFile [,int quality [, int width [, int height [, bool keepRatio]]]])

Parameter: string oldImage(Datei-)Name des zu ersetzenden Bildes.

string newImageFileName und Pfad der neuen Bilddatei. Mögliche Formate sind JPEG undPNG. Transparenz bei PNG-Dateien bleibt erhalten.

int qualityQualität (in Prozent). Gültige Werte sind 10 bis 100. Je höher die Zahl, destobesser die Qualität. Optionaler Parameter. Defaultwert ist 50 (Prozent).

int widthBreite des Bildes (in Pixel). Optionaler Parameter. Standard ist die gleicheBreite wie das zu ersetzende Bild.

int heightHöhe des Bildes (in Pixel). Optionaler Parameter. Standard ist die gleicheHöhe wie das zu ersetzende Bild.

bool keepRatioWenn der Wert true (wahr) ist, sorgt dieser Parameter dafür, dass dasSeitenverhältnis des neuen Bildes stimmt. Optionaler Parameter. Standard-wert ist true, Beibehaltung des Seitenverhältnisses.

Anwendung: <?phpinclude("./includes/swiPHP.inc.php");$swiPHP = new swiPHP("path/to/swiftgen.cgi");$swiPHP->defineImage("old.jpg", "./new.png",75);?>

Serverseitige Erzeugung von Flash-Inhalten 187

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 188: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Dieser Code ersetzt das im Template gespeicherte Bild old.jpg durch das Bildnew.png mit einer Qualität von 75 (Prozent).

swiPHP->defineMovieClip()

Beschreibung: Ersetzt eine Instanz einer Filmsequenz im Template durch eine in der Biblio-thek definierte Filmsequenz.

Definition: void swiPHP->defineMovieClip (string instanceName, stringsymbolName [, string colorHex [, int balance [, int alpha]]])

Parameter: string instanceNameDer Instanzname der zu ersetzenden Filmsequenz auf der Bühne.

string symbolNameDer Symbolname einer anderen in der Bibliothek definierten Filmsequenz.

string colorHexEin hexadezimaler Farbwert, den die neue Filmsequenz haben soll. Optio-naler Parameter. Standardwert ist Schwarz (#000000).

int balanceDieser Parameter beschreibt, welche Menge an originaler Farbe/Alpha zudem neuen Farbwert hinzugefügt wird. Mögliche Werte sind alle von 0.0(0%) bis 1.0 (100%). Optionaler Parameter. Defaultwert ist 1.0.Der neue Farbwert errechnet sich folgendermaßen:

Neuer Farbwert = alter Farbwert * Balance + Farbe

int alphaDieser Alphawert wird zu dem alten Alphawert inklusive Balance hinzuge-fügt. Mögliche Werte sind 0 (vollkommene Transparenz) bis 255 (keinerleiTransparenz). Optionaler Parameter. Defaultwert ist 0.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->defineMovieClip("oldClip", "newClip", "#FFFFFF");

?>

Dieser Code ersetzt eine Filmsequenz auf der Bühne mit dem InstanznamenoldClip durch die Filmsequenz mit dem Symbolnamen newClip aus derBibliothek und färbt diese weiß ein.

188 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 189: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

swiPHP->defineTtfPath()

Beschreibung: Gibt den Schriftartenordner an.

Definition: void swiPHP->defineTtfPath (string path)

Parameter: string pathPfad zum Schriftartenordner.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->defineTtfPath("C:\\WINDOWS\\Fonts");

$swiPHP->defineFont(1, "wingding.ttf");

?>

Dieser Code definiert das Schriftartenverzeichnis. Nach der Definition kannauf die Schriftarten in diesem Ordner zugegriffen werden, ohne deren Pfadexplizit anzugeben.

swiPHP->addReferer()

Beschreibung: Fügt einen erlaubten Referer hinzu. Wenn diese Funktion aufgerufen wird,dürfen nur Server von dieser Domain bzw. von diesen Domains das SWS-Script ausführen.

In diesem Wrapper ist diese Funktion überflüssig, wurde je-doch der Vollständigkeit halber übernommen.

Definition: void swiPHP->addReferer (string domain)

Parameter: string domainEine gültige Domain.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->addReferer("localhost");

$swiPHP->addReferer("flashtool.de");

$swiPHP->addReferer("jofe.de");

?>

Serverseitige Erzeugung von Flash-Inhalten 189

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 190: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Dieser Code fügt als erlaubte Referer das lokale Netzwerk, flashtool.deund jofe.de zu. Diese Funktion kann beliebig oft aufgerufen werden. DieReferer werden nicht überschrieben, sondern es wird jeweils ein weitererhinzugefügt.

swiPHP->setFrameRate()

Beschreibung: Legt die Framerate des Filmes fest.

Definition: void swiPHP->setFrameRate (int rate)

Parameter: int rateDieser Parameter legt die Framerate (Bilder pro Sekunde) fest.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->setFrameRate(20);

?>

Dieser Code ändert die Framerate des Templates auf 20 Bilder pro Sekunde.

swiPHP->defineText()

Beschreibung: Ersetzt einen Text bzw. eine Variable im Template durch einen neuen Wert.

Definition: void swiPHP->defineText (string varName, string newValue)

Parameter: string varNameDie Variable bzw. der Platzhalter, der ersetzt werden soll. Beispiel: {platzhalter} oder {name} etc.

string newValueDieser Parameter ist der Wert, der der Variable bzw. dem Platzhalter zuge-ordnet wird.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->defineText("variable", "Neuer Wert!");

?>

190 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 191: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Dieser Code ersetzt den Platzhalter {variable} im Template durch den Wert»Neuer Wert!«.

swiPHP->defineTextByFile()

Beschreibung: Ersetzt einen Text im Template durch den Inhalt einer Datei.

Anmerkung: Die Datei-Funktionen in PHP sind einerseits stabiler und ande-rerseits gibt es mehr Möglichkeiten für den Zugriff auf Dateien. Ich empfeh-le, die Datei-Funktionen von PHP zu verwenden. Diese Funktion wurde nurder Vollständigkeit halber in den Wrapper implementiert.

Definition: void swiPHP->defineTextByFile (string varName, string fileName)

Parameter: string varNameDieser Parameter ist die Variable, die nachher den Inhalt der Datei enthaltensoll. Dies kann entweder eine neue Variable sein, auf die zu einem späterenZeitpunkt in der SWS-Datei zugegriffen wird, oder eine Variable, die in demTemplate bereits definiert ist (z.B. {dateiinhalt}).

string fileNameDer Inhalt dieser (Text-)Datei wird gelesen und der Variable zugeordnet.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->defineTextByFile("variable", "datei.txt");

?>

Dieser Code liest den Inhalt der Datei datei.txt und weist ihn der Variablevariable zu.

swiPHP->defineTextSection()

Beschreibung: Ersetzt einen Text bzw. einen Platzhalter im Template durch bestimmteZeilen eines mehrzeiligen Textes.

Mit den PHP-eigenen Funktionen lässt sich der Vorgang, dendiese Funktion ausführt, sehr viel einfacher bzw. komfortablerbewerkstelligen. Diese Funktion wurde dem Wrapper nur ausGründen der Vollständigkeit hinzugefügt.

Definition: void swiPHP->defineTextSection (string varName, stringnewMultiLineValue, int fromLine [, int toLine])

Serverseitige Erzeugung von Flash-Inhalten 191

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 192: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Parameter: string varNameDieser Parameter ist die Variable bzw. der Platzhalter, der nachher die Zei-len enthalten soll.

string newMultiLineValueDieser Parameter ist der mehrzeilige Text, aus dem bestimmte Zeilen extra-hiert werden sollen. Dies können z.B. Daten aus einer Datenbank, Formular-daten oder auch Daten aus einer Datei sein.

int fromLineDieser Parameter legt die untere Grenze fest, ab der Daten zeilenweise ex-trahiert werden.

int toLineDieser Parameter legt die obere Grenze fest, bis zu der Daten zeilenweise ex-trahiert werden. Dieser Parameter ist optional. Wird er nicht angegeben, sowerden alle Daten von fromLine bis zur letzten Zeile extrahiert.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$text = "zeile1\nzeile2\nzeile3\nzeile4\nzeile5";

$swiPHP->defineTextSection("variable", $text,2,4);

?>

Dieser Code weist der Variable variable die Zeilen 2 bis 4 der Variable$text zu.

swiPHP->substText()

Beschreibung: Ändert die Eigenschaften und den Inhalt eines Textfeldes im Template.

Definition: void swiPHP->substText (int tagId, string string [, bool carriage[, string align [, int fontId [, int height [, string colorHex [, int alpha [, decimal vspacing [, float kerning]]]]]]]])

Parameter: int tagIdDie ID des Textfeldes, in dem der Text ersetzt werden soll. Diese ID erhältman aus dem Dump.

string stringDer Text, der in das Textfeld eingefügt werden soll.

192 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 193: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

bool carriageDieser Parameter legt fest, ob nach jeder Textdefinition ein Carriage Returneingefügt werden soll. Dieser Parameter ist optional. Der Standardwert istfalse (falsch), also kein Carriage return.

string alignDieser Parameter legt die Textausrichtung im Textfeld fest. Erlaubte Wertesind: »left«, »center« und »right«. Dieser Parameter ist optional. DerDefaultwert ist »left«.

int fontIdDieser Parameter ist die ID einer Schriftart, die die bisherige Schriftart imTextfeld ersetzen soll. Dieses Argument ist optional. Der Standardwert istkeine Änderung.

int heightMit diesem Parameter kann die Schriftgröße eingestellt werden. DiesesArgument ist optional. Standardmäßig wird keine Änderung vorgenom-men.

string colorHexMit diesem Argument lässt sich die Textfarbe einstellen. Mögliche Wertesind alle hexadezimalen Farbcodes. Dieses Argument ist optional. Standardist keine Änderung der Textfarbe.

int alphaMit diesem Argument lässt sich der Alphawert der Schrift einstellen. Mög-liche Werte sind 0 (komplett transparent) bis 255 (undurchsichtig). DiesesArgument ist optional. Standard ist keine Änderung.

decimal vspacingMit diesem Argument lässt sich der Zeilenabstand bei einem mehrzeiligenText beeinflussen. Dieses Argument ist optional. Der Standardwert ist 1.0.

float kerningMit diesem Argument lässt sich der Buchstabenabstand festlegen. Der Wertbezeichnet einen Skalierungsfaktor. Dieses Argument ist optional. Der Stan-dardwert ist 1.0. Um z.B. den doppelten Buchstabenabstand zu bekommen,müsste der Wert 2.0 genommen werden.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->substText(1, "TEXT", false, "right", "", 10);

?>

Serverseitige Erzeugung von Flash-Inhalten 193

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 194: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Dieser Code ersetzt den Text im Textfeld mit der ID 1 durch den Text TEXT,richtet ihn rechts im Textfeld aus und ändert die Schriftgröße auf 10.

swiPHP->substTextField()

Beschreibung: Ändert Eigenschaften und Inhalt eines mehrzeiligen Textfeldes im Template.

Definition: void swiPHP->substTextField (int tagId, string string [, int height[, string colorHex [, int alpha [, string align]]]])

Parameter: int tagIdDieses Argument ist die ID des Textfeldes, dessen Inhalt ersetzt werden soll.

string stringDieses Argument enthält den String, der in das Textfeld eingefügt werdenund den alten Text ersetzen soll.

int heightMit diesem Argument lässt sich die Schriftgröße festlegen. Dieses Argumentist optional. Standard ist keine Änderung der Schriftgröße.

string colorHexMit diesem Argument lässt sich die Schriftfarbe verändern. Mögliche Wertesind alle hexadezimalen Farbwerte. Dieses Argument ist optional. Standardist keine Änderung der Farbe.

int alphaMit diesem Argument lässt sich der Alphawert der Schrift einstellen.Mögliche Werte sind 0 (komplett transparent) bis 255 (undurchsichtig). Die-ses Argument ist optional. Standard ist keine Änderung.

string alignDieser Parameter legt die Textausrichtung im Textfeld fest. Erlaubte Wertesind: left, center und right. Dieser Parameter ist optional. Der Defaultwertist left.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->defineTemplate("./template.swt");

$swiPHP->substTextField(2, "Mein\nName\nist\nJoscha", 10);

?>

Dieser Code fügt in das Textfeld mit der ID 2 den vierzeiligen Text »MeinName ist Joscha« ein und stellt die Schriftgröße auf 10.

194 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 195: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

swiPHP->defineTemplate()

Beschreibung: Legt das zu benutzende Template fest.

Definition: void swiPHP->defineTemplate (string path)

Parameter: string pathDer Pfad zum Template. Kann entweder eine Generator-Vorlage (SWT) oder(notfalls) eine SWF-Datei sein.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->defineTemplate("./template.swt");

?>

swiPHP->output()

Beschreibung: Gibt das fertige SWF direkt (an den Browser) aus.

Definition: void swiPHP->output ([mixed expiration])

Parameter: mixed expirationDieser Parameter bezeichnet das Gültigkeitsdatum bzw. die Gültigkeits-dauer des ausgegebenen SWFs.

Mögliche Werte:

· ein Datum gemäß RFC1945 (siehe www.w3.org/Protocols/rfc1945/rfc1945)

· ein Zahlenwert (Sekunden)

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->defineTemplate("./template.swt");

//~ Hier weiterer Code...

$swiPHP->output(3600*24);

?>

Serverseitige Erzeugung von Flash-Inhalten 195

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 196: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Dieser Code gibt ein SWF zurück, das genau einen Tag ab Erstellung gültigist (3600 Sekunden [pro Stunde] mal 24 [Stunden]).

swiPHP->save()

Beschreibung: Speichert das fertige SWF in einer Datei.

Definition: void swiPHP->save (string pathToFile)

Parameter: string pathToFileDer Dateiname, unter dem das fertige SWF gespeichert werden soll. DerSwift-Generator benötigt Schreibrechte in diesem Verzeichnis.

Anwendung: <?php

include("./includes/swiPHP.inc.php");

$swiPHP = new swiPHP("path/to/swiftgen.cgi");

$swiPHP->defineTemplate("./template.swt");

//~ Hier weiterer Code...

$swiPHP->save("output.swf");

?>

8.2.7 Beispiel: Ersetzen eines Bildes durch ein anderes

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

Der Inhalt des SWF:

Abbildung 8.2: Dieses SWF enthält ein Bild mit dem Namen picture2.jpg, das durch ein anderes ersetzt werden soll.

Der Inhalt des PHP-Scripts:

<?php

//~ Datei mit der Klasse swiPHP einbindeninclude("./includes/swiPHP.inc.php");

196 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 197: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ Neue Instanz der Klasse erzeugen$myMovie = new swiPHP("swiftgen/swiftgen.cgi");

//~ Templatedatei angeben$myMovie->defineTemplate("./swt/picture.swt");

//~ Bild im Template ersetzen$myMovie->defineImage("picture2.jpg", "./resources/picture1.jpg", 75);

//~ Film ausgeben$myMovie->output();

?>

Der Ablauf des Beispiels:

Beim Aufruf des PHP-Scripts wird die SWS-Datei gebildet. Als Template wird eine zuvorangefertigte Generator-Vorlage verwendet, in der sich ein Bild mit dem Namen picture2.jpgbefindet. Dieses Bild wird vom Swift-Generator durch ein Bild mit dem Namen picture1.jpgersetzt, und danach wird das fertige SWF an den Browser ausgegeben.

Der Aufbau des Beispiels:

1. Erstellen Sie einen neuen Flash-Film.

2. Importieren Sie ein Bild (in diesem Fall picture2.jpg) und platzieren Sie es auf Ebene 0.

3. Exportieren Sie nun den erstellten Film als Generator-Vorlage.

4. Nun müssen Sie noch das Script erstellen. Öffnen Sie eine neue PHP-Datei und fügenSie folgenden Code ein:

<?php

//~ Datei mit Klasse swiPHP einbindeninclude("./includes/swiPHP.inc.php");

Durch diesen Code wird die swiPHP-Klasse eingebunden, damit nachher auf derenFunktionen zugegriffen werden kann.

5. Nun muss eine neue Instanz bzw. ein neues Objekt der Klasse erzeugt werden. Dies ge-schieht mit folgendem Code:

//~ Neue Instanz der Klasse erzeugen$myMovie = new swiPHP("swiftgen/swiftgen.cgi");

Die Position des Swift-Generators kann sowohl als absolute URL wie auch als relativePfadangabe angegeben werden. Hier befindet er sich in einem übergeordneten Ver-zeichnis swiftgen/.

6. Nachdem erfolgreich ein neues Objekt der Klasse erzeugt wurde, fügen Sie folgendenCode ein:

Serverseitige Erzeugung von Flash-Inhalten 197

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 198: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ Templatedatei angeben$myMovie->defineTemplate("./swt/picture.swt");

//~ Bild im Template ersetzen$myMovie->defineImage("picture2.jpg", "./resources/picture1.jpg", 75);

//~ Film ausgeben$myMovie->output();

?>

Der erste Befehl legt das zu verwendende Template (die zuvor erzeugte Generator-Vorlage) fest.

Die zweite Funktion ersetzt das Bild picture2.jpg in der Vorlage durch ein Bild auf demServer (hier picture1.jpg) und stellt die Qualität des neuen Bildes auf 75 (Prozent) ein.

Dann wird das fertige SWF an den Browser ausgegeben.

8.2.8 Beispiel: Ersetzen von Text und ActionScript

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

Aufbau des SWF:

Abbildung 8.3: Das ActionScript in diesem SWF weist dem Textfeld einen Wert zu und fügt je nach {zahl}Ausrufezeichen an den Text an.

Aufbau des PHP-Scripts:

<?php

//~ Datei mit Klasse swiPHP einbindeninclude("./includes/swiPHP.inc.php");

198 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 199: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

//~ Neue Instanz der Klasse erzeugen$myMovie = new swiPHP("swiftgen/swiftgen.cgi");

//~ Templatedatei angeben$myMovie->defineTemplate("./swt/simple.swt");

//~ {name} im Template ersetzen$myMovie->defineText("name", $name);

//~ {zahl} im Template ersetzen$myMovie->defineText("zahl", $num_exclamation);

//~ Film ausgeben$myMovie->output();

?>

Ablauf des Beispiels:

Beim Aufruf des PHP-Scripts wird eine SWS-Datei gebildet, die die Platzhalter {name} und{zahl} in der Generator-Vorlage simple.swt durch Werte ersetzt, die vom Besucher überge-ben wurden. Danach wird das fertige SWF ausgegeben.

Aufbau des Beispiels:

1. Erstellen Sie einen neuen Flash-Film.

2. Auf Ebene 0 fügen Sie ein dynamisches Textfeld mit dem Namen variable ein.

3. Nun fügen Sie im ersten Bild noch folgenden Code ein:

//~ ActionScript

variable = "Hallo, mein Name ist {name}";

for (i = 0; i < "{zahl}";i++) {

variable += "!";

}

Die Ausdrücke in den geschweiften Klammern werden vom Swift-Generator erkanntund können dann ersetzt werden.

Es ist nicht möglich, Platzhalter zu verwenden, ohne diese in Anführungszeichen zuschreiben, da Flash Variablen mit {} nicht akzeptiert. Dies erscheint etwas komisch, aberda Flash automatisch Typen konvertiert, kann man hier (siehe oben) die Zahl auch inAnführungszeichen schreiben.

4. Nachdem der Film als Generator-Vorlage exportiert wurde, wenden wir uns dem PHP-Script zu. Zuerst muss die swiPHP-Klasse eingebunden werden, um auf deren Funk-tionen zugreifen zu können. Dann muss ein neues Objekt der swiPHP-Klasse erstelltwerden:

Serverseitige Erzeugung von Flash-Inhalten 199

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 200: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

<?php

//~ Datei mit Klasse swiPHP einbindeninclude("./includes/swiPHP.inc.php");

//~ Neue Instanz der Klasse erzeugen$myMovie = new swiPHP("swiftgen/swiftgen.cgi");

5. Nachdem das neue Objekt erstellt und die Templatedatei definiert wurde, können denVariablen im Template (der Generator-Vorlage) neue Werte zugewiesen werden:

//~ Templatedatei angeben$myMovie->defineTemplate("./swt/simple.swt");

//~ {name} im Template ersetzen$myMovie->defineText("name", $name);

//~ {zahl} im Template ersetzen$myMovie->defineText("zahl", $num_exclamation);

Die Variablen $name und $num_exclamation wurden vom Besucher an das PHP-Scriptübergeben.

6. Danach wird das fertige SWF ausgegeben:

//~ Film ausgeben$myMovie->output();

?>

Wenn der Benutzer als Name ($name) »Joscha« eingegeben und für die Anzahl der Aus-rufezeichen ($num_exclamation) 3 gewählt hat, dann hat das fertige SWF folgendesActionScript im ersten Bild:

//~ ActionScript

variable = "Hallo, mein Name ist Joscha";

for (i = 0; i < "3";i++) {

variable += "!";

}

Dieser Code gibt dann in dem Textfeld auf Ebene 0 Folgendes aus:

Hallo, mein Name ist Joscha!!!

Das HTML-Formular ist in Abbildung 8.4 zu sehen.

Abbildung 8.4: In diesem HTML-Formular gibt der Besucherseinen Namen ein und legt fest, wie viele Ausrufezeichen erhinter seinem Namen haben möchte.

200 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 201: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Das Ergebnis (SWF) sehen Sie in Abbildung 8.5.

Abbildung 8.5: Nachdem das HTML-Formular abgesendet wurde, wird Obiges ausgegeben.

8.2.9 Beispiel: Anwendung aller Funktionen

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

Dieses Beispiel ist sehr komplex. Es werden beinahe alle Funktionen des Wrappers bzw.von Swift-Generator auf ein einziges Template angewendet.

Der Aufbau des SWF:

Abbildung 8.6: Dieses Bild zeigt den Aufbau eines Templates, das als .swt-Datei (Generator-Vorlage) exportiertwird. Es erfüllt keinen bestimmten Zweck, sondern dient nur als Beispiel.

Serverseitige Erzeugung von Flash-Inhalten 201

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 202: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die Arbeitsfläche in Flash sieht aus, wie in Abbildung 8.7 gezeigt.

Abbildung 8.7: So sieht das Template auf der Arbeitsfläche in Flash aus. An einigen Stellen sind Platzhalter(markiert mit {platzhalter}) eingefügt.

Das »fertige« SWF ist in Abbildung 8.8 zu sehen.

Abbildung 8.8: Dies ist das Template bzw das fertige SWF nach der Bearbeitung mit dem Swift-Generator.

Die verwendeten Befehle sind alle in der Funktionsreferenz ausreichend erläutert. DiesesBeispiel soll nur noch einmal anhand eines Templates und nicht nur theoretisch die Vor-gehensweise zeigen.

Alle Quellen (FLA, SWT, PHP, Bilder, Sounds, Schriftarten etc.) sind auf der CD enthalten,und das Script ist ausreichend kommentiert.

202 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 203: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

8.3 … mit der JPG2SWF-KlasseDie Klasse JPG2SWF befindet sich im Ordner Klassen\jpg2swf\ auf der CD-ROM.

Die Funktionen, die dieser Klasse zu Grunde liegen, wurden von Brun Didier (Foxy) ent-wickelt. Er bietet die Grundfunktion php_swf_jpg() auf seiner Webseite www.foxaweb.com/php_swf_jpg/ frei zum Download an. Diese Grundfunktion wurde von mir etwas abgeän-dert, in eine Klasse umgeformt und benutzerfreundlicher gemacht. Ich möchte mich andieser Stelle bei Brun Didier bedanken, der mir freundlicherweise erlaubt, hat meine Klasseinklusive seiner (veränderten) Funktionen in diesem Buch zu beschreiben und auf CD-ROM beizulegen.

8.3.1 Funktionsübersicht

JPG2SWF

Beschreibung Instanziiert ein neues Objekt von der JPG2SWF-Klasse, das ein zum SWFkonvertiertes JPEG repräsentiert.

Definition new JPG2SWF

Parameter Keine.

Anwendung <?php

include("./includes/jpg2swf.inc.php");

$swfPic = new JPG2SWF;

?>

JPG2SWF->load()

Beschreibung Lädt den Inhalt eines JPEG und stellt ihn der Klasse zur Verfügung.

Definition void JPG2SWF->load (string jpgFile)

Parameter string jpgFileDie JPEG-Datei, die in ein SWF konvertiert werden soll.

Es können nur unkomprimierte JPEG-Dateien bis zu einer Grö-ße von ca. 400x400 Pixel konvertiert werden.

Serverseitige Erzeugung von Flash-Inhalten 203

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 204: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Anwendung <?php

include("./includes/jpg2swf.inc.php");

$swfPic = new JPG2SWF;

$swfPic->load("myJPEG.jpg");

?>

JPG2SWF->save()

Beschreibung Mit dieser Funktion lässt sich das konvertierte JPEG als SWF auf dem Serverablegen.

Definition void JPG2SWF->save (string swfFile)

Parameter string swfFileDieser Parameter ist der Dateiname, unter dem das konvertierte JPEG ge-speichert werden soll.

Anwendung <?php

include("./includes/jpg2swf.inc.php");

$swfPic = new JPG2SWF;$swfPic->load("myJPEG.jpg");$swfPic->save("newSWF.swf");?>

JPG2SWF->output()

Beschreibung Mit dieser Funktion lässt sich das konvertierte SWF direkt (an den Browser)ausgeben. Dies ist z.B. auch sinnvoll, wenn das SWF nach der Konvertie-rung direkt per loadMovie() geladen werden soll.

Definition void JPG2SWF->output (void)

Parameter Keine.

Anwendung <?php

include("./includes/jpg2swf.inc.php");

$swfPic = new JPG2SWF;$swfPic->load("myJPEG.jpg");$swfPic->output();?>

204 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 205: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

8.3.2 Restriktionen

• Mit dieser Klasse können nur nicht progressiv komprimierte JPEG-Dateien konvertiertwerden.

• Die maximale Bildgröße einer JPEG-Datei, die konvertiert werden kann beträgt ca.400x400 Pixel.Obwohl diese Klasse stark eingeschränkt ist (sowohl dadurch, dass nur JPEG-Dateienkonvertiert werden können, als auch durch Geschwindigkeit und die oben genanntenRestriktionen) hat sie ganz klar einige Vorteile:

• Außer PHP wird nichts benötigt, d.h. die Klasse sollte von PHP 3 ab aufwärts reibungs-los funktionieren.

• Die Klasse läuft auch im SAFE MODE (siehe Ming).

• Die Klasse ist (auch für kommerzielle Projekte) frei erhältlich, ohne dass ein Banner ein-gebunden (siehe Swift-Generator) oder eine Lizenzgebühr entrichtet werden muss.

8.3.3 Beispiel

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

Das PHP-Script:

<?

//~ Datei mit der JPG2SWF-Klasse einbindeninclude("jpg2swf.inc.php");

//~ Neues Objekt der Klasse JPG2SWF erstellen$swfPic = new JPG2SWF;

//~ Das Bild laden, das konvertiert werden soll $swfPic->load("picture1.jpg");

$saveFile = "picture1.swf";

if (!file_exists($saveFile)) {

//~ SWF speichern$swfPic->save($saveFile);

//~ SWF ausgeben$swfPic->output();

} else {

header("Location: ".$saveFile);

Serverseitige Erzeugung von Flash-Inhalten 205

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 206: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

exit();

}

?>

Der Aufbau des Scripts:

1. Zuerst muss die Datei mit der Klassendefinition eingebunden werden:

<?

//~ Datei mit der JPG2SWF-Klasse einbindeninclude("jpg2swf.inc.php");

2. Dann muss ein neues Objekt der Klasse JPG2SWF erstellt werden.

//~ Neues Objekt der Klasse JPG2SWF erstellen$swfPic = new JPG2SWF;

3. Nun kann das JPEG geladen werden, das in ein SWF konvertiert werden soll:

//~ Das Bild laden, das konvertiert werden soll $swfPic->load("picture1.jpg");

4. Nun wird der Dateiname festgelegt, unter dem das erstellte SWF gespeichert werdensoll:

//~ Name der SWF-Datei definieren

$saveFile = "picture1.swf";

5. Um den Server zu entlasten, sollte eine JPEG-Datei (sofern sie öfters als einmal konver-tiert wird) nicht immer erneut mit der JPG2SWF-Klasse in ein SWF konvertiert werden,sondern besser das SWF gespeichert und dann ausgegeben werden. Dies macht der fol-gende Code:

if (!file_exists($saveFile)) {

//~ SWF speichern$swfPic->save($saveFile);

//~ SWF ausgeben$swfPic->output();

} else {

header("Location: ".$saveFile);

exit();

}

?>

206 Kapitel 8

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 207: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die JPG2SWF-Klasse benötigt Schreibrechte in dem Verzeichnis, in dem daskonvertierte Bild gespeichert werden soll.

Dieses Script konvertiert also eine JPEG-Datei in ein SWF. Allerdings tut es dies nur einmal,bei einem erneuten Aufruf wird zu dem bereits erstellten SWF gesprungen.

8.4 Weitere Alternativen (libswf)libswf existiert nicht für Windows. Die Entwicklung von libswf wurde eingestellt, und derQuellcode ist nicht vorhanden, um libswf auf andere Systeme zu portieren. Da dieEntwicklung von libswf schon vor längerer Zeit eingestellt wurde, unterstützt die Biblio-thek nur Funktionen von Flash 4. Aufgrund dieser Umstände ist es nicht sinnvoll, nochweiter mit libswf zu arbeiten.

Wer dennoch Informationen zu libswf haben möchte, kann hier mehr finden: www.php.net/manual/en/ref.swf.php

Die Homepage des Machers von libswf finden Sie unter: reality.sgi.com/grafica/flash/

Serverseitige Erzeugung von Flash-Inhalten 207

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 208: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer
Page 209: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

KAPITEL 9FLASH MX

Page 210: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Seit Flash MX gibt es zur Ein- und Ausgabe von Daten einige neue Funktionen, die denDatenaustausch mit anderen Programmiersprachen (z.B. PHP) stark vereinfacht haben.

9.1 Neue Funktionen zum DatenaustauschEs gibt sehr viele neue Funktionen, und es kann an dieser Stelle unmöglich auf alle einge-gangen werden. Allerdings möchte ich hier einige, die wohl häufiger benötigt werden, be-schreiben (das LoadVars-Objekt und die dazugehörigen Funktionen) und näher erläutern.Weiter unten finden Sie die Eigenschaften des LoadVars-Objekts.

9.1.1 Funktionsübersicht

LoadVars()

Beschreibung: Mit dem LoadVars-Konstruktor kann man ein neues LoadVars-Objekt erstel-len. In dieses Objekt kann man danach Daten von einem externen Script la-den oder Daten aus Flash bzw. aus dem LoadVars-Objekt an ein externesScript senden.

Definition: new LoadVars (void)

Parameter: Keine.

Anwendung: //~ ActionScript

//~ neues LoadVars-Objekt erstellenLoadVarsObjekt = new LoadVars();

Mit diesem Code wird ein neues LoadVars-Objekt mit dem NamenLoadVarsObjekt erstellt.

LoadVars.load()

Beschreibung: Mit dieser Funktion können Sie Daten von einem PHP-Script in dasLoadVars-Objekt laden. Bereits vorhandene Daten mit gleichem Namen wer-den überschrieben. Alle anderen Daten werden dem LoadVars-Objekt hinzu-gefügt. Die Daten müssen das Format application/x-www-form-urlencodedhaben. Dies ist das gleiche Format, wie auch bei loadVariables() undloadVariablesNum() benötigt wird. Weitere Informationen zur korrektenAusgabe finden Sie in Kapitel 3.1.3.

210 Kapitel 9

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 211: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Definition: void LoadVarsObjekt.load (string url)

Parameter: string urlDieser Parameter muss entweder ein relativer oder absoluter URL zu einemScript sein, das Daten im korrekten Format (application/x-www-form-ur-lencoded) ausgibt.

Anwendung: //~ ActionScript

//~ neues LoadVars-Objekt erstellenLoadVarsObjekt = new LoadVars();

// ~ Ladevorgang startenLoadVarsObjekt.load("meinScript.php");

Mit diesem Code wird zuerst ein neues LoadVars-Objekt (LoadVarsObjekt)erstellt, und in dieses werden dann Daten bzw. die Ausgabe des PHP-ScriptsmeinScript.php geladen. Die Daten sind danach im LoadVars-Objekt verfüg-bar (siehe Eigenschaft LoadVars.loaded).

LoadVars.send()

Beschreibung: Mit dieser Funktion können Daten bzw. Variablen, die im LoadVars-Objektdefiniert wurden, an ein Script gesendet werden.

Im LoadVars-Objekt definierte Arrays werden nicht als Arrayübergeben, sondern als kommaseparierte Liste. Für diese Listegilt das gleiche Verhalten wie in Kapitel 3.2.5. Das heißt, Ele-mente mit nicht-numerischem Schlüssel werden nicht überge-ben. Weitere Dimensionen werden der Liste angehängt etc.

Definition: void LoadVarsObjekt.send (string url [, string fenster [, stringmethode]])

Parameter: string urlDieser Parameter muss entweder ein relativer oder absoluter URL zu einemScript sein. Die Daten im LoadVars-Objekt werden an dieses Script gesendetund können dort weiterbearbeitet werden.

string fensterDer Name eines bereits bestehenden oder neuen Browserfensters, in demdas Script aufgerufen werden soll. Dieser Parameter ist optional. Wenn Siediesen Parameter nicht angeben, wird die Ausgabe des Scripts einfach über-gangen.

Flash MX 211

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 212: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

string methodeDieser Parameter bezeichnet die Übergabeart. Sie können die Daten entwe-der per GET (anhängen an den URL) oder per POST (in einer eigenen Kopf-zeile) an das Script übertragen. Dieser Parameter ist optional, Standard istPOST. Informationen zu den Übergabemethoden finden Sie in Kapitel 3.2.3.

Anwendung: //~ ActionScript

//~ neues LoadVars-Objekt erstellenLoadVarsObjekt = new LoadVars();

//~ Daten definierenLoadVarsObjekt.variable1 = "test";

//~ Array definierenarray1 = new Array("Flash","PHP");LoadVarsObjekt.array1 = array1;

//~ weiteres Array definierenarray2 = new Array();array2["key"] = "wird nicht übergeben";LoadVarsObjekt.array2 = array2;

//~ Daten an meinScript.php sendenLoadVarsObjekt.send("meinScript.php", "_blank", "POST");

Mit diesem Code wird ein neues LoadVars-Objekt erstellt und Daten in die-ses eingefügt (eine Variable und zwei Arrays, eines davon assoziativ). DieseDaten werden per POST an das PHP-Script meinScript.php gesendet, das in ei-nem neuen Fenster aufgerufen wird.

So sieht der Inhalt von $HTTP_POST_VARS bzw. ab PHP Version 4.1.0 $_POSTaus, nachdem der Inhalt des LoadVar-Objekts gesendet wurde:

Array ((

[array2] =>

[array1] => Flash,PHP

[variable1] => test

)

LoadVars.sendAndLoad()

Beschreibung: Mit dieser Funktion können Daten aus einem LoadVars-Objekt an ein Scriptgesendet und kann dessen Ausgabe wiederum in ein anderes LoadVars-Objekt geladen werden.

212 Kapitel 9

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 213: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Definition: void LoadVarsObjekt.sendAndLoad (string url, object zielObjekt [,string methode])

Parameter: string urlDieser Parameter muss entweder ein relativer oder absoluter URL zu einemScript sein, das korrekt formatierte Daten (application/x-www-form-urlen-coded) ausgibt.

object zielObjektDieser Parameter muss ein LoadVars-Objekt bezeichnen, in das die Ausgabedes Scripts geladen wird. Bereits vorhandene, gleiche Werte in diesem Ob-jekt werden dabei überschrieben.

string methodeDieser Parameter bezeichnet die Übergabeart. Sie können die Daten entwe-der per GET (anhängen an den URL) oder per POST (in einer eigenen Kopf-zeile) an das Script übertragen. Dieser Parameter ist optional, Standard istPOST. Informationen zu den Übergabemethoden finden Sie in Kapitel 3.2.3.

Anwendung: //~ ActionScript

//~ neues Objekt erstellen (Objekt zum Senden)LoadVarsObjekt = new LoadVars();

//~ Daten definierenLoadVarsObjekt.variable = "test";

//~ neues Objekt erstellen (Objekt zum Empfangen)LoadVarsObjekt2 = new LoadVars();

/*~ Daten an meinScript.php senden und Ausgabe in LoadVarsObjekt2speichern */

LoadVarsObjekt.sendAndLoad("meinScript.php",LoadVarsObjekt2,"POST");

Dieser Code erstellt zwei neue LoadVars-Objekte. In einem dieser Objektewird eine Variable definiert (LoadVarsObjekt) und der Inhalt dieses Load-Vars-Objekts per POST an ein Script (meinScript.php) übermittelt. Die Ausgabedieses Scripts wird in dem LoadVars-Objekt LoadVarsObjekt2 gespeichert.

LoadVars.toString()

Beschreibung: Formt alle Elemente eines LoadVars-Objekts in einen URL-kodierten String(application/x-www-form-urlencoded) um und gibt diesen zurück.

Definition: string LoadVarsObjekt.toString (void)

Flash MX 213

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 214: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Parameter: Keine.

Anwendung: //~ ActionScript

//~ neues LoadVars-Objekt erstellenLoadVarsObjekt = new LoadVars();

//~ Daten definierenLoadVarsObjekt.menu = "Fish & Chips";

//~ LoadVars-Objekt zu String konvertierenmenuString = LoadVarsObjekt.toString();

//~ String ausgebentrace(menuString);

Dieser Code erstellt ein neues LoadVars-Objekt, in dem eine Variable (menu)definiert wird. Dann wird das LoadVars-Objekt zu einem URL-kodiertenString umgeformt und mit trace() ausgegeben.

In der Flash-Entwicklungsumgebung erscheint dann folgende Ausgabe imVariablenfenster:

menu=Fish%20%26%20Chips

LoadVars.getBytesLoaded()

Beschreibung: Liefert bei einer gestarteten load()- oder sendAndLoad()-Funktion die be-reits in das LoadVars-Objekt geladenen Bytes. Wenn noch keine Funktion ge-startet wurde, liefert diese Funktion undefined zurück.

Definition: int LoadVarsObjekt.getBytesLoaded (void)

Parameter: Keine.

Anwendung: //~ ActionScript

//~ neues LoadVars-Objekt erstellenLoadVarsObjekt = new LoadVars();

// ~ Ladevorgang startenLoadVarsObjekt.load("meinScript.php");

/*~ Intervall setzen, in dem die geladenen Bytes überprüft werden*/

setInterval(showLoadedBytes, 1);

//~ Funktion zum Überprüfen der geladenen Bytes

function showLoadedBytes()

214 Kapitel 9

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 215: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

{

//~ geladene Bytes ermittelnvar loadedBytes = LoadVarsObjekt.getBytesLoaded();

//~ geladene Bytes ausgebentrace(loadedBytes);

}

Mit diesem Code wird ein neues LoadVars-Objekt erstellt. In dieses werdendann Daten aus einem PHP-Script (meinScript.php) geladen. In einem Inter-vall von einer Millisekunde wird die Funktion showLoadedBytes() aufgeru-fen, die die Anzahl der geladenen Bytes ausgibt.

LoadVars.getBytesTotal()

Beschreibung: Mit dieser Funktion können Sie die Länge der Ausgabe eines Scripts (inBytes) ermitteln, die mit der Funktion load() oder sendAndLoad()in einLoadVars-Objekt geladen wird.

Die Funktion liefert undefined zurück, wenn noch keine load()- odersendAndLoad()-Funktion gestartet wurde oder wenn die Länge der Ausgabe(die Content-Länge; engl.: content-length) nicht ermittelt werden konnte.Andernfalls wird ein numersicher Wert (in Bytes) zurückgeliefert.

Bei einer statischen Datei (z.B. Textdatei mit korrekt formatier-tem Inhalt) wird die Content-Länge vom Server übergeben,sobald ein Zugriff auf diese Datei erfolgt.Bei einem PHP-Script ist dies etwas anders, da ja laufendDaten gesendet bzw. ausgegeben werden und zur Laufzeit dieendgültige Content-Länge noch nicht feststeht. Somit gibt dieFunktion getBytesLoaded() beim Laden von Daten, die voneinem PHP-Script ausgegeben werden, den Wert undefinedzurück.Um dies zu verhindern, muss vor der Ausgabe der Daten anden Browser die endgültige Länge ermittelt werden. Wie diesfunktioniert, ist weiter unten bei der Anwendung beschrieben.

Definition: int LoadVarsObjekt.getBytesTotal (void)

Parameter: Keine.

Anwendung: Dieses Beispiel befindet sich im Ordner Flash 6\loadVars\ auf der CD-ROM.

Flash MX 215

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 216: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Der Inhalt des SWF:

Im folgenden Code wird der Event onLoad() verwendet. Weiter unten wirddieser genauer beschrieben.

//~ ActionScript

//~ neues LoadVars-Objekt erstellenLoadVarsObjekt = new LoadVars();

//~ Intervall setzen_root.id = setInterval(showLoadedBytes, 1);

// ~ Ladevorgang startenLoadVarsObjekt.load("meinScript.php");

//~ onLoad-Funktion zuweisenLoadVarsObjekt.onLoad = stopInterval;

function showLoadedBytes()

{

//~ geladene Bytes ermitteln

var loadedBytes = LoadVarsObjekt.getBytesLoaded();

//~ Gesamtlänge ermitteln

var totalBytes = LoadVarsObjekt.getBytesTotal();

//~ Überprüfen, ob bereits etwas geladen wurde

if (loadedBytes) {

//~ Ausgabe der Informationtrace(loadedBytes+" bytes von "+totalBytes+" bytes geladen.");

} //~ end if

}

function stopInterval()

{

//~ Inervall beendenclearInterval(_root.id);

}

Dieser Code erstellt ein neues LoadVars-Objekt. Danach wird ein Intervall festgelegt (1 ms),in dem die Funktion showLoadedBytes() aufgerufen wird.

Nachdem der Ladevorgang gestartet wurde, wird dem onLoad-Event des LoadVars-Objektsdie Funktion stopInterval() zugewiesen. Dies bedeutet, dass, nachdem die Ausgabe des

216 Kapitel 9

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 217: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Scripts meinScript.php geladen wurde, die Funktion stopInterval() ausgeführt wird, diedas Intervall, das zuvor gesetzt wurde, beendet.

Die Funktion showLoadedBytes() ermittelt bei jedem Aufruf die Gesamtlänge der Ausgabeund die bereits geladenen Bytes. Diese Information wird ausgegeben.

Der Inhalt des PHP-Scripts (meinScript.php):

<?php

/*~ jegliche Ausgabe (Header ausgenommen) wird in einem Buffer zwischengespei-chert */

ob_start();

//~ Daten ausgeben (werden in einem Puffer gespeichert)

for ($x = 0; $x < 1000; $x++) {

echo "&variable_".$x."=".$x."&\n";

}

//~ Datenmenge ermitteln$size = ob_get_length();

//~ Content-Länge ausgebenheader("Content-Length: ".$size);

//~ Daten ausgebenob_end_flush();

?>

Dieser Code kann dazu verwendet werden, die Länge der Ausgabe eines PHP-Scripts mit-zusenden, sodass die Funktion getBytesTotal() die Länge ermitteln kann.

Mit der Funktion ob_start() wird dem PHP-Interpreter vermittelt, dass jegliche Ausgabe(an den Browser) in einem Puffer zwischengespeichert werden soll (so wie die Ausgabe derfor-Schleife oben). Nachdem die Ausgabe beendet ist, wird die Datenmenge (in Bytes) er-mittelt. Daraufhin wird vor der Ausgabe der Daten ein Header gesendet, der die Länge derAusgabe (in Bytes) angibt. Nachdem dies geschehen ist, wird der Puffer geleert und dieDaten (an den Browser) ausgegeben.

Flash MX 217

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 218: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die Funktion ob_start()

void ob_start ([string output_callback])

ob steht für output buffering – mit dieser Funktion kann man jegliche Ausgabedes Scripts in einem Puffer speichern, auf den man später zugreifen kann.

string output_callback

Bei diesem Parameter können Sie eine Funktion angeben, der der Inhalt vordem Ausführen von ob_end_flush() oder am Ende des Scripts automatischübergeben wird. Die angegebene Funktion muss einen String als Parameternehmen und auch einen String zurückliefern.

Beispiel:

<?php

//~ Beginn des Scripts

function myFunc ($str) {

//~ String umdrehen und zurückgebenreturn strrev($str);

} //~ end func

/*~ Ausgabepufferung starten und als Callback-Funktion myFunc defi-nieren (dreht einen String um und gibt ihn zurück) */ob_start("myFunc");

/*~ Etwas an den Browser ausgeben, wird im Puffer gespeichert */echo "Hallo";

//~ Inhalt des Puffers ausgeben und Puffer leerenob_end_flush();

?>

Dieser Code gibt auf dem Bildschirm

ollaH

aus.

218 Kapitel 9

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Tutorial

Page 219: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die Funktion ob_get_length()

string ob_get_length (void)

Diese Funktion gibt die Länge des Ausgabepuffers zurück. Wenn keinPuffer definiert ist, liefert diese Funktion false (falsch).

<?php

//~ Beginn des Scripts

//~ Ausgabepufferung startenob_start();

//~ Etwas ausgeben, wird im Puffer gespeichertecho "12345";

//~ Länge des Puffers ermitteln$length = ob_get_length();

//~ Puffer leerenob_end_clean();

//~ Länge ausgebenecho $length;

?>

Dieser Code gibt im Browser 5 aus. Der Inhalt des Puffers wird durch dieFunktion ob_end_clean() geleert und deshalb nicht ausgegeben.

Die Funktion ob_end_flush()

void ob_end_flush (void)

Diese Funktion gibt den Inhalt eines Ausgabepuffers (an den Browser) ausund leert den Puffer.

Beispiel:

<?php

//~ Beginn des Scripts

//~ Ausgabepufferung startenob_start();

?>

<html><body><h1>Hallo</h1></body></html>

<?php

Flash MX 219

Tutorial

Tutorial

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 220: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

/*~ An dieser Stelle wurde noch nichts an den Browser ausgegeben,der HTML-Code befindet sich im Puffer. */

//~ Ausgabepuffer leeren und Inhalt ausgeben

ob_end_flush();

/*~ Hier wurde dann der obige HTML-Code an den Browser ausgegeben.*/

?>

9.1.2 Events

LoadVars.onLoad()

Beschreibung: Dieser Event wird ausgeführt, sobald alle Daten bzw. die Ausgabe einesScripts, das per load() oder sendAndLoad() geladen wird, komplett in dasLoadVars-Objekt geladen wurden.

Standardmäßig ist diese Methode undefined, man kann ihr aber eine eigeneFunktion zuweisen, die ausgeführt wird, wenn alle Daten geladen wurden.

Definition: bool LoadVarsObjekt.onLoad (bool erfolg)

Parameter: bool erfolgDieser Parameter gibt an, ob die load()- oder sendAndLoad()-Funktion er-folgreich war (true) oder nicht (false).

Anwendung: // ~ ActionScript

// ~ neues LoadVars-Objekt erstellenLoadVarsObjekt = new LoadVars();

// ~ Ladevorgang startenLoadVarsObjekt.load("meinScript.php");

//~ onLoad-Funktion zuweisenLoadVarsObjekt.onLoad = end;

function end(success){

if (success) {trace("Success - data loaded!");

} else {trace("An error occured!");

}}

220 Kapitel 9

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Tutorial

Page 221: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Mit diesem Code wird ein neues LoadVars-Objekt erstellt. In dieses werdendann Daten bzw. die Ausgabe eines PHP-Scripts (meinScript.php) geladen.Dem onLoad-Event wird die Funktion end() zugewiesen. Der Parametersuccess zeigt an, ob der Ladevorgang erfolgreich war. Wenn das Script z.B.nicht gefunden wird, enthält diese Variable den Wert false (falsch).

Das Ausführen des onLoad-Events zeigt nur an, dass der Lade-vorgang beendet wurde, aber nicht, ob alle benötigten Datenwirklich geladen wurden.Das heißt: Wenn das Script überhaupt nichts ausgibt und dieseAusgabe korrekt geladen wurde (paradox, nicht? ;-), dannwird der onLoad-Event trotzdem ausgeführt und die Variablesuccess enthält trotzdem den Wert true (wahr).

9.1.3 Eigenschaften

LoadVars.contentType

Beschreibung: Diese Eigenschaft des LoadVars-Objekts gibt den MIME-Typ an, den dieDaten bzw. Variablen im LoadVars-Objekt haben. Dieser Typ wird bei einersend()- oder sendAndLoad()-Funktion an den Server bzw. das Script über-mittelt. Der Default MIME-Typ ist application/x-www-form-urlencoded.

Definition: LoadVarsObjekt.contentType = string mime

Parameter: string mimeEin MIME-Typ.

Anwendung: // ~ ActionScript

// ~ neues LoadVars-Objekt erstellenLoadVarsObjekt = new LoadVars();

// ~ Variable definierenLoadVarsObjekt.variable1 = "test";

//~ MIME-Typ festlegen (hier derselbe wie default)LoadVarsObjekt.contentType = "application/x-www-form-urlencoded";

//~ Daten an meinScript.php sendenLoadVarsObjekt.send("meinScript.php", "_self", "POST");

Daten (variable1) werden im angegebenen MIME-Format (application/x-www-form-urlencoded) an das Script meinScript.php gesendet.

Flash MX 221

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 222: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Nachdem der MIME-Typ definiert wurde (selbst wenn es dergleiche wie der Standard ist), dann wird auch dieser zum PHP-Script versendet, als sei es eine normale Variable.

LoadVars.loaded

Beschreibung: Diese Eigenschaft zeigt an, ob eine gestartete load()- oder sendAndLoad()-Funktion bereits alle Daten bzw. die Ausgabe eines Scripts vollständig gela-den hat. Standardmäßig ist diese Eigenschaft undefined. Sobald eine load()-oder sendAndLoad()-Funktion gestartet wurde, ist ihr Wert false (falsch).Wenn alle Daten korrekt geladen wurden, ist ihr Wert true (wahr). Trittbeim Laden ein Fehler auf, bleibt der Wert der Eigenschaft false (falsch).

Definition: LoadVarsObjekt.loaded = true|false

Parameter: Keine.

Anwendung: // ~ ActionScript

// ~ neues LoadVars-Objekt erstellenLoadVarsObjekt = new LoadVars();

//~ Hier ist die Eigenschaft undefinedtrace(LoadVarsObjekt.loaded);

// ~ Ladevorgang startenLoadVarsObjekt.load("meinScript.php");

//~ Hier ist die Eigenschaft false (falsch)trace(LoadVarsObjekt.loaded);

//~ onLoad-Funktion zuweisenLoadVarsObjekt.onLoad = show;

function show(){

//~ Ladevorgang wurde beendet//~ Hier ist die Eigenschaft true (wahr)trace(LoadVarsObjekt.loaded);

}

Die Ausgabe dieses Codes ist:

undefinedfalsetrue

Sie sehen also, wie sich nach und nach (im Verlauf des Ladevorgangs) dieloaded-Eigenschaft des LoadVars-Objekts LoadVarsObjekt verändert.

222 Kapitel 9

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 223: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

KAPITEL 10FLASH.INC.PHP

Page 224: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die flash-Klasse ist eine statische Klasse, sie muss nicht instanziiert werden, um auf dieFunktionen zugreifen zu können. Einzig und allein die Datei flash.inc.php muss in die PHP-Datei, in der die Funktionen der flash-Klasse zur Verfügung stehen sollen, per include()eingebunden werden.

Die folgenden Beispiele enthalten als include()-Pfad immer ./includes/flash.inc.php. Dies müssen Sie selbstverständlich an Ihre Bedürfnisse anpassen.

10.1.1 Funktionsübersicht

flash::swfHeader()

Beschreibung: Diese Funktion schickt eine Kopfzeile, die den Inhalt eines SWF einleitet.Sprich, wenn man on-the-fly ein SWF erzeugt oder ein JPG in ein SWF um-wandelt und dieses an den Browser ausgeben möchte, braucht man eineKopfzeile, die dem Browser sagt: Achtung, jetzt kommt der Inhalt eines SWF.

Definition: void flash::swfHeader (void)

Parameter: Keine.

Anwendung: <?php

include("./includes/flash.inc.php");//~ Hier darf keinerlei Ausgabe erfolgen

flash::swfHeader();//~ Hier kommt der (binäre) Inhalt eines SWF

?>

flash::drawExpire()

Beschreibung: Diese Funktion muss ganz zu Beginn einer PHP-Datei, vor jeglicher andererAusgabe, aufgerufen werden. Sie sendet Header (Kopfzeilen) mit dem PHP-Script, die dem Browser sagen, diese Datei nicht im Cache zu speichern.Dies ist sinnvoll bei Dateien, die oft aufgerufen werden, deren Inhalt sichaber laufend ändern kann.

Viele Browser haben, was das Caching von Dateien betrifft,Bugs, deshalb ist diese Methode nicht hundertprozentig sicher.In den meisten Browsern führt dies zwar zu dem gewünschtenErgebnis, wollen Sie sich aber hundertprozentig sicher sein, somüssen Sie zusätzlich zu diesem Aufruf noch beim Aufruf ausFlash eine zufällige Zahl oder ein Timestamp an den URL an-hängen. Dies ist in Kapitel 3.1.6 genau beschrieben.

224 Kapitel 10

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

·

HINWEIS

Page 225: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Definition: void flash::drawExpire (void);

Parameter: Keine.

Anwendung: <?php

include("./includes/flash.inc.php");

flash::drawExpire();

//~ weiterer Code hier

?>

flash::requestArray()

Beschreibung: Wenn man nicht weiß, welche Daten an PHP übergeben werden, dann kannman diese aus den Arrays $HTTP_GET_VARS, $HTTP_POST_VARS und (wennCookies gesetzt wurden) aus $HTTP_COOKIE_VARS auslesen. Nach PHPVersion 4.1.0 wurden diese Arrays in einem einzigen Array mit dem Namen$_REQUEST zusammengefasst.

Diese Funktion gibt alle an PHP übergebenen Daten – sowohl POST, GET alsauch COOKIE-Variablen – als Array zurück.

Definition: array flash::requestArray (void)

Parameter: Keine.

Anwendung: <?php

include("./includes/flash.inc.php");

print_r(flash::requestArray());

?>

Dieser Code gibt alle an PHP übergebenen Variablen bzw. den Inhalt desArrays, das alle Variablen enthält, auf dem Bildschirm aus.

flash::maskPath()

Beschreibung: Da bei der Übergabe von relativen Pfadangaben nach Flash Probleme auf-treten können, sollten die Pfade maskiert werden. Dies ist mit dieser Funk-tion möglich.

Definition: string flash::maskPath (string path, string maskChar)

flash.inc.php 225

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 226: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Parameter: string pathDieser Parameter ist der Pfad, der maskiert werden soll.

string maskCharDieser Parameter ist das Zeichen, das zum Maskieren verwendet werdensoll. Es sollte ein Zeichen sein, das sowohl nicht in einem Pfad enthalten seinkann als auch nicht URL-kodiert werden muss. Empfehlung: *

Anwendung: <?php

include("./includes/flash.inc.php");

$path = "../../path/to/SWF";

$path = flash::maskPath($path,"*");

echo "&myPath=".$path."&";

?>

Dies gibt auf dem Bildschirm nachher aus:

&myPath=**/**/path/to/SWF&

Um innerhalb von Flash den Pfad wieder in die korrekte Form zu bringen,benötigt man die Funktion redoPath(). Diese ist in Kapitel 3.1.3 beschrie-ben.

flash::echoVar()

Beschreibung: Diese Funktion gibt eine Variable in für Flash korrekt formatiertem Formataus, eventuell werden die Daten URL-kodiert.

Definition: void flash::echoVar (string varName, string varValue [, boolurlEncode])

Parameter: string varNameDieser Parameter ist der Name, den die Variable nachher in Flash haben soll.

string varValueDieser Parameter ist der Wert der Variable.

bool urlEncodeDieser Parameter ist optional, er erlaubt es, den Wert der Variable zu URL-kodieren. Der Standard ist false, also keine URL-Kodierung.

Anwendung: <?php

include("./includes/flash.inc.php");

$wert = "Fish & Chips";

226 Kapitel 10

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 227: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

flash::echoVar("menue", $wert, true);

?>

Dies gibt auf dem Bildschirm nachher

&menue=Fish+%26+Chips&

aus.

Sie sehen, dass der Wert URL-kodiert wurde. Wenn Sie den dritten Para-meter auf false stellen, wird der Wert nicht URL-kodiert, allerdings würdedas in diesem Fall die Ausgabe verfälschen. Wenn Sie also nicht genau wis-sen, welche Zeichen im Wert vorhanden sein werden, ist es sicherer, ihn ko-dieren zu lassen.

flash::echoArray()

Beschreibung: Diese Funktion gibt ein Array in der Form arrayName[key]=value aus. Eskann dann in Flash mit einem Parser wieder zu einem Array zusammenge-setzt werden (siehe Kapitel 3.1.4).

Definition: void flash::echoArray (string arrayName, array array [, boolurlEncode])

Parameter: string arrayNameDieser Parameter ist der Name, den das Array nachher in Flash haben soll.

array arrayDieser Parameter ist ein in PHP definiertes Array, es kann sowohl ein »nor-males« als auch ein assoziatives Array sein.

bool urlEncodeDieser Parameter ist optional. Er erlaubt es, die Werte aller Elemente zuURL-kodieren. Der Standard ist false, also keine URL-Kodierung.

Anwendung: <?php

include("./includes/flash.inc.php");

$nameArray = array(); //~ neues Array erstellen

$nameArray[0] = "Joscha";$nameArray[1] = "Hans";//~Hier "fehlt" etwas$nameArray[3] = "Jürgen";

flash::echoArray("namen", $nameArray, true);

?>

flash.inc.php 227

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 228: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Dies gibt auf dem Bildschirm nachher

&namen[0]=Joscha&&namen[1]=Hans&&namen[3]=J%FCrgen&

aus. In Flash kann dann per Aufruf der Funktion buildArrays() das Arraynamen erstellt werden. Vorher muss allerdings der ActionScript-Code für die-se Funktion eingefügt werden.

flash::echoArrayString()

Beschreibung: Diese Funktion gibt ein Array in Form einer kommaseparierten Liste aus,die nachher in Flash mit dem Befehl split() wieder zu einem Array zusam-mengesetzt werden kann.

Definition: void flash::echoArrayString (string varName, array array, stringglue [, bool fillEmpty [, bool urlEncode]])

Parameter: string varNameDer Name, den die Variable nachher in Flash haben soll.

array arrayDas Array, das in eine kommaseparierte Liste umgewandelt werden soll. Eskönnen keine assoziativen und keine mehrdimensionalen Arrays übergebenwerden.

string glueAnhand dieses Strings werden die verschiedenen Elemente getrennt.Hier kann der String mehr als ein Zeichen haben; die split()-Funktion inFlash kann allerdings nur Strings anhand eines einzelnen Zeichens trennen.

bool fillEmptyDieser Parameter ist optional, er legt fest, ob »fehlende» Elemente in einemArray vor dem Ausgeben mit leeren Elementen gefüllt werden. Dies ist sinn-voll, wenn die Elemente ihre Plätze, die sie in PHP haben, auch in Flash be-halten sollen. Der Standard ist false, es werden also keine leeren Elementeeingesetzt.

bool urlEncodeDieser Parameter ist optional. Er legt fest, ob die Werte der einzelnen Ele-mente URL-kodiert werden. Standard ist false, also keine URL-Kodierung.

Anwendung: <?php

include("./includes/flash.inc.php");

$nameArray = array(); //~ neues Array erstellen

228 Kapitel 10

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 229: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

$nameArray[0] = "Joscha";$nameArray[1] = "Hans";//~Hier "fehlt" etwas$nameArray[3] = "Jürgen";

flash::echoArrayString("namenString", $nameArray, ",", true, true);

?>

Dies gibt auf dem Bildschirm

&namenString=Joscha,Hans,,J%FCrgen&

aus. In Flash kann nach dem Laden per

//~ ActionScriptnamen = namenString.split(",");

das Array namen erstellt werden.

flash::removeCarriage()

Beschreibung: Mit dieser Funktion lassen sich Texte, die unter Windows erstellt wurdenund als Zeilenumbruch \r\n haben, auf einen einzelnen Zeilenumbruch (\n)reduzieren.

In Flash werden die Zeichen \r\n nämlich jeweils als ein Zeilenumbruchdargestellt, somit ergäbe das einen doppelten Zeilenumbruch.

Definition: string flash::removeCarriage (string text)

Parameter: string textDieser Parameter enthält den Text mit dem doppelten Zeilenumbruch \r\n.

Anwendung: <?php

include("./includes/flash.inc.php");

$text = "Hier soll nur EIN \r\n Zeilenumbruch stehen";

$text = flash::removeCarriage($text);

flash::echoVar("text", $text);

?>

Dies gibt auf dem Bildschirm

&text=Hier soll nur EINZeilenumbruch stehen&

aus.

flash.inc.php 229

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 230: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

flash::dePrice()

Beschreibung: Diese Funktion wandelt einen Preis, der beispielsweise aus einer Datenbankkommt und das Format 0.00 hat, in das Format um, das in Deutschland ge-bräuchlich ist: 0,00.

Wenn Sie die Preise in dieses Format umwandeln, lässt sichmit ihnen in Flash nicht mehr rechnen. Sollten Sie mit denPreisen noch rechnen wollen, müssen Sie die Umwandlung di-rekt in Flash vornehmen.

Definition: string flash::dePrice (int enPrice)

Parameter: int enPriceDieser Parameter ist der Preis im Format 0.00.

Anwendung: <?php

include("./includes/flash.inc.php");

$price = 9.99;

$price = flash::dePrice($price);

flash::echoVar("preis", $price);

?>

gibt auf dem Bildschirm

&preis=9,99&

aus.

flash::showZero()

Beschreibung: Diese Funktion wandelt Zahlen im Format 0 oder 0.0 in das Format 0.00 um.Dies ist sinnvoll bei Integer-Werten, die beispielsweise aus einer Datenbankkommen.

Definition: float flash::showZero (int number)

Parameter: int numberEine Zahl im Format 0 oder 0.0

Anwendung: <?php

include("./includes/flash.inc.php");

$price = 0;

230 Kapitel 10

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 231: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

$price = flash::showZero($price);

flash::echoVar("preis", $price);

?>

Dies gibt auf dem Bildschirm

&preis=0.00&

aus.

flash::extRequest()

Beschreibung: Diese Funktion »simuliert einen Proxy« – normalerweise lässt sich aus Flashnicht auf Scripts zugreifen, die auf anderen Domains liegen (siehe Kapitel5.1). Mit dieser Funktion ist es sowohl möglich, auf Scripts und Dateien vonanderen Servern zuzugreifen, als auch die POST-, bzw. GET-Variablen weiter-zuleiten.

Definition: void flash::extRequest (string url)

Parameter: string urlDer URL des extern liegenden Scripts. Dem URL können bereits Variablenangehängt sein.

Anwendung: <?php

include("./includes/flash.inc.php");

//~ Hier keinerlei Ausgabe

flash::extRequest("http://www.extServer.de/script.php");

//~ Ende des Scripts

?>

Dieser Code überträgt alle Variablen, die per POST oder GET an dieses Scriptübertragen wurden, und gibt auf dem Bildschirm die Ausgabe des Scriptswww.extServer.de/script.php aus.

flash.inc.php 231

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 232: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer
Page 233: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

ANHANG

Page 234: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

A.1 BoniIn diesem Kapitel finden Sie Applikationen und Beispiele, die teilweise noch nicht ganz fer-tig sind oder zu denen keine weitere Beschreibung vorhanden ist als die Quelldateienund/oder eine kurze Befehlsreferenz. Sie dürfen diese Beispiele in Ihren Projekten einset-zen oder aber einfach nur ansehen, um eventuell noch etwas mehr über den Umgang mitFlash und PHP zu erfahren.

A.1.1 flaLittleShop (Onlineshop)

Diese Applikation befindet sich im Ordner BONUS\flaLittleShop\ auf der CD-ROM.

Abbildung A.1: Der flaLitteShop in Aktion

In diesem Kapitel werde ich auf den auf der CD-ROM beiliegenden Onlineshop in Flash(flaLittleShop) eingehen. Obwohl der Shop speziell für dieses Buch als Beispiel angefertigtwurde, ist der Aufbau doch recht komplex, deshalb werde ich nur auf die relevantenStellen eingehen (PHP und Flash). Die PHP- und ActionScript-Programmierung selbstwird in diesem Kapitel nicht erläutert.

Zur Vereinfachung des Beispiels enthält dieser Shop weder Error-Handling,noch verwendet er Session-IDs, ebenfalls werden die Bestelldaten nicht inder Datenbank gespeichert, sondern direkt an den »Verkäufer« per E-Mailgesendet. Obwohl es theoretisch möglich wäre, sollten Sie den Shop in die-ser Form nicht zum Verkauf von Waren einsetzen, er dient lediglich alsBeispiel und ist in punkto Sicherheit nicht weit genug entwickelt worden.

234 Anhang

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 235: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Voraussetzungen

• MySQL (www.mysql.com)

• PHP 4

• Die JPG2SWF-Klasse (siehe Kapitel 8.3).

• Die flash.inc.php Klasse (siehe Kapitel 10).

• Optional phpMyAdmin (siehe Kapitel 12.3).

Installation

1. Importieren der Daten

Zuerst müssen die Produktdaten in der Datei products.sql in die MySQL-Datenbank impor-tiert werden (Sie können selbstverständlich auch Ihre eigenen Produktdaten verwenden).Ich empfehle phpMyAdmin für den Import (phpmyadmin.sourceforge.net).

2. Anpassung der Konfiguration

Nachdem die Daten importiert wurden, öffnen Sie die Datei config_vars.inc.php im Verzeich-nis includes. Passen Sie die Zugangsdaten für die MySQL-Datenbank entsprechend an.

3. Rechte setzen

Da die SWF-Dateien von der JPG2SWF-Klasse automatisch aus den JPEGS erstellt werden,müssen Sie dem Script im Verzeichnis pictures/swf Schreibrechte geben.

4. php.ini anpassen (nur Windows)

Das Script order.php verwendet die mail()-Funktion von PHP. Unter Windows können Siediese Funktion nur einsetzen, wenn Sie die php.ini-Datei entsprechend anpassen (liegt imWindows-Vezeichnis).

Ändern Sie folgende Zeilen:

;----8<----

[mail function]

; For Win32 only.SMTP = mailout.ihredomain.de

; For Win32 only.sendmail_from = [email protected]

;----8<----

Anhang 235

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 236: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Sie müssen einen gültigen SMTP-Server und eine gültige Absenderadresse angeben. Neh-men Sie dazu beispielsweise Ihren eigenen bzw. den Ihrer Domain. Sollten Sie diese Anpas-sung nicht machen, wird bei einer Bestellung keine E-Mail versendet.

A.1.2 swFrog (Multiplayer-Applikation)

Diese Applikation befindet sich im Ordner BONUS\swFrog\ auf der CD-ROM.

Abbildung A.2: In dieser Applikation können Sie einen Avatar (einen Frosch ;-) steuern. Die Positionen der einzelnenAvatare werden je nach Verbindung mehrmals pro Sekunde aktualisiert.

Aufbau

Abbildung A.3: Ablaufdiagramm von swFrog

236 Anhang

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 237: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die kommentierten Quelldateien und die Datenbankstruktur finden Sie im angegebenenOrdner auf der CD-ROM.

A.1.3 flashStats – Statistik in Flash

Dieses Beispiel befindet sich im Ordner BONUS\flashStats\ auf der CD-ROM.

Abbildung A.4: Dies ist die (eine mögliche) Ausgabe der flashStats-Applikation.

Dieses Beispiel ist eine Statistik in Flash, die die Versionsvariable des Flash Players in einerDatenbank (MySQL) speichert und die zehn meistbenutzten Flash Player in einemBalkendiagramm ausgibt.

Die Quellen und der Aufbau der Datenbanktabelle (flash_stats.sql) befinden sich im angege-benen Ordner auf der CD-ROM.

Diese Statistik hat keine Reloadsperre, d.h. bei mehrmaligem Aufruf wirddie Version jedes Mal aufs Neue in der Datenbank gespeichert.

A.1.4 fdb – flash database

Abbildung A.5: Das fdb-Logo. Vielen Dank an Marco Stix (www.prografix.at).

Anhang 237

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

·

HINWEIS

Page 238: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Die flash database befindet sich im Ordner BONUS\fdb\ auf der CD-ROM.

Die flash database ist komplett in PHP programmiert – sie ist ein Versuch, eine Datenbankspeziell für Flash zu schaffen, d.h. die Ausgabe der Datenbank geschieht in einem Flash-kompatiblen Format. Zur Abfrage wird eine Sprache verwendet, die an SQL angelehnt ist(SSQL – Simple Structured Query Language).

Die Quellen, Beispiele und Befehlsreferenz (auf Englisch) befinden sich auf der CD-ROMim angegebenen Ordner.

Online zu sehen ist die flash database unter www.flashtool.de/fdb/.

Bugs und Anregungen schicken Sie bitte an [email protected].

Die flash database ist weder stabil oder fertig noch ausgereift oder erprobt.

A.1.5 SWF2PNG – Gemaltes speichern

Dieses Beispiel befindet sich im Ordner BONUS\swf2png\ auf der CD-ROM.

Mit SWF2PNG wird gezeigt, wie man ein Bild, das in Flash gezeichnet wurde, mit Hilfe derGrafikbibliothek von PHP zu einem PNG umformt.

A.1.6 FlaWRITEonline

Der FlaWRITEonline befindet sich im Ordner BONUS\FlaWRITEonline\ auf der CD-ROM.

Mit der FlaWRITEonline-Applikation wird gezeigt, wie man Daten aus Flash mit Hilfe vonPHP in Textdateien speichert und bei Bedarf wieder lädt. Der FlaWRITEonline funktioniertohne Datenbank. Die Quellen, Beispiele und die Befehlsreferenz (auf Englisch) befindensich auf der CD-ROM im angegebenen Ordner.

Als Käufer dieses Buchs dürfen Sie den FlaWRITEonline ohne Registrierungsgebühr auchfür kommerzielle Zwecke einsetzen.

238 Anhang

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 239: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

A.2 Ressourcen

In diesem Anhang finden Sie Links zu den im Buch angesprochenen Programmen, Modu-len und Distributionen.

A.2.1 PHP

• www.php.netSeite der Programmiersprache PHP. Außer dem Handbuch und einer gut dokumentier-ten Online-Referenz findet man hier auch die jeweils aktuellste Version von PHP.

• www.php4win.comPHP-Distribution speziell für Windows mit einigen vorkompilierten Modulen, die nichtin der PHP.net Distribution enthalten sind, so z.B. Ming oder die Grafikbibliothek.

• www.phpedit.comHier gibt es den PHP-Editor PHPEdit.

• www.phpide.deHier gibt es den PHP-Editor PHPCoder (wurde in PHP4EE integriert, ist aber immernoch verfügbar).

• www.maguma.comHier gibt es den PHP-Editor PHP4EE.

A.2.2 Webserver

· www.apache.orgHeimat des Apache-Webservers.

A.2.3 MySQL

· www.mysql.comSeite der MySQL-Datenbank – hier gibt es außer dem MySQL-Handbuch auch die aktu-ellste Version der Datenbank.

· phpmyadmin.sourceforge.netWeit verbreitete Datenbankadministrationssoftware auf PHP-Basis für MySQL.

Anhang 239

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 240: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

A.2.4 Sonstiges

· www.phpgeek.comHier gibt es die PHPTriad-Software. Sie installiert vollautomatisch Apache, PHP,MySQL, Perl und PHPMyAdmin.

· www.swift-tools.comHier kann man den Swift-Generator, das Handbuch dazu und einige andere Tools he-runterladen.

· www.opaque.net/mingAuf dieser Seite ist sowohl der Quellcode für Ming als auch das Ming-PHP-Modul fürLinux erhältlich. Des Weiteren gibt es noch einige Links zu Tutorials über den Umgangmit Ming.

240 Anhang

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 241: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

A.3 PHP-EntwicklungsumgebungenEs gibt einige PHP-Entwicklungsumgebungen, die einem die Arbeit etwas komfortablergestalten (Syntaxhervorhebung, Autovervollständigen etc.). Drei dieser Entwicklungs-umgebungen (es gibt noch ein paar mehr) sind unten etwas näher beschrieben. Im Vorfeldwäre allerdings zu erwähnen, dass keine einzige dieser drei Entwicklungsumgebungenbisher wirklich stabil ist. Alle drei stürzen sehr häufig ab, aber da alle noch in der Ent-wicklung sind und Version 1.0 noch nicht erreicht haben, bleibt zu hoffen, dass diese Bugsnach und nach verschwinden.

A.3.1 Maguma PHP4EE Studio light

Das Maguma PHP4EE Studio light befindet sich im Ordner Software und Module\IDE\PHP4EE\ auf der CD-ROM.

Abbildung A.6: Oberfläche von Maguma PHP4EE

PHP4EE ist eine neue Entwicklung aus der freien IDE PHP-Coder. Die momentan aktuelleVersion ist 0.9.3 rc2. Die Features können sich sehen lassen, allerdings meldet PHP4EE häu-fig Ausnahmefehler und stürzt ab.

Maguma PHP4EE wird unter www.maguma.com in zwei Versionen angeboten: einmal als ei-ne Profi-Variante mit sehr vielen Features (noch nicht erhältlich) und als eine Light-Version.Die Light-Version ist frei. Vielen Dank an Maguma und speziell Tobias Ratschiller, die dieErlaubnis gaben, PHP4EE light auf der CD-ROM beizulegen.

Anhang 241

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 242: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

A.3.2 PHP Coder

PHP Coder befindet sich im Ordner Software und Module\IDE\PHPCoder\ auf der CD-ROM.

Abbildung A.7: Oberfläche von PHP-Coder

Aus dieser IDE hat sich das Maguma PHP4EE Studio (light) entwickelt. PHP Coder befin-det sich immer noch im Prerelease-Stadium und wird nicht mehr aktualisiert. Sie läuft teil-weise stabiler als PHP4EE, und die Features sind beinahe identisch.

Sie erhalten PHP Coder unter www.phpide.de. Vielen Dank an Lorant Szasz-Toth für dieErlaubnis, PHP Coder auf der CD-ROM beilegen zu dürfen.

A.3.3 PHP Edit

PHP Edit befindet sich im Ordner Software und Module\IDE\PHPEdit\ auf der CD-ROM.

Die französische IDE läuft relativ stabil, allerdings ist sie (noch) nicht ganz so leistungs-fähig (von den Features her) wie die beiden anderen IDEs. Man darf aber hoffen.

Die momentan aktuelle Version ist 0.6 (stable) und 0.7.1(beta). PHP Edit wird unterwww.phpedit.com angeboten. Vielen Dank an Sébastien Hordeaux für die Erlaubnis, PHPEdit auf der CD-ROM beilegen zu dürfen.

242 Anhang

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 243: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Abbildung A.8: Oberfläche von PHP Edit

Anhang 243

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 244: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer
Page 245: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

INDEX

$_COOKIE 69$_GET 69$_POST 69$_REQUEST 67$HTTP_GET_VARS 66$HTTP_POST_VARS 66

AActionScript 198array_merge() 67Arrays 28, 57, 60

an PHP übergeben 61assoziative 59join() 29mehrdimensionale 60parsen 33split() 29

BBesucherzähler 120

CCaching 37

verhindern mit Flash 38verhindern mit PHP 39

Cookies 133Passwörter speichern 140Probleme mit 144setzen/löschen 134Sicherheitsaspekte 145

DDatenbanken 76

Interaktion mit 76Distributionen, PHP 15dl() 165DNS 100DNS-Aliasing 100dynamische Inhalte 17

Ffdb 237Feedback-Formular 71file_exists() 125Flags 59flaLittleShop 234Flash

globale Variablen 110passwortgeschützter Bereich 102und SSL 101

flash database 237Flash MX 210

LoadVars() 210LoadVars.contentType 221LoadVars.getBytesLoaded() 214LoadVars.getBytesTotal() 215LoadVars.load() 210LoadVars.loaded 222LoadVars.onLoad() 220LoadVars.send() 211LoadVars.sendAndLoad() 212LoadVars.toString() 213

flash.inc.php 223flash::dePrice() 230flash::drawExpire() 224flash::echoArray() 227flash::echoArrayString() 228flash::echoVar() 226flash::extRequest() 231flash::maskPath() 225flash::removeCarriage() 229flash::requestArray() 225flash::showZero() 230flash::swfHeader() 224Flash-Inhalte, serverseitig erzeugen 163flashStats 237FlaWRITEonline 238

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 246: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

FormatierungArrays 28boolesche Werte 24Einleitung und Schluss der Daten 21korrekte 20Leerzeichen 24relative Pfade 27Struktur der Ausgabe 23URL-Kodierung 25Währung 23

GGenerator Templates 177GET 52getURL() 51

HHeader 39header() 40HTTPS 101

IIP-Adresse, ermitteln 41

Jjoin() 30JPEG, in SWF konvertieren 168JPG2SWF 203

Restriktionen 205JPG2SWF->load() 203JPG2SWF->output() 204JPG2SWF->save() 204

LLAMP 15

Installation 15Leerzeichen 24Lerdorf, Rasmus 14libswf 177, 207loadVariables() 20loadVariablesNum() 19

MMaguma PHP4EE Studio light 241Maskierung 27

Methoden, GET, POST 52Ming 164

mit Flash 4 165-Modul 164Online-Hilfe 166

Multiplayer-Applikation 236MySQL 76

Ressourcen 239

Oob_end_flush() 219ob_get_length() 219ob_start() 218onClipEvent(data) 44Onlineshop 234output buffering 218

Pparse_str() 63Parser 33PHP 14

-Entwicklungsumgebungen 241Installation 15Ressourcen 239SAFE MODE 16Session-Funktionen 110und Swift-Generator 177Verarbeitung übergebener Daten 65

PHP Coder 242PHP Edit 242POST 53preg_split() 58Proxy 39

-Scripting 100

SSAFE MODE 50Scripts, von anderen Servern 100session_destroy() 119session_register() 116session_start() 114Sessions, mit Flash und PHP 107set_time_limit() 49setcookie() 141Sonderzeichen, ASCII-Werte 27

246 Index

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 247: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Sprachauswahl, automatische mit PHP 128SQL (Structured Query Language) 76SSL, mit Flash 101Statistik in Flash 237Strings, Manipulation 69strrev() 70SWF (ShockWave Flash) 19SWF2PNG 238swFrog 236swiffSQL 77

arbeiten mit 84close() 83query() 81setPermissions() 80Zugriff beschränken 79

swiffSQL() 79Swift-Generator 177swiPHP 181swiPHP->addReferer() 189swiPHP->defineDbQuery() 185swiPHP->defineFont() 186swiPHP->defineImage() 187swiPHP->defineMovieClip() 188swiPHP->defineSound() 186swiPHP->defineTemplate() 195swiPHP->defineText() 190swiPHP->defineTextByFile() 191swiPHP->defineTextSection() 191swiPHP->defineTtfPath() 189swiPHP->displayCopyrights() 182swiPHP->mysqlConn() 183swiPHP->odbcConn() 184swiPHP->output() 195swiPHP->save() 196swiPHP->setFrameRate() 190swiPHP->setTempDir() 183swiPHP->substText() 192swiPHP->substTextField() 194swiPHP->testRun() 182

swiPHP-Wrapper 180SWT-Dateien

Dumps 179erstellen 178

TTags 35

UÜbergabe, <OBJECT> und <EMBED>-Tag

35urlencode() 25

VVariablen 55

Versenden verhindern 55von Flash an PHP übergeben 50von PHP in Flash laden 18

Verzögerungen 43if-Abfrage 45onClipEvent(data) 44set_time_limit() 49

WWAMP 15

Installation 15Wrapper 180

XXML 148

-Daten von Flash nach PHP 160-Daten von PHP nach Flash 154

XML.docTypeDecl 153XML.load() 148XML.loaded 152XML.onLoad() 151XML.send() 149XML.sendAndLoad() 150

Index 247

DYNAMISCHE WEBSEITEN MIT FLASH UND PHP

Page 248: Joscha Feth Dynamische Webseiten mit Flash und PHPthe-eye.eu/public/Site-Dumps/r0bin0705_8fzydz_share... · 2017. 10. 5. · 1.1 Über den Autor Joscha Falco Feth ist Programmierer

Copyright

Daten, Texte, Design und Grafiken dieses eBooks, sowie die eventuell angebotenen eBook-Zusatzdaten sind urheberrechtlich geschützt.

Dieses eBook stellen wir lediglich als Einzelplatz-Lizenz zur Verfügung! Jede andere Verwendung dieses eBooks und zugehöriger Materialien und

Informationen, einschliesslich der Reproduktion, der Weitergabe, des Weitervertriebs, der Plazierung auf anderen Websites, der Veränderung und der Veröffentlichung bedarf

der schriftlichen Genehmigung des Verlags.

Bei Fragen zu diesem Thema wenden Sie sich bitte an: mailto:[email protected]

Zusatzdaten Möglicherweise liegt dem gedruckten Buch eine CD-ROM mit Zusatzdaten bei. Die Zurverfügungstellung dieser Daten auf der Website ist eine freiwillige Leistung des

Verlags. Der Rechtsweg ist ausgeschlossen.

Hinweis Dieses und andere eBooks können Sie rund um die Uhr

und legal auf unserer Website

(http://www.informit.de)

herunterladen