Mintapélda
A
Képgaléria című oldalon már láttuk, hogyan lehet egy mappa képeit
galéria jelleggel megjeleníteni. Ezúttal pedig azt fogjuk megnézni, miként lehet
- egy már meglévő galériába újabb képet feltölteni;
- a galériában szereplő képeket törölni.
Kliensoldali elvárások:
Kép - és egyáltalán bármilyen fájl - feltöltése csak és kizárólag olyan űrlapról lehetséges,
melynek odaadtuk paraméterül az
enctype='multipart/form-data'
kifejezést. Fontos odafigyelni rá, hogy ez csakis
method='post'
típusú adattovábbítással lehetséges.
Szerveroldali feldolgozás:
A feltöltés eredményeként a szerveren fájl egy ideiglenes mappába fog kerülni, melynek adatait a
$_FILES
szuperglobális tömbbel fogjuk tudni elérni. A feltöltött fájlt innen kell majd egy PHP programmal a végleges
helyére mozgatni.
Lássunk egy konkrét mintát!
Megnyitás önálló ablakban
Önálló ablakban történő megnyitás után megtekintheti (pl. a Ctrl+U billentyűkombinációval) a megvalósítás forráskódját.
A galéria forráskódjában is felfedezhető módon a feltöltésért és a képtörlésért egy-egy önálló PHP program felel.
Mindkettőhöz tartozik egy saját form, és ennek megfelelően egy saját
Submit nyomógomb. A két program forráskódja
az alábbi kis képekre kattintva érhető el:
Láthatóan a képfeltöltés "lelke" a
move_uploaded_file()
függvény, míg a képtörlést az
unlink()
függvény valósítja meg. Programjainkat ezek köré a függvények köré építettük fel.
A forráskódok tartalmát alaposabban tanulmányozva felmerülhetnek bennünk olyan kérdések, mint amiket az alábbiakban olvashatunk.
Miért nevezzük át feltöltés után a képeket, miért nem tartjuk meg - legalább részben - az eredeti nevet?
Ha a feltöltött képek eredeti neve ékezetes, vagy speciális karaktereket tartalmazna, akkor elképzelhető, hogy
ezeket a képeket a nevük miatt nem tudnánk a webcímekben kezelni, és így a képek nem jelennének meg a böngészőben.
Megtehetnénk ugyan, hogy a képek nevének speciális karaktereit feltöltéskor alapkarakterekre cseréljük, de ekkor
meglehetősen körültekintően kellene eljárnunk. Általában szerencsésebb ehelyett új nevet alkotnunk, melynek alapja
lehet a feltöltési idő, a session azonosító, vagy éppen teljesen random karaktersorozat - esetleg ezek kombinációja.
Mit tud a programokban meghívott ertesites.php?
Ennek a programnak az a feladata, hogy értesítse az oldal üzemeltetőjét, ha képfeltöltés történik. Ez általában
moderálási szempontból lehet érdekes: nem volna célszerű, ha egy weboldalt oda nem illő képekkel szét lehetne
trollkodni.
Képtörléskor valóban nem is törlődnek a képek, csak áthelyezésre kerülnek egy másik mappába?
Igen, ez így van. Szintén azért, hogy utólag is kontrollálni lehetessen a weboldalunkon történő eseményeket,
a felhasználók törölt képei jellemzően sehol, semelyik oldalon nem törlődnek azonnal. A végleges törlés vagy
némi késleltetési idővel, vagy szintén üzemeltetői jóváhagyással szokott megtörténni.
Az rendben van, hogy a képgalériában az áttekintéshez a pici indexképek megjelenítésekor is a teljes képeket használjuk?
Nagyon nincs rendben! Egyrészt lassú lehet a betöltés, másrészt a nagyképek hamar "megeszik" a szűkös
mobilnet-keretet. Ahhoz, hogy a galéria indexképeihez legyenek kicsi képeink, feltöltéskor mindegyikről
kell készíteni egy kicsínyített másolatot. Erről szól a Képmásolás című oldal.