RekenaarsLêertipes

PHP: lêer oplaai na die bediener

Aflaai van lêers via PHP - 'n baie interessante geval, waarheen moet baie versigtig benader. Op die internet kan jy baie voorbeelde van die implementering van lêer oplaai vind, maar nie almal van hulle is goed en voldoen aan die veiligheid regulasies.

Sulke dinge nodig het om 'n slotsom te bring, selfs al neem dit 'n lang tyd. As jy 'n gaping laat in die kode, dan is jou hele bediener in gedrang kan kom.

veiligheid

Met PHP lêer oplaai na die bediener maklik uitgevoer word. Die kode is baie kort en eenvoudig. Net 'n paar lyne. Maar hierdie metode is gevaarlik. Veel meer tyd en reëls van die kode weg na veiligheid.

Die gevaar is dat, as jy nie inspeksies doen, enige aanvaller kon hul skrifte op jou bediener te laai. In hierdie geval, sal dit volle toegang het. Hy kan doen wat hy wil:

  • die databasis te skrap;
  • verwyder lêers webwerwe;
  • verander lêers webwerwe;
  • Voeg jou advertensie om jou webwerf;
  • aflaai virusse;
  • lei alle gebruikers op hul webwerwe;
  • en baie ander dinge wat kom om aanvaller omgee.

Jy moet altyd kyk wat poog om 'n lêer af te laai vir die gebruiker. Byvoorbeeld, as jy beelde net oplaai, is dit nodig om te bevestig dat die lêer is 'n beeld akkuraat. Andersins, sal jy enigiets af te laai.

Presies hoe om te implementeer verifikasie, sal dit vertoon word, met die direkte eksamenskrif om lêers te laai.

Die skep van 'n PHP vorm

lêer oplaai vorm is baie eenvoudig. Ontbreek die blaai knoppie en oplaai knoppies.

Beskryf hoe om te skep vorms sal nie, want dit is maklik. Verdere instruksies aanvaar dat jy reeds die basiese konsepte van HTML (anders sou jy nie op soek na inligting oor die aflaai op PHP).

Maar let op dat die data in die vorm wat jy nodig het om die enctype kenmerk voeg.

Anders, data op lêer hanteerder sal nie oorgedra word.

Hoe dit moet werk?

As jy kliek op die blaai knoppie moet jy 'n boks waar gevra word om 'n lêer te kies sien.

Daarna is dit nodig sal wees om 'n pad waar die lêer is geleë ontvang.

As die pad nie verskyn nie, weer uit te voer die aksie.

Nadat u op die aflaai-lêer hanteerder kan enige inligting gee.

Byvoorbeeld, kan jy die lyn wat bepaal dat die lêer is "so en so" die naam is opgelaai na die "so en so" gids skryf. Natuurlik sal die lêernaam gegee altyd anders.

Tipies, is hierdie inligting gebruik om debug kode. is dus moontlik om te bevestig dat die data oorgedra word en skryf voorkom in die gewenste gids. Dit is, selfs die lêernaam is nie aangedui. Aangesien hierdie ekstra inligting wat die gebruiker hoef nie.

Dit maak sin om uitset die naam slegs as die gebruiker veelvuldige lêers afgelaai. Dit is die geval, oorweeg 'n bietjie verder. Laat ons nie voor ons kry.

aanpassing

In PHP lêer oplaai na die bediener vereis sekere instellings, wat gedoen moet word in die php.ini lêer. Hierdie lêer bevat 'n baie instellings. Hulle het almal ons nodig het nie. Ons is geïnteresseerd in drie lyne: van lêers, upload_tmp_dir en upload_max_filesize.

Neem asseblief kennis dat hierdie instellings al jou plekke sal beïnvloed op die bediener, nie net enige een. Daarom, om die maksimum grootte wat gebaseer is op die feit dat jy sal hê om gebruikers te laai gestel. Dit word nie aanbeveel te groot om op te stel.

Sodra jy die waardes in hierdie parameters te verander, moet jy die bediener weer te begin. Anders sal die instellings nie in werking tree, as hulle lees ten tyde van die bediener vrag.

Jy kan dit doen in die konsole deur die koppeling via SSH na die bediener. Tik eenvoudig die opdrag diens httpd weer begin, en dan die instellings van krag sal wees.

Nog 'n metode - 'n herlaai deur ISP-paneel of deur faktuur paneel verskaffer.

verskeidenheid lêer

In PHP lêer oplaai word gedoen deur die skikking $ _FILES. Dit bevat al die inligting oor die lêers wat ons af te laai.

Om te sien watter inligting is vervat in die skikking, genoeg om te skryf in die lêer hanteerder volgende.

Kies 'n lêer en klik "op te laai." Op die hanteerder bladsy sal die inligting wat gestoor word in $ _FILES vertoon. Die veranderlike heeltemal geskryf met hoofletters. PHP - 'n taal-sensitief.

Soos jy kan sien, in hierdie reeks het 'n baie velde. Almal van hulle is vir ons belangrik. Die eerste veld bevat die lêernaam in die vorm waarin dit gebruik word op jou rekenaar.

Die tipe kolom gespesifiseer tipe lêer. Tmp_name veld ooreenstem met die naam van die tydelike lêer. Na die einde van die script sal uit gewis word.

Die fout veld bevat 'n fout kode. Dit was 'n bietjie verder. Grootte - die grootte in grepe.

foute

Uitgevoer deur die PHP-lêer oplaai is altyd vergesel deur 'n fout kode. 'N fout boodskap in die "fout" geloop. Die kiekie fout is nul.

Oorweeg die waarde van al die foute:

Dit is bo oor die parameter wat in die gewone HTML kan gespesifiseer word gesê.

Hier is 'n voorbeeld vorm om die lêer wat 'n beperking van die bedrag van die opgelaaide lêer dui af te laai.

PHP: lêer oplaai script

Soos almal uit in die praktyk uitgevoer? In PHP kom oplaai kopie opdrag. As jy belangstel in die vraag van hoe om 'n lêer af te laai is, die antwoord is eenvoudig copy-, wat twee parameters gebruik - die bron lêer en die bestemming lêer.

Maar, soos hierbo genoem, dit kan nie beperk om veiligheidsredes wees. Byvoorbeeld, kyk na watter soort lêer ons skip, kan jy die tipe veld gebruik in die skikking $ _FILES. Eerstens, laat ons gaan met inspeksie, en dan beweeg op na die volle script

Kom ons sê jy wil gebruikers toelaat om 'n foto met 'n resolusie van net GIF, JPEG of PNG oplaai. Dui dit kan wees soos hierdie.

indien ($ _ FILES [ 'file_upload'] [ 'tipe']! = "image / gif") {
eggo "Jammer, ons ondersteun net die aflaai van Gif-lêers";
uitgang;
}

As jy wil om te skip al 3 tipes, net voeg 'n bykomende voorwaarde om die ander tipe van beeld.

Kopiëring gedoen soos volg: kopie (image 1, beeld 2).

In ons geval, wanneer die werk is die aflaai van die rekenaar na die bediener, jy kan dit doen

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

Dit wil sê, die lêer gekopieer sal word met die naam 1.jpg. Dit is nie heeltemal korrek. In hierdie geval, dit is net 'n voorbeeld. Die lêernaam is altyd nodig om anders te spesifiseer, en spesifiseer die uitbreiding, afhangende van die lêer.

Bepaal die uitbreiding kan wees op verskillende maniere. Dit hang alles af van die ontwikkelaar van geleerdheid. Een van die vinnigste maniere om ( 'n verskil van tiendes van sekondes) bepaal die uitbreiding - dit is die volgende kode.

$ Path_info = pathinfo ($ _ FILES [ 'photo1'] [ "naam"]);

$ Ext = $ path_info [ 'n uitbreiding '];

Die veranderlike $ die ext sal ons die gewenste uitbreiding stoor. A lêernaam kan ingestel word na willekeur gebruik van MD5. As jy van plan is om 'n baie lêers te laai, is dit beter om hulle te stuur na verskillende dopgehou. So sal dit makliker wees. In die besonder, as jy wil reinig.

om die kode soos volg sal wees af te laai.

/// Met foto

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

{

eggo ( "

onbekend lêer.

Terug ... ");

uitgang;

}

///. Sê jy vir 'n projek op die bediener is toegelaat om groot lêers (video) laai, maar daar is net foto's, en gebruikers moet beperk

indien (($ _FILES [ "photo1"] [ "grootte"]> 1024 * 1024 * 2)

{

?>

die maksimum toegelate grootte van 2 MB

Terug ...

uitgang;

}

// dopgehou te skep

// skep 'n gids van die huidige maand

indien (! file_exists ( "img /". datum ( "M")))

{

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

}

// skep 'n gids van die huidige dag

indien (! file_exists ( "img /". datum ( "M"). "/". datum ( "d")))

{

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

}

/// lêeruitbreiding

$ Path_info = pathinfo ($ _ FILES [ 'photo1'] [ "naam"]);

$ Ext = $ path_info [ 'n uitbreiding '];

/// lêernaam genereer

$ Id = md5 (datum ( "Jmd"));

indien (kopie ($ _ FILES [ 'photo1'] [ 'tmp_name "]," img / ". datum (" M ")." / ". datum (" d ")." / ". $ ID. $ uitbr) )

{

eggo ( "Die lêer is suksesvol gelaai");

}

/// enige verdere optrede (inskrywing in die databasis, en so aan. N.)

}

veelvuldige lêers

Oplaai veelvuldige lêers (PHP) vind plaas deur middel van bykomende velde in die vorm.

Hierdie metode is nie baie goed, want dit beperk die aantal lêers af te laai. Verder, is dit beskou as slegte vorm in programmering. Probeer om alles dinamiese doen.

Die ideale opsie - dit is 'n keuse van 'n groot aantal lêers in 'n keer deur te druk op 'n enkele knoppie.

Om dit te doen, skep 'n vorm soos hierdie kode.

Let daarop dat die verskeie toevoeging van die woord, en die naam word gegee as 'n skikking []. In hierdie geval, sal $ _FILES verskeidenheid effens anders wees. Jy sal 'n verskeidenheid van die skikking te kry.

Om te toets kan weer gebruik die var_dump ($ _-lêers);

Al jou lêers sal die skikking soos hierdie geplaas word:

  1. $ _FILES [ "bestand1"] [ "naam"] [0]
  2. $ _FILES [ "bestand1"] [ "naam"] [1]
  3. En so aan.

In hakies geskryf is die lêer nommer in die skikking. Tel van nul. Ons behandel hulle op dieselfde manier, net vra die siklus en deur kontak met die bogenoemde beskryf kode aan die einde van die indeks te voeg [$ i].

$ I = 0;

terwyl ($ _FILES [ "bestand1"] [ "naam"] [$ i] <> '')

{

/// plak die bogenoemde kode

}

So, sal jy het om te gebeur deur 'n PHP-lêer oplaai na die bediener in een siklus sonder onnodige herhaling van die kode, soos gewoonlik die geval as jy die weergawe gebruik met 'n statiese aantal lêers (laaste foto).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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