6. Lecke: Kliensoldali adatok feldolgozása, állapotkezelés
6.4 Fájlok feltöltése
6.4.2 Feltöltött állományok kezelése
A kérésekkel érkező fájlokat ideiglenesen, véletlenszerűen generált egyedi névvel a php.ini-ben beállítható mappába (upload_tmp_dir) teszi a PHP. A fájlok leíró adatai a $_FILES asszociatív tömbbe kerülnek, aminek elemei az űrlap FILE típusú INPUT tagjeinek nevei lesznek. Az elemek szintén asszocia-tív tömbök, a fájl eredeti neve a ["name"], a mérete a ["size"], típusá-nak MIME-kódja a ["type"], az ideiglenes állomány jelenlegi útvonala pedig a [tmp_name] tömbelemben található. Az ["error"] elem a feltöltés hi-bakódját tartalmazza. A hibás feltöltést 0-tól eltérő érték jelezi.
Ha például az állományok mérete meghaladja a beállított limitet, ak-kor a hibakód 2.
126 Kliensoldali adatok feldolgozása, állapotkezelés
49. ábra Két feltöltött fájl adatai a $_FILES tömbben
A feltöltött fájlt a [tmp_name] tömbelemben található útvonalról kell a megfelelő helyre áthelyeznie a feldolgozó programnak.
50. ábra Feltöltést kezelő szkript
A művelethez a PHP move_uploaded_file(forrás,cél) függvé-nyét használhatjuk. Az első paraméter az ideiglenes fájl teljes útvonala, a második a végleges állomány helye és neve. Utóbbi megadható abszo-lút és – a szkript mappájából induló – relatív útvonallal is.
A file_upload.php 10. sorában megvizsgáljuk, van-e feltöltött fájl, majd a
$destdir változóba tesszük a feltöltött fájlok végleges tárolására kiválasztott mappa nevét.
A 12. sorban kezdődő ciklus sorra veszi a feltöltött fájlokat. A $files cik-lusváltozóba minden egyes iterációban a soron következő fájl adatai kerülnek.
Ha az adott állomány feltöltésekor nem történt hiba (13. sor) akkor az $src változóba az ideiglenes útvonalat (14. sor), a $dest változóba pedig a célútvo-nalat tesszük (15. sor). A 16. sorban, move_upload_file() függvény segít-ségével kerül a helyére a fájl.
6.5 ÖSSZEFOGLALÁS, KÉRDÉSEK
6.5.1 Összefoglalás
Tananyagunk 6. leckéje a felhasználótól érkező adatok fogadásáról, feldol-gozásáról, és többállapotú alkalmazások állapotmegőrzéséről szólt.
A leckében megtanultuk, hogy a felhasználói oldalon a HTML FORM tagjével és az abba ágyazott elemekkel létrehozott űrlapokon van lehetőség. Az űrlap adatai név=érték formában kerülnek a szerverre. GET metódus esetén az URL-címhez kapcsolva, POST esetén pedig a kéréstestbe ágyazva.
A feltöltött adatokat FORM tag ACTION attribútumában jelzett szkript kapja meg. Az értékek a $_GET, illetve a $_POST asszociatív tömbökből olvas-hatók ki, és használolvas-hatók fel a szerver oldali alkalmazásban. Nagyon fontos, hogy a feltöltött adatokat mindig ellenőrizzük, és csak akkor használjuk fel, ha azok megfelelnek a programunk követelményeinek.
Ha olyan alkalmazást készítünk, ami több állapoton keresztül jut el a fela-dat megoldásához, akkor valamilyen technikával gondoskodnunk kell az utolsó állapot adatainak megőrzéséről. Erre a kliensnek küldött weblapok forrásában tárolódó rejtett INPUT-mezők, a cookie-k illetve a munkamenet kezelés ad lehe-tőséget.
A leghatékonyabb a sessionök kezelése, mert az állapotadatok biztonságo-san tárolódnak a szerveren, szerver oldali hozzáférés egyszerű, és bonyolult adatszerkezetek tárolására is van lehetőség. Ennek ellenére a három tanult technikát vegyesen szokták alkalmazni a webprogramozók.
6.5.2 Önellenőrző kérdések
1. Mi a különbség az űrlapadatok POST és a GET metódussal történő feltöltése között?
A GET metódus esetén az URL-cím végéhez illesztve, a POST esetén pedig a kéréstestbe ágyazva jutnak a szerverre az adatok. A POST metódussal feltöltött ér-tékek rejtve maradnak a felhasználó előtt.
128 Kliensoldali adatok feldolgozása, állapotkezelés
2. Miért fontos a feltöltött adatok ellenőrzése?
Azért mert a felhasználó által megadott hibás adatok kezeletlen állapotot idézhetnek elő a szerver oldali al-kalmazásban. Ez jó esetben csak hibaüzenetet, rossz esetben akár súlyos adatvesztést is okozhatnak.
3. Hogyan fér hozzá a szerver oldalon futó program a felhasználói felü-letről feltöltött adatokhoz?
A POST metódussal feltöltött adatok a $_POST, a GET metódussal küldött változók pedig a $_GET asszociatív tömbökön keresztül válnak elérhetővé.
4. Hogyan küldhet cookie-ként tárolódó adatokat a böngészőnek?
A setcookie(név, érték, lejárat, útvonal, domain) függ-vénnyel.
5. Mi a sessionök és a cookie-k használata közötti alapvető különbség?
Az, hogy a cookie adatok a kliensoldalon, a felhasználó számítógépén lévő szövegfájlokban vannak, és a böngé-sző kezeli őket, a munkamenetek pedig a szerveren tá-rolódnak. A munkamenetet leíró adatok általában mun-kamenetfájlba kerülnek, de akár adatbázisban is tárolódhatnak.
7. LECKE: ALPROGRAMOK ÉS
PARAMÉTERÁTADÁS, BEÉPÍTETT FÜGGVÉNYEK
7.1 CÉLKITŰZÉSEK ÉS KOMPETENCIÁK
Az előző fejezetben láthattuk, hogy még egy egyszerű feladat megoldása is jelentős méretű programkódot eredményez. Elő kell állítani a kliensoldali felü-letet, be kell olvasni az adatokat, el kell juttatni azokat a szerveroldalra, ellenő-rizni kell a bevitelt, föl kell dolgozni a változókban tárolt értékeket, elő kell állí-tani a kimenetet, azaz az új állapotnak megfelelő felhasználói felületet, és gondoskodni kell az utolsó állapot rögzítéséről is.
A bonyolultabb feladatok megoldásakor a kód jóval nagyobb lesz. A méret növekedésével csökken az áttekinthetőség és egyre nehezebbé válik a program utólagos megváltoztatása, az esetleges hibák javítása.
A bonyolult és áttekinthetetlen programkód kialakulását alapos tervező-munkával lehet megelőzni. Nagyobb programok esetén a teljes, összetett fel-adatot részfeladatokra bontjuk, és azok megoldására külön-külön programkó-dokat, úgynevezett alprogramokat készítünk. A teljes feladatot a főprogrammal oldjuk meg. Amikor a főprogram kódjában egy részfeladat elvégzésére van szükség, akkor egyszerűen meghívjuk, elindítjuk a megfelelő alprogramot. A főprogram ilyenkor csak az alprogram befejeződése után, de az attól visszaka-pott adatok felhasználásával folytatódik.
Mai leckénkben a PHP alprogramjaival, az úgynevezett függvényekkel fog-lalkozunk.
A lecke végére tudni fogja, hogyan hozhat létre saját függvényeket.
Megismeri a formális és aktuális paraméterlista fogalmát.
Megérti a globális és a lokális változók jelentőségét.
Tudni fogja, mit jelent és hogyan hozható létre az érték és a cím para-méter.
Képes lesz alapértelmezett paraméterek kialakítására.
Tudni fogja, hogyan hívhat meg függvényeket, és hogyan adhat vissza értékeket a főprogramnak.
130 Alprogramok és paraméterátadás, beépített függvények