KompyutaAina ya faili

Kupakia faili kwenye seva: PHP

Kupakua faili kupitia PHP - kesi ya kuvutia sana, ambapo lazima ufanyike kwa makini sana. Kwenye mtandao unaweza kupata mifano mingi ya utekelezaji wa kupakia faili, lakini si wote ni nzuri na kukutana kanuni za usalama.

Vitu hivyo haja ya kuleta hitimisho, hata kama inachukua muda mrefu. Ukiondoka pengo katika kanuni, basi server yako yote yanaweza kuathirika.

usalama

Pamoja na PHP faili upload kwa server unafanywa kwa urahisi kabisa. kanuni ni mfupi sana na rahisi. Michache tu ya mistari. Hata hivyo, njia hii ni hatari. muda mwingi zaidi na mistari ya kificho mbali na usalama.

hatari ni kwamba, kama huna kufanya ukaguzi, mshambulizi yoyote inaweza kupakia hati zao kwenye kompyuta yako. Katika hali hii, itakuwa na upatikanaji kamili. Yeye anaweza kufanya chochote anachotaka:

  • kufuta database,
  • kufuta faili maeneo;
  • kurekebisha files maeneo;
  • kuongeza matangazo yako na tovuti yako,
  • download virusi;
  • kuelekeza watumiaji wote katika maeneo yao;
  • na mambo mengine mengi ambayo kuja akili mshambulizi.

Unapaswa daima kuangalia kuwa majaribio ya kupakua faili kwa mtumiaji. Kwa mfano, kama wewe kupakia picha tu, ni muhimu ili kuhakikisha kwamba faili ni mfano kwa usahihi. Vinginevyo, utakuwa download kitu chochote.

Hasa jinsi ya kutekeleza ukaguzi, itakuwa kuonyeshwa, na hati ya moja kwa moja ya uchunguzi wa kupakia faili.

Kujenga PHP fomu

kupakia faili fomu ni rahisi sana. Kukosa browse kifungo na upload kifungo.

Inaelezea jinsi ya kuunda mifumo si, kwa sababu ni rahisi. maelekezo zaidi kudhani kwamba tayari una dhana ya msingi ya HTML (vinginevyo bila kuwa na kuangalia kwa taarifa juu ya kupakua PHP).

Lakini kumbuka kwamba data katika mfumo unahitaji kuongeza enctype sifa.

Vinginevyo, data kwenye faili handler si kuambukizwa.

Jinsi ni lazima kazi?

Wakati bonyeza browse kifungo unapaswa kuona sanduku ambapo aliuliza kuchagua faili.

Baada ya hapo itakuwa inahitajika kupokea njia ambapo file iko.

Kama njia haionekani, kutekeleza hatua tena.

Baada ya kubonyeza download file handler inaweza kutoa taarifa yoyote.

Kwa mfano, unaweza kuandika mstari inasema kwamba faili ni "hivyo na hivyo" Jina imepakiwa bila tatizo na "fulani na fulani" folder. Bila shaka, jina la faili atapewa siku zote tofauti.

Kwa kawaida, habari hii ni kutumika utatuzi code. Hivyo inawezekana kuthibitisha kuwa data huambukizwa na anaandika kutokea katika orodha ya taka. Hiyo, hata jina la faili ni si unahitajika. Kwa kuwa taarifa hizi za ziada kwamba mtumiaji haina haja.

Ni mantiki ya matokeo ya jina tu kama user downloads faili nyingi. Hivyo ndivyo, fikiria kidogo zaidi. Hebu si kupata mbele ya sisi wenyewe.

marekebisho

Katika PHP kupakia faili kwenye seva inahitaji mazingira fulani, ambayo lazima kufanyika katika faili php.ini. Faili hili lina mengi ya mazingira. Wote hatuna haja. Sisi ni nia ya mistari mitatu: file_uploads, upload_tmp_dir na upload_max_filesize.

Tafadhali kumbuka kuwa mipangilio hii itaathiri wote wa maeneo yako kwenye kompyuta, si tu mtu yeyote. Kwa hiyo, kuweka kiwango cha juu kabisa kwa kuzingatia ukweli kwamba utakuwa na kupakia watumiaji. Haipendekezwi kuweka kubwa mno.

Mara baada ya kubadili maadili katika mkataba huo, unahitaji kuanzisha upya server. Vinginevyo mazingira hayatafanya kazi, kama wao kusoma wakati wa mzigo server.

Unaweza kufanya hivyo katika console kwa kuunganisha kupitia SSH kwa server. Weka tu amri ya huduma httpd kuanzisha upya, na kisha mazingira yataanza kufanya kazi.

Njia nyingine - ya kuanzisha upya kwa njia ya ISP-jopo au kwa njia ya bili mtoa jopo.

array faili

Katika PHP kupakia faili hufanyika kwa safu $ _FILES. Ina taarifa zote kuhusu faili kwamba sisi kupakua.

Kuona nini habari zilizomo katika safu, kutosha kuandika katika faili handler zifuatazo.

Chagua faili yoyote na ubofye "Pakia." Kwenye ukurasa handler itaonyesha habari kwamba ni kuhifadhiwa katika $ _FILES. variable imeandikwa kabisa kwa herufi kubwa. PHP - lugha kubwa au ndogo.

Kama unaweza kuona, katika safu hii ina mengi ya mashamba. Wote ni muhimu sana kwetu. uwanja kwanza ina jina la faili katika mfumo ambayo hutumiwa katika kompyuta yako.

aina ya safu maalum ya aina ya faili. uwanja Tmp_name sambamba na jina la faili la muda. Baada ya mwisho wa script yatafutwa.

makosa shamba ina makosa code. Hii ilikuwa ni kidogo zaidi. Size - ukubwa katika ka.

makosa

Kufanyika kwa njia ya upload PHP file daima ni akiongozana na msimbo wa hitilafu. ujumbe wa kosa aliingia katika "makosa". screenshot makosa ni sifuri.

Fikiria thamani ya makosa yote:

Ilisemekana hapo juu kuhusu parameter ambayo yanaweza maalum katika HTML kawaida.

Huu ni mfano wa aina kupakua faili, ambayo inaonyesha mpaka wa kiasi cha faili lililopakiwa.

PHP: Faili ya kupakia script

Kama kila kufanyika kwa vitendo? Katika PHP kupakia faili hutokea nakala amri. Kama una nia ya suala la jinsi ya kupakua faili, jibu ni rahisi copy-, ambayo inatumia vigezo mbili - ya faili chanzo na faili marudio.

Lakini, kama ilivyoelezwa hapo juu, haiwezi kuwa vikwazo kwa sababu za usalama. Kwa mfano, kuangalia nini aina ya faili meli, unaweza kutumia aina ya uga katika safu $ _FILES. Kwanza, hebu kushughulikia ukaguzi, na kisha kuendelea na script ya

Tuseme unataka kuruhusu watumiaji kupakia picha na azimio la pekee GIF, JPEG au PNG. Onyesha inaweza kuwa kama hivi.

kama ($ _ FILES [ 'file_upload'] [ 'aina']! = "image / gif") {
echo "Samahani, kuhamasisha tu kupakua Gif-Files";
exit;
}

Kama unataka meli aina zote 3, tu kuongeza hali ya ziada ya aina nyingine ya picha.

Kunakili hufanyika hivi: nakala (picha 1, sura ya 2).

Kwa upande wetu, wakati kazi ni kupakua kutoka PC kwa server, unaweza kufanya hivyo

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

Hiyo ni, faili kunakiliwa kwa jina 1.jpg. Hii si sahihi kabisa. Katika hali hii, ni tu mfano. jina la faili ni daima muhimu kutaja tofauti, na kutaja ugani, kulingana na faili.

Kuamua ugani inaweza kuwa njia tofauti. Yote inategemea developer ya erudition. Njia moja ya haraka sana (tofauti ya kumi ya sekunde) kuamua ugani - hii ni kanuni ya pili.

$ Path_info = pathinfo ($ _ FILES [ 'Picha1'] [ "jina"]);

$ Ext = $ path_info [ 'ugani'];

variable $ ext tutahifadhi ugani taka. jina la faili inaweza kuweka katika random kutumia md5. Kama mpango wa kushusha mengi ya faili, ni vizuri meli yao ya folders tofauti. Hivyo itakuwa rahisi zaidi. Hasa, kama unataka asafishe.

kwa kushusha code itakuwa kama ifuatavyo.

/// Kwa picha

kama ($ _FILES [ 'Picha1'] [ 'tmp_name'] == null)

{

echo ( "

Unknown file.

Back ... ");

exit;

}

///. Sema kwa mradi wowote kwenye kompyuta anaruhusiwa kupakia faili kubwa (video), lakini kuna picha tu, na watumiaji haja ya kupunguza

ikiwa (($ _FILES [ "Picha1"] [ "kawaida"]> 1024 * 1024 * 2)

{

?>

unaoruhusiwa ukubwa wa 2 MB

Back ...

exit;

}

// kuunda folda

// kuunda folda ya mwezi sasa

ikiwa (! file_exists ( "img /". tarehe ( "M")))

{

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

}

// kuunda folda ya siku ya sasa

ikiwa (! file_exists ( "img /". tarehe ( "M"). "/". tarehe ( "d")))

{

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

}

/// faili ugani

$ Path_info = pathinfo ($ _ FILES [ 'Picha1'] [ "jina"]);

$ Ext = $ path_info [ 'ugani'];

/// kuzalisha jina la faili

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

kama (nakala ($ _ FILES [ 'Picha1'] [ "tmp_name"], "img /". tarehe ( "M"). "/". tarehe ( "d"). "/". $ id. $ ext) )

{

echo ( "Faili imefanikiwa kupakiwa");

}

/// hatua nyingine (kuingia katika orodha ya, na kadhalika. N.)

}

faili nyingi

Kupakia faili nyingi (PHP) hutokea kwa njia ya mashamba ya ziada katika fomu.

Njia hii si nzuri sana, kwani mipaka idadi ya files download. Aidha, ni kuchukuliwa fomu mbaya katika programu. Jaribu kufanya kila kitu nguvu.

chaguo bora - ni uchaguzi wa idadi kubwa ya files mara moja na kubwa ya kifungo moja.

Ili kufanya hivyo, kujenga sura kama kanuni hii.

Kumbuka kuwa pamoja mbalimbali ya neno, na jina hilo kutolewa kama safu []. Katika hali hii, $ _FILES safu itakuwa tofauti kidogo. Unaweza kupata safu ya mkusanyiko.

Mtihani inaweza tena kutumia var_dump ($ _ FILES);

Faili zako zote zitawekwa katika safu kama hii:

  1. $ _FILES [ "file1"] [ "jina"] [0]
  2. $ _FILES [ "file1"] [ "jina"] [1]
  3. Na kadhalika.

Katika mabano imeandikwa faili idadi katika safu. Kuhesabu na sifuri. Sisi kutibu yao kwa njia moja, kuuliza tu mzunguko na kwa kuwasiliana hapo juu ilivyoelezwa code mwisho wa ripoti kuongeza [$ i].

$ I = 0;

wakati ($ _FILES [ "file1"] [ "jina"] [$ i] <> '')

{

/// kuweka kanuni juu

}

Hivyo, utakuwa na kutokea kwa njia ya upload PHP file server katika mzunguko moja bila marudio yasiyo ya lazima ya kificho, kama ilivyo kawaida kama wewe kutumia toleo na idadi tuli ya mafaili (mara ya mwisho photo).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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