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
images
mappá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$path
a törlendő fájl elérési útvonala).
Felhasznált irodalom¶
Számítógép Hálózatok gyakorlati jegyzet