Feldolgozás feltöltött fájlok

feladat
Kell feldolgozni a felhasználó által feltöltött fájl.

döntés
Használjon array $ _FILES:
// if (is_uploaded_file ($ _ FILES [ 'esemény'] [ 'tmp_name'])) readfile ($ _ FILES [ 'esemény'] [ 'tmp_name']); // megjeleníti a fájlt a képernyőn
>

megbeszélés
Kezdve verzió PHP 4.1 minden letöltött fájlok jelenjenek meg a szuperglobális array $ _FILES. Minden fájl tartalmazza a négy információs területek:

A név az elemhez beviteli űrlapot.
típus

MIME-típusú fájlok.
méret

Fájl mérete byte-ban.
tmp_name

Ideiglenes fájl helyét a szerveren.

A korábbi verziók PHP tömb helyett kell használni egy sor $ HTTP_POST_FILES.1

Miután kiválasztotta a fájlt egy fájlt, használja is_uploaded_file () függvényt, hogy ellenőrizze, hogy a kívánt fájlt feldolgozni, valóban betölti a felhasználó, majd kezelni, ugyanúgy, mint más fájlokat a rendszer. Mindig erre. Ha vakon megbízik a neveket a felhasználói fájlokat, bárki szerkeszthet a kérést, és neveket, mint a / etc / passwd a listán feldolgozásra.

Azt is mozgatni a fájlt egy állandó helyen; Használja move_uploaded_file () függvény, hogy biztonságosan mozog a fájlt:

// a fájl áthelyezése: function move_uploaded_file () is végez
// ellenőrizze a legitimitását a fájlokat, így nincs szükség
// A funkciót is is_uploaded_file ()
move_uploaded_file ($ _ FILES [ 'esemény'] [ 'tmp_name'], '/path/to/file.txt');

Megjegyezzük, hogy a tárolt érték a változó tmp_name képviseli a teljes elérési utat, nem csak a fájl nevét.


Használja basename () függvény segítségével válassza ki a nevét, ha szükséges.

Ne felejtsük el, hogy megbizonyosodjon arról, hogy a PHP joga van az írni és olvasni a könyvtárban, ahol az ideiglenes fájlokat írva (lásd. Upload_tmp_dir konfigurációs lehetőséget, hogy ellenőrizze annak helyét), és a könyvtárat, ahová a fájlt másolni. gyakran ez lehet a felhasználói senki vagy apache (ahelyett, hogy a személyes felhasználónév). Emiatt, ha a munka safe_mode üzemmódban, miután a fájl másolása egy új helyre, talán akkor már nem férnek hozzá.

Fájl feldolgozása gyakran nem triviális feladat, mert nem minden böngésző egyformán ugyanazt az információt. Ezt kell tenni nagyon óvatosan, különben lehet létrehozni egy biztonsági rést. Végül támadók tudja letölteni a készülékre a fájlokat, crack, vagy tönkreteheti a rendszert. Ezért megvalósításra a PHP több lehetőség, hogy meghatározzák a feltöltött fájlok, beleértve a teljes tilalmat a letöltést a fájlokat. Ezért, ha nehézséget tapasztal
Feldolgozás feltöltött fájlok, ellenőrizze, hogy a fájl nem kerül elutasításra annak a ténynek köszönhető, hogy képes jelentenek biztonsági kockázatot.


Végrehajtani ezt a csekket, először győződjön meg arról, hogy file_uploads el a konfigurációs fájl be van kapcsolva. Ezután ellenőrizze, hogy a fájl mérete nem haladja meg a upload_max_filesize; az alapértelmezett 2Mbayt amely blokkolja valaki megpróbálja elpusztítani a rendszer kitöltésével a merevlemez óriás fájlokat.

Ezen kívül vannak post_max_size paraméter, amely szabályozza a maximális mérete a POST adatok megengedett egyetlen lekérdezés; a kezdeti érték egyenlő 8 MB.

Továbbá, kivéve, ha kiválasztunk egy fájlt letölteni, akkor a PHP 4.1 verzió beállítani tmp_name paraméter nincs; újabb verziók hozzá egy üres karakterlánc. PHP 4.2.1 verzió lehetővé teszi a nulla hosszúságú fájlokat.


Annak ellenőrzésére, hogy a fájl betöltése és ez nem üres (bár, a körülményektől függően, ez az, amire szüksége van)
biztosítani kell, hogy tmp_name része, és az a paraméter értéke mérete nagyobb, mint nulla. Végül nem minden böngésző feltétlenül küldje el ugyanazt MIME-típusú fájlok; hogy küldje el, attól függően, hogy milyen típusú fájlok engedélyezettek.