Olen kahdessa edellisessä PHP-tutoriaalissani käynyt läpi
thumbnails-kuvien
sekä
PDF-tiedostojen generoimisen
omalle palvelimelle ja antanut ohjeita generaattorien käskyttämiseksi nettiselaimen kautta, joko XHTML-koodista tai
nettisivuille sijoitettavasta Flash/AS3-komponentista käsin. Tässä kolmannessa osassa opastan hieman alkuun
oman swf-generaattorin tekemisessä omille nettisivuille.
Tämän tutoriaalin tarkoituksena on opastaa kuinka tehdä yksinkertainen SWF-generaattori, joka pystyy
käyttäjän antaman kuvan ja tekstin perusteella generoimaan yksinkertaisen SWF-komponentin.
Näytän aluksi tutoriaalin tuloksena tehtävän SWF-generaattorin. Sitten punnitsen eri vaihtoehtoja SWF-generaattorin
toteuttamiseksi omalle palvelintilalle. Lopuksi käyn läpi generaattorin toteuttamisen SWFTOOLS-ohjelmien avulla.
"VALMIS" SWF-generaattori
Tässä alla on yksinkertainen SWF-generaattori joka palvelimelle lähettämäsi kuvan ja antamasi tekstin perusteella tekee
SWFTOOLS:iin kuuluvan swfc-kääntäjän avulla SWF-tiedoston ja avaa lataus-dialogin, jolla kyseisen komponentin voi
ladata kotikoneelle.
Valitettavasti jouduin tietoturvan varmistamiseksi poistamaan PHP-skriptejä käyttäviä demoja nettisivuiltani.
Poistin samalla tämänkin demon.
Erilaisia SWF-generaattorivaihtoehtoja
Aivan kuten thumbnails-kuvien (GD-kirjasto) ja PDF-tiedostojen (FPDF-kirjasto) tapauksessa jälleen
tarvitaan SWF-tiedoston generoimiseksi ulkopuolinen laajennus tavallisen PHP-kielen lisäksi.
Itse olen tehnyt Flash-toteutuksiani Adobe Professional CS4 kehitysohjelmalla, joka yhdistää tehokkaalla
tavalla graafisen suunnittelun ja animaation työkaluja (layerit, aikajana) koodaamistyökaluihin.
Miettiessäni SWF-generaattorin tekemistä oli kuitenkin ilmeistä, ettei tuota työkalua voinut sellaisenaan käyttää
kotikoneeni sijaan ulkoisella palvelimella, jolle generaattori siis olisi asennettava, jotta sitä voitaisiin
käyttää netistä käsin. Lisäksi CS4 on aika kallis hankinta, joten se ei sellaisenaan sovellu tavallisen nettiharrastelijan
kotisivuprojektien toteuttamiseen.
Päädyinkin miettimään erilaisia ratkaisuja SWF-generaattorin toteuttamiseksi:
RATKAISU 1 (FLEX-kääntäjä, vaatii JAVA-tuen palvelimelta):
Adobekin tarjoaa ilmaisen ratkaisun oman SWF-generaattorin tekemiseksi.
Ja tuo ratkaisu on koodaajien enemmän suosima Adobe Flex.
Adobe Flex -ratkaisujen tekemiseksi Adobe tarjoaa maksullista
Flex Builder 3
, josta löytyy Adoben sivuilta myös kokeiltaksi (60 päivää)
Trial-versio
, jolla voi halutessaan tutustua tuotteeseen ennen kuin ottaa sen varsinaisesti käyttöön.
Oman SWF-generaattorin tekemiseksi ei kuitenkaan välttämättä tarvitse ostaa Flex Builderia, vaan
Adobe tarjoaa nettisivuillaan myös ilmaisesti ladattavaksi
Adobe Flex 3.4 SDK
:n, jonka avulla pystyy toteuttamaan kotisivuilleen SWF-generaattorin.
Oman SWF-generaattorin idea kaikessa yksinkertaisuusessaan on seuraava:
1) Asennetaan Adobe Flex 3.4 ja etenkin tuohon pakettiin kuuluva
mxmlc-kääntäjä
nettisivujen palvelimelle
niin että kääntäjää voi käyttää normaaleilla systeemikomennoilla. Jos nettisivujen kehitys tapahtuu omalla
kotikoneella niin tuon paketin voi myös asettaa omalle koneelle, jolloin kehitystyön voi suorittaa kotikoneella
ennen sivujen siirtämistä palvelimelle.
2) Tehdään käyttäjän antamaa syötetettä (ladattavat kuvat ja tekstit) varten lomake joko XHTML:llä tai Flashillä.
3) Yhdistetään Lomakkeen käsittely PHP-skripteihin.
4) Generoidaan PHP-skripteillä, käyttäjän lomakkeella antaman syötteen perusteella, käyttäjän syötettä vastaava
mxml-tiedosto, joka syötetään SWF-tiedoston generoimiseksi mxmlc-kääntäjälle.
5) Avataan lataus-dialogi SWF-tiedoston lataamiseksi kotikoneelle.
Etuna tässä ratkaisussa on, että mxmlc-kääntäjän tekijä on itse Adobe, joten tämän ratkaisun avulla
pystyy maksimaalisesti hyödyntämään Flashin tarjoaman toiminnallisuuden ja koodaajille tarjotun tuen.
Huonoja puolia on JAVA-tuen tarpeellisuus ja SWF-tiedostojen generoinnissa tarvittavien MXML-tiedostojen
monimutkaisuus.
RATKAISU 2 (php_ming-kirjaston käyttö, ei vaadi FLEX-komponentteja,
mutta vaatii PHP-moduulin asentamisen admin-oikeuksin):
Tässä SWF-tiedostojen generointivaihtoehdossa rakennetaan SWF-generaattori
Ming-kirjaston
ja sen tarjoaman PHP-ohjelmointirajapinnan varaan.
1) Ensimmäinen tehtävä on asentaa ming-kirjasto palvelimelle. Ming kirjaston voi ladata projektin
sourceforge-osoitteesta
.
2) Ming-kirjaston asentamiseksi Linux/Unix-ympäristöön tarvitsee asentaa se itse joko rpm-tiedostosta tai
kääntää so-tiedosto palvelimella itse.
Kokeilin testausmielessä kääntämistä omassa palvelintilassani komennoilla:
3) Tämä vaihe onkin sitten monille se vaikein (kuten itsellenikin). Vaikka saisikin itse käännettyä
php_ming.so-kirjaston omassa palvelintilassaan, ei silti pysty ilman admin-oikeuksia asentamaan tuota
kirjastotiedostoa PHP-tulkin käyttämään ja PHP-alustustiedoston php.ini rivillä annettavaa extension_dir-hakemistoon.
Alla ote php.ini tiedostosta Windows-ympäristössä:
Jos Asennusmahdollisuus on olemassa niin silloin voit itse kopioida tuo kääntämäsi php_ming.so-tiedoston
tuohon extension_dir-hakemistoon. Lisäksi php.ini-tiedostoosi kannattaa lisätä rivi:
Jos et halua lisätä tuota extension-riviä php.ini-tiedostoon niin joudut kirjoittamaan jokaiseen
php_ming-kirjastoa käyttävään PHP-tiedostoon dl-funktion kutsun:
dl-funktion käyttäminen ei kuitenkaan ole järkevää, sillä se on tulevaisuudessa jäämässä pois PHP-kielestä,
joten on ehdottomasti suositeltavaa muokata mieluummin php.ini-tiedostoa.
Käytännössä php_ming-kirjaston käyttöönotto siis edellyttää, että saa nettitilanpalveluntarjoajan asentamaan tuon
php_ming-kirjaston nettisivujen palvelimelle. Jos on oikein kiinnostunut kyseisestä ratkaisusta niin tuon luulisi
monessa tapauksessa onnistuvan ainakin jos on valmis hieman maksamaan kyseisestä asennuksesta.
RATKAISU 3 (SWFTOOLS-ohjelmien asentaminen omaan palvelintilaan, onnistuu ilman admin-apua):
1) Ensin on syytä tutustua SWFTOOLS-ohjelmapakettiin nettisivuilla
http://www.swftools.org/
.
Tarkoitukseni tässä tutoriaalissa on tehdä yksinkertainen Flash-komponenttigeneraattori, jossa
käyttäjä lähettää jpg-kuvan ja kirjoittamansa tekstin joista palvelimella generoidaan käyttäjän ladattavaksi
annettava SWF-tiedosto. SWFTOOLS-ohjelmista tähän tarkoitukseen soveltuu erinomaisesti swfc-kääntäjä, jonka
käyttämien .sc-tiedostojen syntaksiin voi tutustua osoitteessa
http://www.swftools.org/swfc/swfc.html
. Kuten tuosta tutoriaalista voi havaita pystyy swfc-kääntäjän käyttämällä skriptikielellä tehdä
pienellä vaivalla varsin monimutkaisiakin SWF-komponentteja.
Lisäksi swftools-ohjelmiin kuuluu Action Script 3 -kääntäjä
as3compile
, joka mainostaa olevansa Abode Flex -yhteensopiva.
2) Asennetaan seuraavaksi SWFTOOLS-paketti omaan palvelintilaamme. Paketin voi ladata osoitteesta
http://www.swftools.org/download.html
. Itse asensin tuon paketin swftools-0.9.0.tar.gz.
3) Ladatun paketin voi siirtää ja purkaa palvelimella johonkin tilapäishakemistoon esim. tmp.
Tärkeää tuossa komentosarjassa on antaa oikea asennushakemisto parametrilla --prefix.
Yllä olevilla komennoilla olemme siis asentaneet palvelimellemme ajettavan SWFTOOLS-ohjelmapaketin
hakemistoon /home/talaakso/shared/bin sekä tuon ohjelman ajamiseen tarvittavat kirjastotiedostot
hakemistoon /home/talaakso/shared/lib.
Lisäohjeita asenukseen voi tarvittaessa lukea pakettiin kuuluvasta tiedostosta INSTALL.
Swftools-pakettiin kuuluvan swfc-kääntäjän pitäisi nyt toimia Unixin/Linuxin komentoriviltä ajettuna komennolla:
Minulla tuo toimi heti, mutta jos swfc-kääntäjä ei löydä tarvitsemiaan kirjastoja niin saatat joutua lisäämään
Linux/Unix-komentotulkkisi käynnistystiedostoon kirjastohakemiston osoitteen.
Esim. BASH-komentotulkille voi
lisätä johonkin kotihakemistosi käynnistystiedostostoista (.bash_profile tai .bashrc) rivit:
Flash SWF-generaattori
Kun olemme vakuuttuneet siitä, että swfc-kääntäjä todella toimii omassa palvelinympäristössämme
tehdään vielä esittely mielessä yksinkertainen Flash-komponentista toimiva SWF-generaattori, jolla
käyttäjä voi ladata kuvan ja antaa tekstikenttään tekstin, jotka sitten käännetään toimivaksi SWF-tiedostoksi.
Tarkoitukseni ei ole tässä antaa mitään valmiiksi kehitettyä SWF-generaattoria, vaan opastaa alkuun
SWF-generaattorien kehittelyssä, jokainen toteuttakoon omanlaisiansa ratkaisuja parhaaksi katsomillaan tekniikoilla.
Käydään SWF-generaattorin tekeminen nyt läpi vaihe vaiheelta:
1) SWF-komponenteissa käytetään hyväksi erikoisfontteja, joita ei välttämättä löydy käyttäjän koneelta.
SWFTOOLS-ohjelmien avulla voi kuitenkin joko käyttää suoraan palvelimelleen tallentamiaan ttf-fontteja tai
sitten kääntää ttf-fontit SWFTOOLS-pakettiin kuuluvan apuohjelman
font2swf
avulla swf-tiedostoiksi.
Käännetään malliksi arial-fontti SWF-tiedostoksi:
a) Normaalisti Windows XP-koneella fontit sijaitsevat hakemistossa C:\windows\fonts, joten siirretään
aluksi sftp-ohjelmalla fonttitiedosto arial.ttf tuosta hakemistosta omaan palvelintilaamme hakemistoon
/home/talaakso/shared/fonts/ttf
b) Käännetään TTF-tiedosto SWF-tiedostoksi:
2) Tehdään seuraavaksi Flash-komponintistamme ajettavat PHP-skriptit, jotka generoivat
.sc-tiedoston palvelimellemme. Tässä yhteydessä kannattaa ensin käydä läpi
tämä
sc-tiedosto tutoriaali (huom! Tutoriaaliin kuuluu useita sivuja).
Kasataan sc-tiedoston rakentavat apufunktiot alla olevaan tiedostoon swftools_functions.php:
Tehdään sitten tiedostoon swftools_generate_swf.php SWF-tiedoston palvelimellemme generoiva toiminto:
Oleellisia asioita yllä olevassa PHP-skriptissä ovat
a) SWF-tiedoston generoimiseksi tarvittavan .sc-tiedoston sisältö lisätään string-muuttujaan $xml_string.
b) Muuttujan $xml_string sisältö tallennetaan palvelimelle XML-tiedostoon, joka sitten syötetään
swfc-kääntäjälle SWF-tiedoston generoimiseksi.
c) swfc-kääntäjää kutsutaan PHP-funktiolla exec.
Tuolla yllä olevalla PHP-skriptillä (tallennettuna tiedostoon swftools_generate_swf.php) yhdessä funktiotiedoston
swftools_functions.php kanssa pystyy siis generoimaan palvelimelleen SWF-tiedoston.
Tarvitsemme kuitenkin vielä toisen PHP-skriptin käyttäjän lähettämän kuvan tallentamiseksi palvelimellemme:
Oleellisia asioita yllä olevassa PHP-skriptissä ovat
a) Skriptissä käytetään apufunktiota createOneThumb käyttäjän antaman kuvan muuttamiseksi
Flash-komponenttiin soveltuvaan kokoon. Tämä thumbnails-kuvien tekemistekniikka on selostettu
tässä oppaassani
.
b) Tiedostot välitetään PHP-skripteihin XHTML:stä tai Flash-komponentista $_FILES-taulukossa.
c) PHP-skripteissä kannattaa yleensä tehdä käyttäjän antamalle syötteelle moninaisia tarkastuksia.
Esim.
Tässä skriptissä on tarkeistettu lähetetyn tiedoston koko (vain alle 0.5 MB sallittu)
Lähetetyn kuvatiedoston tyyppi (vain JPG-kuvat sallittuja):
Käyttäjän antama syöte on siis hyvä tarkistaa ENNEN kuin skripti suorittaa toimintonsa.
Jos käyttäjän antama syöte on viallista skriptin on syytä i) tulostaa virhekoodi ja
ii) keskeyttää skriptin suoritus vaikkapa die-funktion kutsulla.
d) Palvelimelle lähetetyn tiedoston tallentaminen onnistuu PHP-skriptissä helposti funktiolla
move_uploaded_file:
3) Yllä tekemiemme kolmen PHP-tiedoston käyttämiseksi minun tarvitsi koodata
alle laittamani AS3-koodi pääaikajanan frameen 1. Lisäksi lisäsin tarvittavat napit,
tekstikentät ja MovieClip-objektit oikeilla instance nameilla CS4:n
graafisen käyttöliittymän kautta.
Oleellisia asioita yllä olevassa AS3-koodissa ovat
1) Todella kätevä tapa toteuttaa Tooltipsit AS3/Flashiin löytyy
tästä
.
2) FileReference-luokkaa voidaan käyttää sekä download että upload -dialogien avaamiseen.
Tapahtumankäsittelijöidensä kautta FileReference-luokka huolehtii myös tarvittavien PHP-skriptien
ajamisesta palvelimella.
Tämä
Flash Player 10:een liittyvä asia on aina syytä pitää mielessä FileReference-luokkaa käytettäessä.
3) Yksinkertaisten Flash-animaatioiden tekemiseen voi käyttää vaikkapa
TweenLitea
4) Kommunikointi Flashin/AS3:n ja palvelimella sijaitsevien tiedostojen (JPG, XML, PHP) hoidetaan yleensä
AS3:lla luokkien URLLoader, URLRequest ja URLVariables avulla. Samaa rajapintaa voi siis käyttää varsin
erityyppisille tapauksille (kuvanlataaminen, PHP-skriptin suorittaminen).
5) Eräs tapa toteuttaa drag-and-drop -ominaisuus MovieClip-ikkunalle:
Olen yllä olevassa tutoriaalissani esitellyt kolme varteenotettavaa tapaa SWF-generaattorin toteuttamiseksi
omalle palvelimelle. Näistä SWFTOOLS-ohjelmien asentaminen omaan palvelintilaan onnistuu myös ilman admin-oikeuksia.
Tein myös esimerkin vuoksi oman yksinkertaisen Flash-pohjaisen SWF-generaattorin.
On kuitenkin syytä huomata, että SWFTOOLS:in avulla pystyy toteuttamaan oman SWF-generaattorin myös
pelkästään XHTML/JavaScript/PHP -pohjalta täysin ilmaisohjelmienkin avulla. Eli ratkaisu sopii myös
harrastelijoille. Lisäksi sc-tiedostojen oma skriptikieli on syntaksiltaan erittäin kompakti, joten se
soveltuu myös pienempiin projekteihin.
Toisaalta sc-tiedostojen skriptikielen kompaktius ja erillinen Flex-yhteensopiva (sekä pakettiin kuuluvat
muut työkaluohjelmat) as3compile-kääntäjä houkuttelevat käyttämään SWFTOOLS-pakettia myös ammattimaisissa
projekteissa...
Takaisin PHP-ohjelmoinnin etusivulle