Flash-Filme mit PHP erzeugen
Artikel erschienen in Swiss IT Magazine 2001/29
Macromedia Flash hat sich zu einem Quasi-Standard in der Multimedialandschaft entwickelt. PHP hingegen gilt als der Standard für komplexe Datenbankanwendungen im Internet. Wer beides kombinieren wollte, um eine Interaktion zwischen komplexeren Datenbankanwendungen in PHP und Flash-Animationen zu erreichen, war bis vor kurzem immer auf ActionScript oder den Datenaustausch per CGI oder Textdateien angewiesen. Inzwischen ist es kein Problem, auch direkt in PHP Flash-Filme zu erzeugen und diese unmittelbar an den Webbrowser weiterzureichen. Damit können jetzt auch komplexe Datenbankanwendungen relativ bequem mit Flash-Animationen versehen werden.
Die dazu benötigte Bibliothek heisst ming und kann unter www.opaque.net/ming derzeit in der Version 0.1.1 heruntergeladen werden. Es handelt sich hierbei um den Quellcode für eine umfassende SWF-Library, zu der unter anderem auch ein Wrapper für PHP gehört.
Für erste Schritte mit ming gibt es vom Autor einige leicht verständliche Beispiele und ein Tutorial auf der oben genannten Website. Die hier gezeigte Auswahl von Beispielen soll den Einstieg erleichtern und die Möglichkeiten der Tools aufzeigen.
Das folgende Beispiel zeigt, wie man eine Reihe von Rechtecken erzeugen und diese unabhängig animieren kann. Dabei wird die Random-Funktion von PHP verwendet, um jedes Element um einen bestimmten Wert zu bewegen. Es entsteht eine Art "Bienenstock-Effekt", bei dem die einzelnen "Bienen" in Form der Rechtecke umherzittern. Um die Interaktivität dieser Lösung zu betonen, kann der Anwender selbst entscheiden, wie viele Rechtecke er erzeugen möchte und wie weit diese von ihrer Grundstellung maximal bewegt werden sollen. Ausserdem wird die Länge des Films, also die Anzahl der Frames, festgelegt.
Beim ersten Aufruf des Scripts wird die Eingabemaske gezeigt. Das Script erkennt dies daran, dass die Variable $fld_count noch nicht gesetzt ist. Es handelt sich dabei um eines der Eingabefelder in dem Formular. Wurde das Eingabefeld ausgefüllt, so liefert die Funktion isset($fld_count) den Wert "true", was die Erzeugung des Flash-Films auslöst:
Konnte das Modul geladen werden, läuft das Script ohne Fehlermeldung weiter. Andernfalls werden einige Folgefehler erscheinen, die wegen der fehlenden Bibliothek auftreten. Die Einzelheiten zum Laden der Bibliothek mit der Funktion dl() entnehmen Sie dem Kasten "Installationsprozess" auf der folgenden Seite.
Diese Zeilen sorgen für den richtigen Hintergrund, die Frame-Rate und die korrekte Skalierung. Wichtig ist die erste Zeile, womit ein neues Objekt der Klasse SWFMovie erstellt wird, durch den der Flash-Film weiter erzeugt wird.
Die Funktion draw_rect() ist eine selbst definierte Funktion, die ein Standardrechteck mit einer Kantenlänge von 40 Einheiten zeichnet. Die Funktion liefert eine Variable vom Typ SWFShape zurück, wie später noch ausgeführt wird.
Eine praktische Eigenschaft von Flash besteht darin, dass sich bereits existierende Filme in einen Film laden lassen. Auf diese Weise kann man bestehende Elemente auch dann in eigenen Filmen weiterverwenden, wenn man die Originaldatei im FLA-Format nicht mehr zur Verfügung hat. Bedingung ist hierbei, dass der Film vom Autor nicht gegen Laden geschützt wurde, womit das Nachladen in anderen Filmen also erlaubt wird.
Diese Methode kommt hier sehr gelegen, denn das Erzeugen der Filme von Grund auf ist mit PHP doch etwas mühsam. Wer also sowieso schon das Autorenwerkzeug von Macromedia oder eines der anderen praktischen Tools von diversen Drittanbietern besitzt, kann sich damit bereits seine benötigten Filmsequenzen, Logos oder Schrifteffekte als SWF-Datei vorbereiten. Später werden sie dann nur noch in PHP über die ming-Bibliothek zusammengefügt. Auch hier bietet sich natürlich auch wieder die Anbindung an eine durch PHP unterstützte Datenbank an.
Das Laden eines externen Flash-Films geschieht mit ming ebenso wie im Flash-Autorentool, nämlich mit LoadMovie(). In Flash gibt es zwei Arten, die Filme zu laden, und ebenso verhält es sich bei ming:
1.
Die Animation wird in eine Filmebene geladen, die durch eine Ziffer von 1 bis 99 gekennzeichnet ist. Dabei wird der geladene Film fest über den Hauptfilm plaziert und kann in der Position nicht verändert werden.
2.
Der Film wird in eine bestehende Filmsequenz geladen. Dadurch ersetzt der geladene Film die bestehende Filmsequenz. Diese kann durch Manipulation der X- und Y-Koordinaten beliebig im Hauptfilm plaziert werden.
Die zweite Methode ist die flexiblere, weshalb wir ausschliesslich darauf eingehen.
Obwohl die Verwendung der ming-Bibliothek eine sehr schöne Sache ist, erschwert sie doch das Debuggen der Anwendung, zumindest dann, wenn der Flash-Film direkt ausgegeben werden soll. Die Print- und Echo-Anweisungen aus PHP werden nämlich in dem Flash-Film nicht angezeigt, damit entfällt das bequeme Anzeigen von Zwischenwerten innerhalb der Anwendung. Glücklicherweise kann zumindest während der Phase der Fehlersuche eine Abhilfe geschaffen werden. Zunächst müssen die Filme nicht direkt an den Browser abgeschickt werden. Die Methode save() kann den fertigen Flash-Film auch als SWF-Datei auf dem Server ablegen. Damit steht dann das Script wieder mit allen HTML-Optionen zu Verfügung.
Wer dennoch den Film auch während der Fehlersuche direkt ausgeben will, kann Zwischenergebnisse auch in eine Logdatei schreiben und diese nach dem Ablauf des Scripts prüfen.