KomputilojDosiertipoj

PHP: dosiero alŝuto al la servilo

Elŝuti dosierojn per PHP - tre interesa kazo, al kiu devas esti alproksimiĝis tre atente. En Interreto vi trovos multajn ekzemplojn de la efektivigo de dosiero alŝuto, sed ne ĉiuj el ili estas bonaj kaj renkonti sekureco regularoj.

Tiaj aferoj devas alporti al konkludo, eĉ se ĝi prenas longan tempon. Se vi lasas breĉon en la kodo, do via tuta servilo povas esti kompromitita.

sekureco

Kun PHP dosieron alŝuti al la servilo estas efektivigita tute facile. La kodo estas tre mallonga kaj simpla. Nur kelkaj linioj. Tamen, ĉi tiu metodo estas danĝera. Multe pli da tempo kaj linioj de kodo for al sekureco.

La danĝero estas ke, se vi ne faros inspektoj, ajna atacante povus alŝuti siajn manuskriptojn en via servilo. En ĉi tiu kazo, ĝi havos plenan aliron. Li povas fari kion ajn li volas:

  • forviŝi la datumbazo;
  • forviŝi dosierojn lokoj;
  • modifi dosierojn lokoj;
  • aldoni vian anoncon al via retejo;
  • elŝuti virusoj;
  • redirekti ĉiuj uzantoj sur iliaj lokoj;
  • kaj multaj aliaj aferoj kiuj venas al atenti atacante.

Vi devas ĉiam kontroli ke provas elŝuti dosieron por la uzanto. Ekzemple, se vi alŝuti bildojn nur, estas necese kontroli ke la dosiero estas bildo precize. Alie, vi elŝuti ion ajn.

Ekzakte kiel apliki konfirmo, ĝi estos montrita, kun la rekta ekzameno skribo por alŝuti dosierojn.

Krei PHP formo

dosiero alŝuta formularo estas tre simpla. Mankas la esplor-butonon kaj alŝuti butonoj.

Priskribas kiel krei formojn ne faros, ĉar ĝi estas facila. Plue instrukciojn supozas, ke vi jam havas la bazajn konceptojn de HTML (alie vi ne estus serĉanta informoj pri elŝuti sur PHP).

Rimarku, ke la datumoj en la formo vi devas aldoni la enctype eco.

Alie, datumoj sur dosiero traktilo ne transdonitaj.

Kiel ĝi devus labori?

Kiam vi alklakas la foliumi butonon vi vidos skatolon kie demandis por elekti dosieron.

Poste ĝi estos postulata por ricevi vojeton kie la dosieron.

Se la vojo ne aperas, plenumi la agon denove.

Post alklako sur la elŝuta dosiero traktilo povas doni ajnan informon.

Ekzemple, Vi povas skribi la linion kiu diras, ke la dosiero estas "tiel kaj tiel" la nomo estis sukcese alŝutita al la "Tie kaj" dosierujo. Kompreneble, la dosiernomo estos donita ĉiam malsama.

Tipe, ĉi tiu informo estas uzita por elpurigi kodon. Tiel eblas kontroli ke la datumoj estas transdonitaj kaj skribas okazas en la deziratan dosierujon. Tio estas, eĉ la dosiernomo ne estas indikita. Ekde tiu ekstra informo kiun la uzanto ne bezonas.

Ĝi havas sentita produktadon la nomon nur se la uzanto elŝutas multoblajn dosierojn. Tia estas la kazo, konsideri iom pli. Ni ne anticipos ni mem.

alĝustigo

En PHP dosiero alŝuto al la servilo postulas iujn agordojn, kio devus esti farita en la php.ini dosiero. Ĉi tiu dosiero entenas multajn agordojn. Ĉiuj ni ne bezonas. Ni interesiĝas pri tri linioj: file_uploads, upload_tmp_dir kaj upload_max_filesize.

Bonvolu noti ke ĉi tiuj agordoj influos ĉiuj viaj lokoj sur la servilo, ne nur iu. Tial, por agordi la maksimuman grandecon surbaze de la fakto ke vi devas ŝargi uzantojn. Ĝi ne rekomendas fiksi tro granda.

Iam vi ŝanĝos la valoroj en tiuj parametroj, necesas restartigi la servilo. Alie la agordojn estos nur valida, kiam ili legis en la tempo de la servilo ŝarĝo.

Vi povas fari tion en la konzolo de konektanta per SSH al la servilo. Simple skribu la ordonon servo httpd rekomenco, kaj poste la agordojn prenos efikon.

Alia metodo - rekomenco tra ISP-panelo aŭ tra fakturado panelo provizanto.

array dosieron

En PHP dosiero alŝuto estas farita de la tabelo $ _FILES. Ĝi enhavas ĉiujn informojn pri la dosierojn kiujn ni elŝuti.

Vidi kion informo estas enhavita en la tabelo, sufiĉe por skribi en la dosieron traktilo sekvis.

Elektu ajnan dosieron kaj alklaku "Alŝutu". Sur la traktilo paĝo montros la informon kiu estas stokita en $ _FILES. La variablo estas skribita tute per majuskloj. PHP - lingvo-sentema.

Kiel vi povas vidi, en ĉi tiu tabelo havas multajn kampojn. Ĉiuj ili estas gravaj por ni. La unua kampo enhavas la dosiernomo en la formo en kiu estas uzata en via komputilo.

La tipo kolumno specifita dosiertipo. Tmp_name kampo korespondas al la nomo de la provizora dosiero. Post la fino de la skripto estos forigita.

La eraro kampo enhavas eraron kodo. Tio estis iom pli. Grandeco - la grandeco en bajtoj.

eraroj

Efektivigita per la PHP-dosiero alŝuto ĉiam akompanita per eraro kodo. Eraro mesaĝo eniris en la "eraro". La ekrankopio eraro estas nul.

Konsideru la valoron de ĉiuj eraroj;

Oni diris supre pri la parametro kiu povas esti precizigita en la kutima HTML.

Jen specimeno formo por elŝuti la dosieron, kiu indikas limon de la sumo de la alŝutita dosiero.

PHP: dosiero alŝuta skribo

Kiel ĉiuj efektivigitaj en praktiko? En PHP dosiero alŝuto okazas kopion ordonon. Se vi interesiĝas pri la demando de kiel elŝuti dosieron, la respondo estas simpla copy-, kiu uzas du parametroj - la fontdosieron kaj la celloko dosiero.

Sed, kiel komencita pli supre, ĝi ne povas esti limigita pro sekureckialoj. Ekzemple, rigardu kia dosier ni ŝipo, vi povas uzi la kampo tipo en la tabelo $ _FILES. Unue, ni pritrakti inspektado, kaj tiam movi sur al la plena skribo

Imagu ke vi volas permesi al uzantoj alŝuti foton kun rezolucio de nur GIF, JPEG aŭ PNG. Indiki ĝi povas esti tiel.

se ($ _ DOSIEROJ [ 'file_upload'] [ 'tipo']! = "image / gif") {
echo "Pardonu, ni apogas nur elŝuti Gif-dosieroj";
eliro;
}

Se vi volas ekspedi ĉiuj 3 specoj, simple aldoni kroman kondiĉon al la alia tipo de bildo.

Kopii estas farita tiel: Kopio (bildo 1, bildo 2).

En nia kazo, kiam la verko estas elŝuti de la PC al la servilo, vi povas fari tion

Kopio ($ _ DOSIEROJ [ 'file_upload'] [ 'tmp_name "]," 1.jpg ")

Tio estas, la dosiero estos kopiita kun la nomo 1.jpg. Ĉi tio ne estas tute ĝusta. En ĉi tiu kazo, estas nur ekzemplo. La dosiernomo estas ĉiam necese specifi malsaman, kaj specifi la etendo, depende de la dosiero.

Determini la etendon eblas malsamaj manieroj. Tute dependas de la ellaboranto de erudicio. Unu el la plej rapida manieroj (diferenco de dekonoj de sekundoj) determini la etendon - ĉi tiu estas la sekva kodo.

$ Path_info = pathinfo ($ _ DOSIEROJ [ 'photo1'] [ 'nomo']);

$ Ext = $ path_info [ 'pligrandigo'];

La variablo $ la ext ni stokas la deziratan etendo. Al dosiernomo eblas agordi hazarde uzante MD5. Se vi planas elŝuti multajn dosierojn, estas pli bone al la sxipo ilin al malsamaj dosierujoj. Do estos pli oportuna. Aparte, se vi volas purigi.

elŝuti la kodo estos jene.

/// Kun foto

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

{

eĥo ( "

Nekonata dosiero.

Reen ... ");

eliro;

}

///. Diru vi por ajna projekto sur la servilo estas permesita ŝargi grandajn dosierojn (video), sed estas nur bildoj, kaj uzantoj devas limigi

se (($ _FILES [ "photo1"] [ "grandeco"]> 1024 * 1024 * 2)

{

?>

La maksimuma permesita grandeco de 2 MB

Reen ...

eliro;

}

// krei dosierujojn

// krei dosierujon de la aktuala monato

se (! file_exists ( "img /". daton ( "M")))

{

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

}

// krei dosierujon de la aktuala tago

se (! file_exists ( "img /". daton ( "M"). "/". daton ( "d")))

{

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

}

/// dosiersufikso

$ Path_info = pathinfo ($ _ DOSIEROJ [ 'photo1'] [ 'nomo']);

$ Ext = $ path_info [ 'pligrandigo'];

/// generi dosiernomo

$ Id = md5 (dato ( "YMd"));

se (kopio ($ _ DOSIEROJ [ 'photo1'] [ 'tmp_name "]," img / ". daton (" M ")." / ". daton (" d ")." / ". $ id. $ ext) )

{

eĥo ( "Dosiero sukcese alŝutita");

}

/// pliajn ago (eniro en la datumbazo, kaj tiel plu. N.)

}

multoblajn dosierojn

Alŝuti plurajn dosierojn (PHP) okazas per aldonaj kampoj en la formo.

Tiu metodo ne estas tre bona, ĉar ĝi limigas la numeron de dosieroj por elŝuti. Cetere, oni konsideras malbona formo en programado. Provu fari ĉion dinamika.

La ideala elekto - estas elekto de granda nombro da dosieroj samtempe premante sola butono.

Por fari tion, krei formon kiel tiu kodo.

Notu ke la multoblajn aldono de la vorto, kaj la nomo estas donita kiel tabelo []. En ĉi tiu kazo, $ _FILES tabelo estos iomete malsamaj. Vi ricevos tabelo de la tabelo.

Por testi povas denove uzi la var_dump ($ _ DOSIEROJ);

Ĉiuj viaj dosieroj estos metita en la tabelo jene:

  1. $ _FILES [ "file1"] [ "nomo"] [0]
  2. $ _FILES [ "file1"] [ "nomo"] [1]
  3. Kaj tiel plu.

En krampoj estas skribita la dosieron nombro en la tabelo. Rakontante de nulo. Ni traktas ilin same, nur demandi la ciklo kaj kontaktante la supre priskribita kodon ĉe la fino de la indekso aldonante [$ i].

$ Mi = 0;

dum ($ _FILES [ "file1"] [ "nomo"] [$ i] <> '')

{

/// algluu la supre kodo

}

Tiel, vi devos pasi por PHP-dosiero alŝuto al la servilo en unu ciklo sen nenecesa ripeto de la kodo, kiel kutimas esti la kazo, se vi uzas la versio kun statika da dosieroj (lasta foto).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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