Kompjûters, File types
PHP: file upload nei de tsjinner
Ynladen triemmen fia PHP - in tige nijsgjirrich gefal, dêr't moatte wurde benadere hiel foarsichtich. Op ynternet kinne jo fine talleaze foarbylden fan de útfiering fan de triem upload, mar net allegearre fan har binne goed en foldwaan oan feiligens regeljouwing.
Sokke dingen moatte bringen ta in konklúzje, ek as it duorret lang. As jo litte in gat yn 'e koade, dan dyn hiele tsjinner kin kompromittearre.
feilichheid
Mei PHP file upload nei de tsjinner wurdt útfierd frij maklik. De koade is hiel koart en ienfâldich. Mar in pear rigels. Lykwols, dizze metoade is gefaarlik. Folle mear tiid en linen fan koade wei nei feilichheid.
It gefaar is dat, as jo net dwaan ynspeksjes, gjin oanfaller koe oplade harren skripts op jo tsjinner. Yn dit gefal, dan sil ha folsleine tagong. Hy kin dwaan wat er wol:
- wiskje de databank;
- delete triemen sites;
- feroarjen triemmen sites;
- foegje jo advertinsje oan jo website;
- download firussen;
- redirect alle brûkers op har sites;
- en in protte oare dingen dy't komme te mind oanfaller.
Jo moatte altyd kontrolearje dy't probearret te downloaden in triem foar de brûker. Bygelyks, as jo oplade ôfbyldings allinne, is it nedich om te kontrolearjen dat de triem in ôfbylding krekter. Oars, dan sille ynlade alles.
Krekt hoe te fieren ferifikaasje, dan sil te sjen wêze, mei de direkte ûndersyk skript triemmen oan te bieden.
Oanmeitsjen fan in PHP formulier
file upload foarm is hiel simpel. Missing de sneupknop en upload knoppen.
Beskriuwt hoe't to meitsjen formulieren sille net, want it is maklik. Fierdere ynstruksjes der fan út, dat jo al de basis konsepten fan HTML (oars jo soene net op syk nei ynformaasje oer it ynladen op PHP).
Mar der rekken mei dat de gegevens yn de foarm jo moatte heakjen de enctype skaaimerk.
Oars, gegevens op triem handlertsjinst sil net oerdroegen wurde.
Hoe't it moat wurkje?
Dêrnei dan sil it nedich te ûntfangen in paad wêr't de triem leit.
As it paad net ferskynt, útfiere de aksje wer.
Nei it klikken op de ynlaad triem handlertsjinst kin jaan alle ynformaasje.
Bygelyks, kinne jo skriuwe de line dy't stelt dat de triem is "sa en sa 'de namme is mei sukses opladen binne nei de" sa en sa "map. Fansels, de triemnamme sil jûn altyd oars.
Typysk, dizze ynformaasje wurdt brûkt om debug koade. Sa is it mooglik om te kontrolearjen dat de gegevens wurdt oerdroegen en skriuwt komme foar yn de winske Directory. Dat wurdt, sels de triem namme wurdt net oanjûn. Sûnt dizze ekstra ynformaasje dat de brûker net nedich.
It makket sin ta útfier de namme allinne as de brûker downloads meardere triemmen. Sa is it gefal, fine in bytsje fierder. Litte wy net gean foarút fan ússels.
oanpassing
Yn PHP file upload nei de tsjinner fereasket bepaalde ynstellings, dat moat dien wurde yn de php.ini triem. Dizze triem befettet in protte ynstellings. Se allegearre wy net nedich. Wy binne ynteressearre yn trije rigels: triem_uploads-, upload_tmp_dir en upload_max_filesize.
Hâld der rekken mei dat dizze ynstellings sille effekt ha al jo siden op de tsjinner, net allinnich gjin ien. Dêrom, om de maksimale grutte basearre op it feit dat jo sille moatte laden brûkers. It is net oan te rieden om te grut.
Sadree't jo feroarje de wearden yn dizze parameters, jim moatte werstart de tsjinner. Oars de ynstellings sil gjin effekt, sa't se lêzen oan 'e tiid fan' e tsjinner lading.
Jo kinne dit dwaan yn de konsole troch ferbinen fia SSH nei de tsjinner. Folje gewoan it kommando tsjinst httpd trochstart, en dan de ynstellings sille effekt.
In oare metoade - in trochstart troch ISP-paniel of fia fakturearring paniel oanbieder.
array triem
Yn PHP file upload wurdt dien troch de array $ _FILES. It befettet al de ynformaasje oer de triemmen dy't wy download.
Om te sjen hokker ynformaasje wurdt opnommen yn 'e rige, genôch om te skriuwen yn de triem handlertsjinst folgjende.
Selektearje eltse triem en klik op "Bied." Op de handler side sil werjaan de ynformaasje dy't wurdt opslein yn $ _FILES. De fariabele wurdt skreaun folslein mei haadletters. PHP - in taal-gefoelich.
Sa't jo sjen kinne, yn dizze array hat in soad fjilden. Alle dêrfan binne wichtich foar ús. De earste fjild befettet de triemnamme yn de foarm dêr't it yn brûkt wurdt op jo kompjûter.
It type kolom oantsjutte triem type. Tmp_name fjild oerien mei de namme fan de tydlike triem. Nei de ein fan it skript wurde wiske.
De flater fjild befettet in flater koade. Dat wie in bytsje fierder. Size - de maat yn bytes.
flaters
Útfierd troch de PHP file upload wurdt altiten beselskippe troch in flater koade. In flater berjocht ynfierd yn it "fout". De screenshot flater is nul.
Tink oan de wearde fan alle flaters:
Hjir is in stekproef foarm te downloaden fan de triem, dat wiist op in limyt fan it bedrach fan de oanbeane triem.
PHP: file upload script
As alles útfierd yn de praktyk? Yn PHP file upload optreedt kopy kommando. As jo ynteressearre binne yn de fraach fan hoe't te downloaden in triem, it antwurd is simpel copy-, dy't brûkt twa parameters - de boarne triem en de doeltriem.
Mar, sa't boppe steld is, dat kin net wêze beheind om feiligens redenen. Bygelyks, check út hokker soarte fan triem wy ship, kinne jo gebrûk meitsje fan it fjild type yn 'e rige $ _FILES. As earste, litte wy omgean mei de ynspeksje, en dan fierder nei de folsleine skript
Litte we sizze jo wolle tastean brûkers te laden in foto mei in resolúsje fan mar GIF, JPEG of PNG. Oanjaan kin wêze as dit.
as ($ _ triemen [ 'file_upload'] [ 'type']! = "image / gif") {
echo "Sorry, wy stypje it allinne ynladen Gif-Triemmen";
ôfslach;
}
As jo wolle it skip alle 3 soarten, gewoan foegjen in ekstra betingst oan de oare type fan ôfbylding.
Kopiearje wurdt dien as dit: copy (image 1, image 2).
Yn ús gefal, as it wurk wurdt it ynladen fan de PC nei de tsjinner, kinne jo dwaan
copy ($ _ triemen [ 'file_upload'] [ "tmp_name"], "1.jpg")
Dat is, de triem sil wurde kopiearre mei de namme 1.jpg. Dit is net hielendal korrekt. Yn dit gefal, it is allinnich in foarbyld. De ôfbyldnamme is altyd nedich om te spesifisearjen oars, en spesifisearje it taheaksel, ôfhinklik fan de triem.
Bepale de tafoeging kin wêze ferskillende wizen. It alles hinget ôf fan de ûntwikkelder fan de erudysje. Ien fan 'e fluchste manieren om (in ferskil fan tsienden fan sekonden) bepale de tafoeging - dit is de folgjende koade.
$ Path_info = pathinfo ($ _ triemen [ 'photo1'] [ "namme"]);
$ Ext = $ path_info [ 'extension'];
De fariabele $ it ext wy sille opslaan de winske ekstinsje. In triem namme kin ynsteld wurde op samar mei help MD5. As jo fan doel te downloaden in protte triemmen, is it better om te ship se oan ferskillende mappen. Sa sil it wêze handiger. Yn it bysûnder, as jo wolle taken suverje.
to download de koade sil wêze as folget.
/// Mei foto
as ($ _FILES [ 'photo1'] [ 'tmp_name'] == null)
{
echo ( "
Unbekende triem. strong> p> Werom ... p> "); ôfslach; } ///. Siz jo foar eltse projekt op de tsjinner is tastien om te laden grutte triemmen (video), mar der binne allinnich foto, en brûkers moatte beheine as (($ _FILES [ "photo1"] [ "grutte"]> 1024 * 1024 * 2) { ?> De maksimum tastien grutte fan 2 MB strong> Werom ... p> ôfslach; } // meitsje mappen // meitsje in map fan it aktuele moanne as (! file_exists ( "img /". date ( "M"))) { mkdir ( "img /" date ( "M").); } // meitsje in map fan it aktuele dei as (! file_exists ( "img /". date ( "M"). "/". date ( "d"))) { mkdir ( "img /" date ( "M") "/" date ( "d") ...); } /// triem taheaksel $ Path_info = pathinfo ($ _ triemen [ 'photo1'] [ "namme"]); $ Ext = $ path_info [ 'extension']; /// generearje triemnamme $ ID = MD5 (datum ( "NS_USER_TALK")); as (kopy ($ _ triemen [ 'photo1'] [ "tmp_name"], "img /". date ( "M"). "/". date ( "d"). "/". $ id. $ ext) ) { echo ( "Triem mei sukses opladen"); } /// eltse fierdere aksje (yngong yn 'e databank, ensafuorthinne. N.) } Opladen meardere triemmen (PHP) plakfynt troch de wei fan oanfoljende fjilden yn de foarm. Dizze metoade is net hiel goed, sa't it Beheint it tal triemmen om te downloaden. Boppedat, it wurdt beskôge minne foarm yn programmearring. Besykje te dwaan alles dynamysk. De ideale opsje - it is in kar fan in grut oantal triemmen yn ien kear troch te drukken op in inkele knop. Om dit te meitsje in foarm as dizze koade. P> Form> Tink derom dat de meardere oanfolling fan it wurd, en de namme wurdt jûn as in rige is []. Yn dit gefal, $ _FILES array sil wêze wat oars. Jo krije dan in rige fan de rige. Om testen kinne wer gebrûk meitsje fan de var_dump ($ _ Files); Al jo triemen wurde pleatst yn de rige like this: Tusken heakjes is de triem nûmer yn 'e pronk. Te rekkenjen fan nul. Wy behannelje se op deselde wize, krekt freegje de syklus en troch kontakt op mei de boppesteande-beskreaun koade oan 'e ein fan' e yndeks taheakjen [$ i]. $ I = 0; wylst ($ _FILES [ "file1"] [ "namme"] [$ i] <> '') { /// plakke it boppesteande koade } Sa, dan sille moatte happen troch in PHP file upload nei de tsjinner yn ien fytse sûnder ûnnedige werhelling fan 'e koade, sa't is meastentiids it gefal as jo brûke de ferzje mei in statyske oantal triemmen (lêste foto). meardere triemmen
Similar articles
Trending Now