ArvutidFailitüüpe

PHP: file upload serverisse

Failide allalaadimise kaudu PHP - väga huvitav juhtum, millele tuleb läheneda väga ettevaatlikult. Internetis võib leida palju näiteid rakendamise faili üleslaadimise, kuid mitte kõik neist on head ja vastavad ohutusnõuetele.

Sellised asjad on vaja tuua järelduse, isegi kui see võtab kaua aega. Kui jätate lõhe koodi, siis kogu oma server võib olla ohus.

ohutus

PHP faili üles laadida serverisse toimub üsna kergesti. Kood on väga lühike ja lihtne. Just paar rida. Kuid see meetod on ohtlik. Palju rohkem aega ja rida koodi ära ohutust.

Oht on, et kui sa ei tee kontrolli iga ründaja laadida oma skripte oma serverisse. Sel juhul saab olema täielik juurdepääs. Ta saab teha mida iganes ta tahab:

  • kustutada andmebaasi;
  • kustutada faile saite;
  • muuta faile saite;
  • lisada reklaami oma veebilehel;
  • alla viirused;
  • suunata kõigile kasutajatele nende saitidel;
  • ja palju muid asju, mis tulevad meelde ründaja.

Te peaksite alati kontrollima, mis püüab alla laadida faili alla. Näiteks, kui sa pilte üles laadida ainult, on vaja kontrollida, et fail on pilt täpselt. Muidu midagi laadida.

Täpselt kuidas rakendada kontroll, siis näidatakse otsesel eksamitööd faile üles laadida.

Loomine PHP vorm

faili üleslaadimise vormi on väga lihtne. Kadunud nuppu Sirvi ja upload nuppu.

Kirjeldab, kuidas luua vorme ei ole, sest see on lihtne. Edasised juhised eeldavad, et teil on juba põhimõisteid HTML (muidu ei oleks otsivad teavet allalaadimiseks PHP).

Aga pange tähele, et andmete kujul, mida vaja lisada enctype atribuut.

Vastasel korral andmed faili käitleja ei edastata.

Kuidas see peaks töötama?

Kui klõpsate nuppu Sirvi sa peaksid nägema kasti, kus palutakse valida fail.

Pärast seda on vaja saada tee, kus fail asub.

Kui tee ei ilmu, korrake toimingut.

Pärast klõpsates download faili handler võib anda mingit teavet.

Näiteks võite kirjutada rida, mis ütleb, et fail on "nii ja nii" nimi on edukalt üles laetud "selline ja selline" kausta. Muidugi, faili nimi antakse alati erinevad.

Tavaliselt seda teavet kasutatakse siluda koodi. Seega on võimalik, et kontrollida andmete edastamise ja kirjutab esinevad soovitud kataloogi. See tähendab, et isegi faili nimi ei ole näidustatud. Kuna see täiendavat teavet, et kasutaja ei pea.

On mõistlik, et väljund nime ainult siis, kui kasutaja laadib mitu faili. Selline on olukord, kaaluge veidi kaugemale. Ärgem saada enne ise.

reguleerimine

PHP faili üleslaadimise server nõuab teatud seadeid, mida tuleks teha php.ini faili. See fail sisaldab palju seadeid. Nad kõik me ei vaja. Oleme huvitatud kolm rida: file_uploads, upload_tmp_dir ja upload_max_filesize.

Pange tähele, et need seaded mõjutavad kõikide saitide serveris, mitte ainult ühele. Seetõttu seada maksimaalse suuruse põhineb asjaolul, et teil laadida kasutajatele. See ei ole soovitatav liiga suur.

Kui muudad Nende parameetrite väärtuste, peate uuesti serverisse. Vastasel seaded ei jõustu, kui nad loevad ajal serveri koormus.

Seda saab teha konsooli ühendades SSH serverisse. Lihtsalt sisesta käsk teenuse httpd restart ja seejärel seadistused jõustuvad.

Teine meetod - taaskäivitamist läbi ISP-paneeli või arvelduspaneelilt poole.

array faili

PHP faili üleslaadimise tehakse massiivi $ _FILES. See sisaldab kõiki teavet failide, et me alla.

Et näha, millist teavet sisaldub massiivi, piisavalt kirjutada faili handler järgmised.

Valige fail ja vajuta "Saada". Käitleja lehel kuvatakse teave, mis on salvestatud $ _FILES. Muutuja on kirjutatud täielikult trükitähtedega. PHP - keele-tundlik.

Nagu näete, selles array on palju valdkondi. Kõik nad on meile oluline. Esimene väli sisaldab failinime kujul, kus seda kasutatakse arvutisse.

Veerus Tüüp määratud faili tüüp. Tmp_name väli vastab nime ajutist faili. Pärast lõppu skripti kustutatakse.

Viga väli sisaldab veakoodi. See oli veidi kaugemale. Suurus - suurus baitides.

vead

Viiakse läbi PHP faili üleslaadimise kaasneb alati veakoodi. Veateade kantud "viga". Ekraanipilt viga on null.

Mõtle väärtus kõik vead:

Öeldi eespool umbes parameetrit saab määrata tavaline HTML.

Siin on proov kujul alla laadida faili, mis näitab piiri summa laaditud fail.

PHP: file upload script

Nagu kõik läbi praktikas? PHP faili üleslaadimise toimub koopia käsk. Kui olete huvitatud küsimusele, kuidas alla laadida faili, vastus on lihtne kopeerimiskaitse, mis kasutab kahte parameetrit - lähtefaili ja sihtkoha faili.

Aga nagu eespool öeldud, see ei saa olla piiratud ohutuse tagamiseks. Näiteks, vaadake, millist faili me laeva, mida saab kasutada valdkonnas tüüpi massiivi $ _FILES. Esiteks, ärgem tegeleda kontrolli ja seejärel liikuda edasi täieliku skript

Oletame, mida soovite lubada kasutajatel laadida foto, mille resolutsioon on ainult GIF, JPEG või PNG. Märkida võib olla niimoodi.

if ($ _ FAILID [ 'file_upload'] [ 'tüüpi']! = "image / gif") {
echo "Vabandame, toetame ainult allalaadimise Gif-failid";
exit;
}

Kui soovite saata kõik 3 tüüpi, lihtsalt lisada täiendava tingimuse, et teist tüüpi pilt.

Kopeerimine toimub nii: koopia (pilt 1, pilt 2).

Meie puhul, kui töö on allalaadimise PC server, saate seda teha

koopia ($ _ FAILID [ 'file_upload "] [" tmp_name "]," 1.jpg ")

See tähendab, et faili saab kopeerida nime 1.jpg. See ei ole päris õige. Sel juhul on see vaid üks näide. Faili nimi on alati vaja täpsustada erinevad ja täpsustada laiendamine, sõltuvalt faili.

Määrata saab laiendusi eri viisil. See kõik sõltub arendaja eruditsioon. Üks kiiremaid viise (erinevus kümnendikku sekundit) määrata pikendamine - see on järgmise koodi.

$ Path_info = pathinfo ($ _ FAILID [ 'photo1 "] [" nimi "]);

$ Ext = $ path_info [ 'laiendamise'];

Muutuja $ ext me salvestada soovitud laiendus. Failinime saab seada juhuslikult kasutades MD5. Kui te plaanite laadida palju faile, siis on parem saata need teistesse kaustadesse. Nii et see on mugavam. Eriti juhul, kui soovite puhastada.

alla kood on järgmine.

/// Pildiga

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

{

kaja ( "

tundmatu faili.

Tagasi ... ");

exit;

}

///. Ütle, et iga projekti serveris on lubatud laadida suuri faile (video), kuid seal on ainult pilte ja kasutajad peavad piirama

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

{

?>

maksimaalne lubatud suurus 2 MB

Tagasi ...

exit;

}

// luua kaustu

// kausta loomiseks jooksva kuu

if (! file_exists ( "img /". kuupäev ( "M")))

{

mkdir ( "img /" kuupäev ( "M").);

}

// kausta loomiseks jooksva päeva

if (! file_exists ( "img /". kuupäev ( "M"). "/". kuupäev ( "d")))

{

mkdir ( "img /" kuupäev ( "M") "/" kuupäev ( "d") ...);

}

/// faililaiend

$ Path_info = pathinfo ($ _ FAILID [ 'photo1 "] [" nimi "]);

$ Ext = $ path_info [ 'laiendamise'];

/// genereerida failinimi

$ Id = md5 (kuupäev ( "Ymd"));

if (koopia ($ _ FAILID [ 'photo1 "] [" tmp_name "]," img / ". kuupäev (" M ")." / ". kuupäev (" d ")." / ". $ id. $ ext) )

{

kaja ( "Fail edukalt üles");

}

/// edasisi meetmeid (kanne andmebaasi, ja nii edasi. N.)

}

mitme faili

Üleslaadimine mitu faili (PHP) esineb abil täiendavaid väljad.

See meetod ei ole väga hea, sest see piirab mitmeid faile alla laadida. Lisaks peetakse halb vorm programmeerimine. Proovige teha kõik dünaamiline.

Ideaalne variant - see on valik suur hulk faile korraga ühe nupuvajutuse.

Selleks luua kuju nagu see kood.

Pange tähele, et mitu Lisaks sõna ja nimi on antud massiivi []. Sel juhul $ _FILES massiivi veidi erinev. Saad massiiv massiivi.

Et testida saab uuesti kasutada var_dump ($ _ failid);

Kõik failid pannakse massiivi niimoodi:

  1. $ _FILES [ "fail1"] [ "nimi"] [0]
  2. $ _FILES [ "fail1"] [ "nimi"] [1]
  3. Ja nii edasi.

Sulgudes on kirjutatud faili number massiivi. Arvestades nullist. Me käsitleme neid samamoodi, küsige tsükli ja võtta ühendust eespool kirjeldatud kood lõpus indeks lisades [$ i].

$ I = 0;

while ($ _FILES [ "fail1"] [ "nime"] [$ i] <> '')

{

/// kleepida eespool koodi

}

Seega on teil juhtub läbi PHP faili üleslaadimise serverisse ühe tsükli ilma tarbetu kordamine kood, nagu tavaliselt juhul, kui te kasutate versiooni staatilise failide arv (viimase foto).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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