9.2. fejezet¶
A fejezet anyaga¶
Fájlfeltöltés¶
A PHP segítségével egyszerűen tölthetünk fel különféle fájlokat a szerverre egy űrlapról.
A fájlfeltöltésre alkalmas HTML űrlap¶
Ha azt szeretnénk, hogy egy HTML űrlapon lehetőség legyen fájlok feltöltésére, akkor az alábbi 3 feltételnek kell teljesülnie a HTML kódra vonatkozóan:
- a
<form>tag amethod="POST"attribútummal kell, hogy ellátva legyen - a
<form>tagnek rendelkeznie kell egyenctype="multipart/form-data"attribútummal - az űrlapon el kell helyezni egy
<input type="file"/>elemet a fájlfeltöltésre.
Az <input type="file"/> űrlapelem accept attribútumával megadhatjuk a feltölteni kívánt fájl elvárt kiterjesztését. Ekkor a fájlok tallózására szolgáló dialógusablakban a felhasználó csak a megadott kiterjesztésű állományokat látja. Ez inkább egy kényelmi funkció, és nem egy megbízható validálási eszköz. A fájl kiterjesztését szerveroldalon is ellenőrizni kell!
Példa: Egy HTML űrlap, fájlfeltöltéssel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
A feltöltött fájlok adatainak elérése PHP-ban¶
PHP-ban a feltöltött fájlok adatait a $_FILES szuperglobális tömb tartalmazza. Ennek az elemei a feltöltött fájlok adatait tartalmazó asszociatív tömbök, amelyek a következő kulcsokkal rendelkeznek:
name: a feltöltött fájl nevetmp_name: ideiglenes név, amivel a fájl feltöltésre kerül (az elérési útvonalat is tartalmazza)size: a feltöltött fájl mérete (bájtokban)type: a feltöltött fájl típusaerror: hibakód (0, ha nem történt hiba a fájlfeltöltés során).
Példa: Egy feltöltött fájl adatainak kiíratása PHP-ban
1 2 3 4 5 6 7 8 9 | |
A fenti kód kimenete egy kép feltöltését követően
A fájl neve: profile.jpg A fájl ideiglenes neve: C:\xampp\tmp\php356.tmp A fájl mérete (bájtokban): 53351 A fájl típusa: image/jpeg Hibakód: 0
Kiterjesztés lekérdezése¶
PHP-ban a feltöltött fájlok kiterjesztését szerveroldalon is lekérdezhetjük.
Az egyik módszer a kiterjesztés lekérdezésére, hogy beépített függvények használatával lekérjük a fájl nevében az utolsó . (pont) karakter utáni szövegrészt:
- Először az
explode()függvénnyel feldaraboljuk a fájlnevet pont karakterek mentén. Ez egy tömbben adja vissza a feldarabolás után kapott elemeket. - Az így kapott tömbnek vesszük az utolsó elemét az
end()függvénnyel. - Végezetül, hogy a kiterjesztés vizsgálata ne legyen érzékeny a kis- és nagybetűkre, csupa kisbetűssé alakítjuk a kiterjesztést az
strtolower()függvénnyel (persze csupa nagybetűssé is alakíthattuk volna azstrtoupper()használatával).
Példa: Fájl kiterjesztésének lekérdezése (1. módszer)
1 2 3 4 5 6 7 | |
Egy másik módszer a pathinfo($path, PATHINFO_EXTENSION) beépített függvény használata. Itt a $path helyén a feltöltött fájl nevét (name) adjuk meg.
Ahhoz, hogy a fájl kiterjesztése ne legyen kis- és nagybetűérzékeny, itt is érdemes csupa kisbetűssé (vagy ízlés szerint csupa nagybetűssé) alakítani azt.
Példa: Fájl kiterjesztésének lekérdezése (2. módszer)
1 2 3 4 5 6 | |
Fájl átmozgatása¶
A feltöltött fájlok a feltöltést követően egy ideiglenes mappába kerülnek. A mi feladatunk, hogy innen átmásoljuk őket egy állandó helyre, különben egy idő után törlődnek.
A feltöltött fájlok átmozgatására a move_uploaded_file($t_name, $dest) beépített függvény szolgál, amivel a $t_name ideiglenes névvel (tmp_name) rendelkező fájlt áthelyezhetjük az ideiglenes mappából a $dest célhelyre. A függvény TRUE-t ad vissza, ha sikerült átmozgatni a fájlt, FALSE-ot egyébként.
Ha a célhelyen létezik már az átmozgatott fájllal megegyező nevű állomány, akkor az alapértelmezett módon felül lesz írva. Amennyiben ezt nem szeretnénk, akkor a file_exists() függvénnyel ellenőrizhetjük, hogy a megadott elérési útvonalú fájl létezik-e.
Példa: Egy feltöltött fájl átmozgatása az images mappába
1 2 3 4 5 6 7 8 9 10 11 | |
A teljes fájlfeldolgozást végző PHP program¶
Írjuk meg a process.php-ban a az anyagrész elején található profilkép feltöltő űrlap feldolgozását az alábbi szempontok alapján!
- Csak JPG, JPEG és PNG kiterjesztésű fájlokat lehessen feltölteni a szerverre!
- A feltöltött fájl mérete ne lehessen több 30 MB-nál!
- Ha a feltöltés sikeres, és a kép megfelel a fenti két elvárásnak, akkor mozgassuk át az
imagesmappába! Amennyiben már létezik ebben a mappában egy ilyen nevű kép, akkor írassunk ki figyelmeztetést az eredeti kép felülírásáról!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | |
További gyakorló feladat¶
Feladat
Egészítsd ki az előző fejezetben megírt webes projektet a következő funkciókkal:
- A regisztráció során legyen lehetőség profilkép feltöltésére is! A profilkép feltöltése ne legyen kötelező!
- A "Profilom" oldalon jelenítsd meg a felhasználó profilképét! Amennyiben a felhasználó még nem töltött fel profilképet, akkor egy alapértelmezett kép jelenjen meg!
- A "Profilom" oldalon legyen lehetőség a profilkép megváltoztatására is!
A felhasználók profilképeit tároljuk egy images mappában! A feltöltött képek neve a felhasznalonev.kiterjesztes formátumot kövesse! Az engedélyezett kiterjesztések: PNG, JPG, JPEG.
Tippek a feladat megoldásához:
- Mivel két fájltöltésünk is lesz (egy a regisztrációnál, egy pedig a profil oldalon), ezért a fájlfeltöltést végző kódot érdemes kiszervezni a
functions.phpállományba egy függvényként. - A profilkép módosításakor érdemes először a már meglévő profilképet törölni. Ezt az
unlink($path)függvénnyel tehetjük meg (ahol$patha törlendő fájl elérési útvonala).
Felhasznált irodalom¶
Számítógép Hálózatok gyakorlati jegyzet