SzámítógépekFájltípusok

PHP: fájlfeltöltés a szerverre

Fájlok letöltése keresztül PHP - egy nagyon érdekes eset, amelyre kell megközelíteni nagyon óvatosan. Az interneten megtalálható számos példát végrehajtásának fájlt feltölteni, de nem mindegyik jó, és megfelel a biztonsági előírásoknak.

Ezek a dolgok kell, hogy arra a következtetésre, akkor is, ha hosszú időt vesz igénybe. Ha hagyjuk egy rés a kódot, majd a teljes szerver veszélybe kerülhet.

biztonság

A PHP fájlt feltölteni a szerverre végezzük elég könnyen. A kód nagyon rövid és egyszerű. Csak egy pár sort. Ez a módszer azonban veszélyes. Sokkal több időt és sornyi kódot távol a biztonságra.

A veszély az, hogy ha nem teszed vizsgálatok semmilyen támadó feltölteni a szkriptek a szerveren. Ebben az esetben, akkor teljes hozzáféréssel rendelkeznek. Azt tehet, amit akar:

  • adatbázis törlése;
  • fájlok törlése oldalak;
  • módosítsanak fájlokat oldalak;
  • add meg a hirdetés a honlapon;
  • letöltés vírusok;
  • átirányítani minden felhasználó a saját telek;
  • és sok más dolog, hogy jöhetnek szóba támadó.

Mindig ellenőrizze, hogy megpróbálja letölteni a fájlt a felhasználó számára. Például ha feltölt képeket csak azt kell ellenőrizni, hogy a fájl egy kép pontosan. Ellenkező esetben, akkor lehet letölteni semmit.

Pontosan hogyan kell végrehajtani ellenőrzés lesz látható, a közvetlen vizsgálatát script fájlok feltöltésére.

Létrehozása PHP formában

fájl feltöltés forma nagyon egyszerű. Hiányzik a Tallózás gombra és feltöltési gombokat.

Leírja, hogyan kell létrehozni formák nem, mert ez könnyű. További utasítások feltételezik, hogy már az alapvető fogalmak HTML (különben nem lenne keresett információkat letölthető PHP).

De megjegyezzük, hogy az adatok formájában meg kell adni a enctype attribútumot.

Egyébként adatok fájlleírója nem kerül továbbításra.

Hogyan kell működnie?

Ha rákattint a Tallózás gombra, látnod kell egy doboz, ahol ki kell választania egy fájlt.

Azt követően, hogy szükség lesz, hogy kap egy útvonalat, ahol a fájl található.

Ha az elérési út nem jelenik meg, hajtsa végre újra a műveletet.

Kattintás után a letöltött fájl kezelő adhat semmilyen információt.

Például, akkor írj a sort, amely kimondja, hogy a fájl „így és így” a neve sikeresen feltöltésre került a „ilyen és ilyen” mappát. Természetesen a fájlnevet kap mindig más.

Jellemzően ez az információ megjelenik a hibakeresés. Így lehetséges, hogy ellenőrizze, hogy az adatokat továbbítják, és írja elő a kívánt könyvtárat. Ez azt jelenti, még a fájlnév nem jelezték. Mivel ezt a plusz információt, hogy a felhasználónak nem kell.

Logikus, hogy a kimenő neve csak akkor, ha a felhasználó letölti több fájlt. Ez az eset, úgy egy kicsit tovább. Ne rohanjunk előre.

beállítás

A PHP fájlt feltölteni a szerver megköveteli bizonyos beállításokat, amelyeket el kell végezni a php.ini fájlban. Ez a fájl tartalmazza a sok beállításokat. Mindannyian nem kell. Mi érdekli a három vonal: file_uploads, upload_tmp_dir és upload_max_filesize.

Felhívjuk figyelmét, hogy ezek a beállítások hatással lesz az összes olyan webhelyet a kiszolgálón, nem csak bármelyike. Ezért, hogy a maximális méretét a tényen alapul, hogy akkor kell betölteni a felhasználókat. Nem ajánlott a túl nagy.

Ha megváltoztatja az értékeket ezeket a paramétereket, akkor újra kell indítani a szervert. Ellenkező esetben a beállítások nem lépnek életbe, ahogy olvasni idején a szerver terhelését.

Ezt megteheti a konzol összekötő SSH-n keresztül a szerverre. Egyszerűen írja be a parancsot service httpd restart, majd a beállítások lépnek érvénybe.

Egy másik módszer - az újraindítás keresztül ISP-panel vagy a számlázó panel szolgáltatót.

Array fájl

A PHP fájlt feltölteni végzi a tömb $ _FILES. Ez tartalmazza az összes információt a fájlokat, amit letöltünk.

Hogy milyen információkat tartalmaz a tömbben, elég írni a fájlkezelőtől következő.

Válassza ki bármelyik fájlt, majd kattintson a „Feltöltés”. A felvezető oldal megjeleníti a tárolt információkat a $ _FILES. A változó van írva teljesen nagybetűvel. PHP - egy nyelv érzékeny.

Mint látható, ebben a tömbben van egy csomó területen. Mindegyik fontos számunkra. Az első mező tartalmazza a fájl nevét a formában, ahogyan azt használják a számítógépen.

A típus oszlop megadott fájltípus. Tmp_name mező megegyezik a neve az ideiglenes fájl. Miután vége a script törlődik.

A hiba mező egy hibakódot. Ez egy kicsit tovább. Méret - a méret byte-ban.

hibák

Végzett a PHP fájlt feltölteni mindig kíséri egy hibakód. Egy hibaüzenet akkor a „hiba”. A screenshot hiba nulla.

Tekintsük az értéke minden hibát:

Azt mondták, a fenti a paraméter megadható a szokásos HTML.

Itt egy példa a formában, hogy töltse le a fájlt, amely jelzi a határt az összeg a feltöltött fájl.

PHP: file feltöltés script

Mivel az összes elvégzett gyakorlatban? A PHP fájlt feltölteni előfordul copy paranccsal. Ha érdekli a kérdés, hogyan lehet letölteni egy fájlt, a válasz egyszerű másolásvédelemmel, amely két paramétert használ - a forrás fájlt, és a videón.

De, mint már említettük, nem lehet korlátozott biztonsági okokból. Például, nézd meg, hogy milyen fájlt mi a hajó, akkor a mező típusát a tömb $ _FILES. Először is nézzük foglalkozik ellenőrzés, majd lépni a teljes forgatókönyvet

Tegyük fel, hogy azt szeretné, hogy a felhasználók feltölteni egy fotót a felbontás csak GIF, JPEG vagy PNG. Jelölje meg lehet, mint ez.

if ($ _ FILES [ 'file_upload'] [ 'type']! = "image / gif") {
echo "Sajnáljuk, támogatást csak a letöltés Gif-Files";
exit;
}

Ha azt szeretnénk, hogy a hajó minden 3 típus, egyszerűen csak hozzá egy további feltétel, hogy a más típusú kép.

Másolás történik, mint ez: copy (kép 1 kép 2).

A mi esetünkben, amikor a művet letölti a PC-ről a szerver, akkor megteheti

copy ($ _ FILES [ 'file_upload'] [ "tmp_name"], "1.jpg")

Azaz a fájl lesz másolva a nevét 1.jpg. Ez nem teljesen helyes. Ebben az esetben, ez csak egy példa. A fájl neve mindig meg kell határozni a különböző, és adja meg a mellék, attól függően, hogy a fájl.

Határozzuk meg a kiterjesztés lehet különböző módon. Minden attól függ, a fejlesztő műveltség. Az egyik leggyorsabb módja, hogy (a különbség tized másodperc) meghatározza a kiterjesztés - ez a következő kódot.

$ PATH_INFO = pathinfo ($ _ FILES [ 'photo1'] [ "name"]);

$ Ext = $ PATH_INFO [ 'kiterjesztés'];

A változó $ ext fogjuk tárolni kívánt bővítményt. A fájl neve lehet beállítani véletlenszerűen MD5. Ha azt tervezi, hogy letölt egy csomó kép, akkor jobb, ha a hajó őket különböző mappákba. Így lesz sokkal kényelmesebb. Különösen, ha azt szeretnénk, hogy tisztítani.

Töltse le a kód lesz a következő.

/// A fotó

if ($ _FILES [ 'photo1'] [ 'tmp_name'] == null)

{

echo ( „

Ismeretlen fájl.

Vissza ... „);

exit;

}

///. Tegyük fel, hogy minden projekt a kiszolgálón hagyjuk betölteni a nagy fájlok (video), de vannak csak a képek, és a felhasználóknak meg kell korlátozni

if (($ _FILES [ "photo1"] [ "size"]> 1024 * 1024 * 2)

{

?>

a maximális megengedett mérete 2 MB

Vissza ...

exit;

}

// Létrehozunk mappák

// létrehoz egy mappát az aktuális hónap

if (! file_exists ( "img /". date ( "M")))

{

mkdir ( "img /" dátum ( "M").);

}

// létrehoz egy mappát az aktuális nap

if (! file_exists ( "img /". date ( "M"). "/". date ( "d")))

{

mkdir ( "img /" dátum ( "M") "/" dátum ( "d") ...);

}

/// fájl kiterjesztését

$ PATH_INFO = pathinfo ($ _ FILES [ 'photo1'] [ "name"]);

$ Ext = $ PATH_INFO [ 'kiterjesztés'];

/// generál fájlnév

$ Id = md5 (date ( "YMD"));

if (copy ($ _ FILES [ 'photo1'] [ "tmp_name"], "img /". date ( "M"). "/". date ( "d"). "/". $ id. $ ext) )

{

echo ( "A fájl sikeresen feltöltve");

}

/// további lépéseket (bejegyzés az adatbázisban, és így tovább. N.)

}

több fájl

Több fájl egyidejű feltöltése (PHP) segítségével történik további mezők formájában.

Ez a módszer nem túl jó, mivel korlátozza a fájlok száma letölteni. Sőt, úgy vélik, rossz formában a programozás során. Megpróbál mindent megtenni, dinamikus.

Az ideális megoldás - ez a választás egy nagyszámú fájlt egyszerre egyetlen gomb megnyomásával.

Ehhez hozzon létre olyan alakúak, mint ezt a kódot.

Megjegyezzük, hogy a többszöri hozzáadását a szót, és a nevét adja, mint egy tömb []. Ebben az esetben a $ _FILES tömb lesz kicsit más. Kapsz egy tömb a tömb.

Annak tesztelésére, ismét használhatja a var_dump ($ _ FILES);

Minden fájl kerül a tömbben, mint ez:

  1. $ _FILES [ "fájl1"] [ "name"] [0]
  2. $ _FILES [ "fájl1"] [ "name"] [1]
  3. És így tovább.

Zárójelben van írva a fájl száma a tömbben. Számítva nulla. Kezeljük őket ugyanúgy, csak kérni a ciklust, és vegye fel a kapcsolatot a fent leírt kód végén az index, hogy [$ i].

$ I = 0;

while ($ _FILES [ "fájl1"] [ "name"] [$ i] <> '')

{

/// illessze be a fenti kódot

}

Így meg kell történni a PHP fájlt feltölteni a szerverre egy ciklus felesleges ismétlését a kódot, ahogy az általában lenni szokott, ha azt a verziót használja statikus fájlok száma (utolsó fotó).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 hu.birmiss.com. Theme powered by WordPress.