OqPoWah.com

PHP: nalaganje datoteke v strežnik

Prenos datotek prek PHP-ja je zelo zanimiva stvar, zato jo zelo natančno obiščite. V internetu lahko najdete številne primere izvajanja prenosov datotek, vendar niso vse dobre in izpolnjujejo varnostna pravila.

Takšne stvari je treba končati, tudi če traja dolgo. Če pustite luknjo v kodi, je morda v nevarnosti celoten strežnik.

Varnost

Uporaba PHP prenašanje datotek na strežniku je dovolj enostavno. Koda je zelo kratka in preprosta. Samo nekaj vrstic. Toda takšna metoda je nevarna. Kje več časa in vrstic kode gre za varnost.

Nevarnost je, da če ne opravite nobenih preverjanj, bo vsak napadalec lahko prenesel svoje skripte na vaš strežnik. V tem primeru ima poln dostop. Lahko naredi vse, kar hoče:

  • izbrišite bazo podatkov;
  • brisanje datotek na spletnem mestu;
  • spreminjanje spletnih mest;
  • dodajte svoje oglase na svojo spletno stran;
  • prenosi virusov;
  • preusmeri vse uporabnike na svoja spletna mesta;
  • in še veliko več, da bo vlomilec prišel na misel.

Vedno morate preveriti, kaj poskuša uporabnik naložiti za datoteko. Če na primer naložite samo fotografije, morate preveriti, ali je ta datoteka ravno slika. V nasprotnem primeru boste vse prenesli.

Kako natančno izvedite test bo prikazan pozneje, ko neposredno preučite skript za prenos datoteke.

Ustvarjanje obrazca PHP

Obrazec za prenos datoteke je zelo enostaven. Dovolj gumbov za brskanje in gumbov za prenos.

obrazec za prenos datoteke php

Ne bomo opisali oblikovanja obrazca, saj je enostavno. Nadaljnja navodila domnevajo, da že imate osnovne koncepte HTML-ja (v nasprotnem primeru ne bi našli informacij o nalaganju v PHP).

Toda upoštevajte, da morate za prenos podatkov v obrazcu dodati atribut enctype.

nalaganje datotek prek php

V nasprotnem primeru podatki o upravljalniku datotek ne bodo posredovani.

Kako naj to deluje?

preprost prenos datotek phpKo kliknete gumb za brskanje, odprete okno, kjer boste morali izbrati datoteko.

Potem naj se pojavi pot, kjer se nahaja datoteka.

hitro prenos datotek prek php

Če se pot ne pojavi, to naredite znova.

Po kliku na gumb za nalaganje lahko katera koli informacija prikaže z datoteko upravljalca.

obrazec za nalaganje datotek prek PHP-ja

Na primer, lahko napišete črto, ki pravi, da je bila datoteka z »tako-tako-tem« ime uspešno naložena v mapo »tako-in-taka«. Seveda bo ime datoteke vedno drugačno.

Običajno se te podrobne informacije uporabljajo za debug kodo. Na ta način lahko preverite, ali se podatki prenesejo, in zapisi se nahajajo v imeniku, ki ga potrebujete. To pomeni, da tudi ime datoteke ne označuje. Ker so to dodatne informacije, ki jih uporabnik ne potrebuje.

Smiselno je izpisati podatke o imenu le, če uporabnik prenese več datotek. Ta primer bomo razmislili še malo. Ne bomo nadaljevali.

Prilagodi

V PHP-ju naložitev datoteke v strežnik zahteva določene nastavitve v datoteki php.ini. V tej datoteki je veliko nastavitev. Vsi jih ne potrebujemo. Zanimajo nas tri vrstice: file_uploads, upload_tmp_dir in upload_max_filesize.

Upoštevajte, da bodo te nastavitve vplivale na vsa vaša spletna mesta na strežniku, ne le na eno od njih. Zato nastavite največjo velikost glede na to, kaj boste naložili uporabnikom. Ni priporočljivo nastaviti previsoke vrednosti.

Ko spremenite vrednosti v teh nastavitvah, je treba strežnik ponovno zagnati. V nasprotnem primeru nastavitve ne bodo začele učinkovati, ker se berejo ob nalaganju strežnika.

To lahko storite v konzoli tako, da prek SSH povežete s strežnikom. Dovolj je, da vnesete ukazni servis httpd restart, nato pa bodo nastavitve začele veljati.

Drug način je, da znova zaženete prek panela ISP ali prek panelov za obračun ponudnika.

kako ponovno zagnati strežnik

Array z datoteko

V PHP je datoteka naložena s pomočjo polja $ _FILES. Vsebuje vse informacije o datotekah, ki jih bomo prenesli.

Da bi videli, kakšne informacije se nahaja v tej matriki, je dovolj, da v datoteki vodnika napišete naslednje.

prenesi datoteke php

Izberite katero koli datoteko in kliknite »Prenos«. Na strani upravljalca so prikazani podatki, shranjeni v $ _FILES. Spremenljivka je napisana v celoti z velikimi črkami. PHP je jezik, občutljiv na primere.

php prenese datoteke na strežnik

Kot vidite, v tej matriki obstaja veliko polj. Vsi so pomembni za nas. Prvo polje shrani ime datoteke v obliki, v kateri se uporablja na vašem računalniku.

Stolpec vrste označuje vrsto datoteke. Polje tmp_name ustreza imenu začasne datoteke. Ko se scenarij konča, bo izbrisan.

Polje napak shrani kodo napake. O tem še malo. Velikost - velikost v bajtih.

Napake

Prenos datoteke prek PHP vedno spremlja koda napake. Sporočilo o napaki je vključeno v polje "error". V screenshotu je napaka nič.

skript za prenos datoteke php

Upoštevajte vrednosti vseh napak:

napake pri prenosuNad njim je bilo rečeno o parametru, ki ga je mogoče navesti v običajnem HTML-ju.

Tukaj je primer obrazca za nalaganje datoteke, kjer je določena omejitev velikosti datoteke, ki se naloži.

html obrazec za nalaganje datotek

PHP: skript za prenos datoteke

Kako je vse v praksi? V PHP se datoteka prenese z ukazom kopiranja. Če vas zanima vprašanje prenosa datoteke, potem je odgovor preprosto kopiranje, ki uporablja dva parametra - izvorno datoteko in ciljno datoteko.

Toda, kot je navedeno zgoraj, zaradi varnostnih razlogov tega ni mogoče omejiti. Na primer, če želite preveriti vrsto datoteke, ki jo pošiljamo, lahko uporabimo vrsto polja v matriki $ _FILES. Najprej bomo to ugotovili s preizkusom in nato prešli na celoten skript

Recimo, da želite uporabnikom naložiti fotografijo z ločljivostjo samo GIF, JPEG ali PNG. To lahko določite tako.

če ($ _ FILES [`file_upload`] [`tip`]! = "slika / gif") {
echo "Žal nam je, da prenesemo le datoteke GIF" -
exit-
}

Če želite poslati vse 3 vrste, enostavno dodajte še en dodaten pogoj z drugo vrsto slike.

Kopiranje je izvedeno tako: kopiranje (datoteka 1, datoteka 2).

V našem primeru, ko delo nadaljuje s prenosom iz računalnika v strežnik, lahko to storite

kopirajte ($ _ FILES [`file_upload`] ["tmp_name"], "1.jpg")

To pomeni, da bo datoteka kopirana z imenom 1.jpg. To ni povsem pravilno. V tem primeru je to le primer. Ime datoteke mora biti vedno nastavljeno drugače, razširitev pa mora biti podana glede na datoteko.

Razširitev lahko določite na več načinov. Vse je odvisno od eudicije razvijalca. Eden od najhitrejših načinov (razlika v desetih sekundah) določitve razširitve je naslednja koda.

$ path_info = pathinfo ($ _ FILES [`photo1`] ["ime"]);

$ ext = $ path_info [`razširitev`];

V spremenljivki $ ext bomo shranili zahtevano razširitev. Ime datoteke je mogoče naključno nastaviti z uporabo md5. Če nameravate prenesti več datotek, jih je bolje naložiti v različne mape. Torej bo bolj priročno. Še posebej, če želite očistiti.

Koda za prenos bo naslednja.




preverjanje vrste datoteke php

razpoložljivost fotografij

če ($ _FILES [`photo1`] [`tmp_name`] == null)

{

echo ("

Datoteka ni podana.

Nazaj ...

") -

izstop;

}

///. Recimo, da imate dovoljenje za prenos velikih datotek (videoposnetkov) za projekt na strežniku, vendar bodo samo fotografije, uporabniki pa morajo omejiti

če (($ _FILES ["photo1"] ["velikost"]> 1024 * 1024 * 2)

{

?>

Največja dovoljena velikost slike 2 MB

Nazaj ...

izstop;

}

// ustvarite mape

// ustvarite mapo trenutnega meseca

če (! file_exists ("img /" datum ("M")))

{

mkdir ("img /" datum ("M"));

}

// ustvarite mapo trenutnega dne

če (! file_exists ("img /" datum ("M"). "/" datum ("d")))

{

mkdir ("img /" datum ("M"). "/" datum ("d"));

}

/// razširitev datoteke

$ path_info = pathinfo ($ _ FILES [`photo1`] ["ime"]);

$ ext = $ path_info [`razširitev`];

/// ustvarite ime datoteke

$ id = md5 (datum ("Y-M-d"));

če (kopija ($ _ FILES [ `photo1 "] [" tmp_name "]," img / ". datum (" M ")." / ". datum (" d ")." / ". $ id. $ ext) )

{

echo ("datoteka je bila uspešno prenesena");

}

vse nadaljnje ukrepe (pisanje v bazo podatkov itd.)

}

Več datotek

Prenos več datotek (PHP) se pojavi z uporabo dodatnih polj v obrazcu.

nalaganje več datotek php

Ta metoda ni zelo dobra, ker omejuje število datotek za prenos. Poleg tega se šteje za slab ton v programiranju. Poskusite storiti vse dinamično.

Idealna možnost je možnost, da izberete veliko število datotek hkrati s pritiskom na en sam gumb.

Če želite to narediti, oblikujemo obrazec s to kodo.

Upoštevajte, da se doda beseda več, ime pa je podano kot matrika []. V tem primeru bo polje $ _FILES nekoliko drugačno. Dobili boste matriko v matriki.

Za preverjanje lahko znova uporabite var_dump ($ _ FILES);

Vse vaše datoteke bodo nameščene v matriki, kot je ta:

  1. $ _FILES ["file1"] ["ime"] [0]
  2. $ _FILES ["file1"] ["ime"] [1]
  3. In tako naprej.

V oklepajih je zapisana številka datoteke v matriki. Štetje iz nič. Obdelujemo jih na enak način, preprosto nastavite zanko in pri dostopu do zgornje kode na koncu dodamo indeks [$ i].

$ i = 0;

medtem ko ($ _FILES ["file1"] ["ime"] [$ i]<> ``)

{

/// vstavite zgornjo kodo

}

Tako boste morali prenesti datoteke prek PHP v enem ciklu, brez nepotrebnega ponavljanja kode, kot je običajno, če uporabljate možnost statične datoteke (zadnja fotografija).

Zdieľať na sociálnych sieťach:

Príbuzný