PHPműhely.hu

PHP, Javascript, Webprogramozási Fórum

Fájlfeltöltésrõl

PHP Cikkek, segédletek

Fájlfeltöltésrõl

HozzászólásSzerző: Bonjasky » 2011.12.01. 20:56

Már szövegekkel tudunk muveleteket végezni, fájlokat tudunk létrehozni, de még felhasználótól fájlokat nem tudunk bekérni. Eddig a leckéig. PHP-vel képesek leszünk fájlokat feltölteni, és átmozgatni egy mappába. De fontos tudnivaló, hogy ami felhasználói oldalról jön, az lehet féreg, vírus, kártékony script, amivel könnyen feltörhetové válhat a weblapunk. Így érdemes a biztonsági kérdésekkel fórumra menni, ha nem vagyunk biztosak benne. A PHP megírása elott tisztázni kell néhány alap dolgot, amit HTML urlapokkal csinálni hogy fájlfeltöltohöz jussunk. Példa egyszeru fájlfeltöltohöz:

Kód: Egész kijelölése
<form enctype="multipart/form-data" action="uploader.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> Válassz egy fájlt: <input name="uploadedfile" type="file" /><br /> <input type="submit" value="Feltöltés" /> </form>


Ennyi, ezt feltöltve a szerverre máris bekéri a böngészonk a fájlt. Az urlapunk action részébe adjuk meg hová küldje el a bevitelimezoket és a csatolmányokat. uploaded.php fájlba tehetjük a feldolgozó programot. Néhány rész ami magyarázatra szorulhat: <b> * enctype="multipart/form-data" </b> - fontos megadni hogy az urlap ne csak szöveges adatokat küldjön tovább. <b> * method="POST" </b> - A fájlon kívül minden változót POST móddal küldi tovább <b> * input type="hidden" name="MA... - </b> Ezzel megadjuk, hogy mekkora fájlt tölthetünk fel maximum, A példában 100000 bájtot, azaz 100Kbytot adtunk meg, ez átlagos fájlméret webes környezetben. <b> * input name="uploadedfile" </b> - uploadedfile lesz a tömbön belüli neve a fájlnak, amibol további információt nyerhetünk <b> -Mi kerül a uploader.php fájlba? </b> Amikorra lefut a fájlunk, a fájlt a szerver feltölti egy átmeneti mappába, sok hiedelemmel ellentétben már feltöltöttük a fájlt. Hogyha nem használjuk fel ezt az átmeneti fájlt, automatikusan törlodik, nekünk ezzel nincs több dolgunk. Beszélni kell még a $_FILES tömbrol is, PHP -vel ebbol a tömbbol kapjuk vissza mi az átmeneti fájlunk fájlneve, és egyéb infókat kapunk vissza, pl típusát, eredeti fájlnevét, méretét. <b> -Miket tartalmaz pontosan a $_FILES tömb? : </b> <b> $_FILES['uploadedfile']['name'] </b> - megadja a pontos fájlnevet amivel a fájlt feltöltöttük. <b> $_FILES['uploadedfile']['tmp_name'] </b> - a szerveren elhelyezkedo átmeneti mappában található egyedi-átmeneti fájlnevét adja vissza. Kezdhetünk akkor egy programot írni, ami ténylegesen kimozgatja a feltöltött fájlt az átmeneti helyérol.

//
ebbe a mappába kerül a fájl $cel = "uploads/"; /* a
célmappa és eredeti fájlnévbol
készítünk egy elérési utat */ $cel =
Kód: Egész kijelölése
$cel basename$_FILES['uploadedfile']['name']);
 
Mi az a basename? Az gondoskodik arról, hogy levágja a $_FILES['uploadedfile']['name'] értékébol a fájlnév elotti esetleges mappaneveket, így tisztán a fájlnevét tudjuk felhasználni. Kell továbbá készíteni egy a $cel változóval meghatározott mappát a megfelelo jogosultsággal, különben nem fogjuk tudni feltölteni a fájlt. Így a $cel változóba kerül az a cél fájlnév, ahová átmozgatjuk a feltöltött fájlt. A move_uploaded_file() használatáról:

Kód: Egész kijelölése
// ebbe a mappába kerül a fájl $cel = "uploads/"; /* a célmappa és eredeti fájlnévbol készítünk egy elérési utat */ $cel =
$cel basename($_FILES['uploadedfile']['name']); if
(
move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $cel)) { echo
"A fájl: " basename($_FILES['uploadedfile']['name']) . "
feltöltodött!"
; } else { echo "Probléma van a
feltöltéssel!!"
; } 

Ezután nézzünk fel FTP -vel a feltöltési mappára, és láthatjuk hogy feltöltötte a fájlunkat. Fontos tudni, hogy ez a leírás nem említi a típusellenorzést, kiterjesztés ellenorzését ami KELL egy éles rendszerben hogy megbízható legyen.
Avatar
Bonjasky
Adminisztrátor
 
Hozzászólások: 472
Csatlakozott: 2011.10.30. 23:30

Vissza: Segédletek

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég

cron