PočítačeTypy súborov

PHP: nahranie súboru na server

Sťahovanie súborov cez PHP - veľmi zaujímavý prípad, ku ktorému je potrebné pristupovať veľmi opatrne. Na internete môžete nájsť mnoho príkladov vykonávania nahranie súboru, ale nie všetky z nich sú dobré a v súlade s bezpečnostnými predpismi.

Takéto veci treba priviesť k záveru, aj keď to trvá dlhú dobu. Ak necháte medzera v kóde, potom celý váš server môže byť ohrozená.

bezpečnosť

S PHP súbor nahrať na server sa vykonáva pomerne ľahko. Kód je veľmi krátka a jednoduchá. Len pár riadkov. Avšak, táto metóda je nebezpečné. Oveľa viac času a riadkov kódu preč do bezpečia.

Nebezpečenstvo spočíva v tom, ak nechcete robiť inšpekcie, akýkoľvek útočník mohol nahrať svoje skripty na svojom serveri. V tomto prípade bude mať plný prístup. On môže robiť, čo chce:

  • odstráňte databázu;
  • mazať súbory lokalít ad hoc;
  • modifikovať súbory lokalít ad hoc;
  • pridať vašu reklamu na svoje webové stránky;
  • sťahovať vírusy;
  • presmerovať všetkých užívateľov na svojich stránkach;
  • a mnoho ďalších vecí, ktoré prichádzajú na myseľ útočníka.

Vždy by ste mali skontrolovať, či sa pokúsi stiahnuť súbor pre užívateľov. Napríklad, ak si nahrať iba obrázky, je nutné overiť, že súbor je obraz presne. V opačnom prípade budete sťahovať čokoľvek.

Presne tak, ako vykonávať kontrolu, bude zobrazený s priamym vyšetrovacej skriptu právo vkladať.

Vytvorenie formulára PHP

nahratí súboru forma je veľmi jednoduché. Chýba tlačidlá na tlačidlo Prehľadávať a nahrať.

Popisuje, ako vytvoriť formy nebude, pretože je to jednoduché. Ďalšie pokyny predpokladajú, že už máte základné pojmy HTML (inak by ste sa hľadajú informácie o sťahovaní na PHP).

Ale všimnite si, že dáta v podobe budete musieť pridať atribút enctype.

V opačnom prípade nebudú odovzdané údaje o psovoda súboru.

Ako by to malo fungovať?

Keď kliknete na tlačidlo Browse, mali by ste vidieť okno, kde sa výzva na výber súboru.

Potom, čo že to bude potrebné prijať cestu, kde je súbor umiestnený.

Ak sa neobjaví cesta, vykonať akciu znova.

Po kliknutí na psovoda stiahnutie súboru môže poskytnúť žiadne informácie.

Napríklad môžete napísať riadok oznamujúce, že súbor je "tak a tak" názov bol úspešne nahraný na "také a také" zložku. Samozrejme, že názov súboru byť zakaždým iná.

Zvyčajne je táto informácia sa používa na ladenie kódu. Tak je možné overiť, že dáta sú prenášané a píše sa vyskytujú v požadovanom telefónnom zozname. To znamená, že dokonca aj názov súboru je neprístupné. Vzhľadom k tejto dodatočnej informácie, ktoré užívateľ nepotrebuje.

Má zmysel, aby vystupoval menom len v prípade, že používateľ stiahne viac súborov. Taký je prípad, zvážte o kúsok ďalej. Poďme sa dostať pred nás.

nastavenie

PHP upload súborov na server vyžaduje určité nastavenia, ktorá by mala byť vykonaná v súbore php.ini. Tento súbor obsahuje veľké množstvo nastavení. Všetci nepotrebujeme. Zaujímame sa o troch riadkoch: file_uploads, upload_tmp_dir a upload_max_filesize.

Upozorňujeme, že toto nastavenie bude mať vplyv na všetky svoje stránky na serveri, nie len jednu. Ak chcete teda nastaviť maximálnu veľkosť založenú na tom, že budete musieť načítať užívateľa. To sa neodporúča, aby nastavená príliš veľká.

Po zmene hodnoty v týchto parametroch, je potrebné reštartovať server. V opačnom prípade nebude nastavenie sa prejaví, keď si prečítajú v čase zaťaženia servera.

To možno vykonať v konzole pomocou pripojenia cez SSH na server. Stačí zadať httpd restart príkazu služby, a potom nastavenie sa prejaví.

Ďalšie metóda - reštart pomocou ISP-panelu, alebo prostredníctvom poskytovateľa fakturačnú panelu.

súbor Array

V PHP je nahrať súbor vykonáva pomocou poľa $ _files. Obsahuje všetky informácie o súboroch, ktoré sme sťahovať.

Ak chcete zistiť, aké informácie sú obsiahnuté v poli, stačí napísať v psovoda súbore nasledujúcej.

Vyberte súbor a kliknite na tlačidlo "Nahrať". Na stránke psovoda sa zobrazia informácie, ktoré sú uložené v $ _files. Premenná je celkom napísané veľkými písmenami. PHP - jazyk-citlivý.

Ako vidíte, v tomto poli má veľa polí. Všetky z nich sú pre nás dôležité. Prvé pole obsahuje názov súboru v podobe, v akej sa používa na svojom počítači.

Stĺpec typ zadaný typ súboru. Tmp_name pole korešponduje s názvom dočasného súboru. Po ukončení skriptu budú zmazané.

Pole chyby obsahuje kód chyby. Jednalo sa o kúsok ďalej. Size - veľkosť v bajtoch.

chyby

Vykonávané prostredníctvom PHP upload je vždy sprevádzané chybovým kódom. Chybové hlásenie zapísaný do "chyby". Chyba screenshot je nulová.

Zvážiť hodnotu všetkých chýb:

To bolo povedané vyššie o parameter, ktorý môže byť stanovený v obvyklom formáte HTML.

Tu je ukážka formulára pre stiahnutie súboru, ktorý udáva limit množstvo nahraného súboru.

PHP: nahranie súboru skriptu

Ako všetko robí v praxi? V PHP nahrať súbor vyskytuje príkaz kopírovať. Ak máte záujem o otázku, ako k stiahnutiu súboru, odpoveď je jednoduchá proti kopírovaniu, ktorý používa dva parametre - zdrojový súbor a cieľový súbor.

Ale, ako je uvedené vyššie, nemôže byť obmedzený z bezpečnostných dôvodov. Napríklad, pozrite sa na aký typ súboru sme loď, môžete použiť typ poľa v poli $ _files. Po prvé, poďme sa zaoberajú kontrolou, a potom prejsť na plné skript

Povedzme, že chcete povoliť používateľom nahrávať fotografie s rozlíšením iba GIF, JPEG alebo PNG. Naznačujú, že môže byť takto.

if ($ _ FILES [ 'file_upload'] [ 'type']! = "image / gif") {
echo "Ospravedlňujeme sa, ale podporujeme len sťahovanie GIF-súbory";
exit;
}

Ak chcete odoslať všetky 3 typy, stačí pridať ďalšiu podmienku na iný typ obrazu.

Kopírovanie sa vykonáva napríklad takto: kópia (obrázok 1, obrázok 2).

V našom prípade, keď je dielo sťahovanie z počítača na server, môžete tak urobiť

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

To znamená, že súbor sa skopíruje s názvom 1.jpg. To nie je úplne správne. V tomto prípade je to len príklad. Názov súboru je vždy nutné špecifikovať odlišné, a určite predĺženie, v závislosti na súbore.

Určiť rozšírenie môže byť rôznymi spôsobmi. To všetko záleží na vývojári erudícia. Jeden z najrýchlejších spôsobov, ako (rozdiel desatín sekundy) zistenie rozšírenia - to je ďalší kód.

$ PATH_INFO = pathinfo ($ _ FILES [ 'photo1'] [ "name"]);

$ Ext = $ PATH_INFO [ 'rozšírenie'];

Premenná $ EXT budeme uloženie požadovaného predĺženia. Názov súboru je možné nastaviť na náhodné pomocou MD5. Ak máte v úmysle stiahnuť veľké množstvo súborov, je lepšie, aby loď je do rôznych zložiek. Tak to bude oveľa pohodlnejšie. Najmä, ak chcete očistiť.

k stiahnutiu kód bude vyzerať takto.

/// S foto

if ($ _files [ 'photo1'] [ 'tmp_name'] == null)

{

echo (

Neznámy súbor ".

Back ... ");

exit;

}

///. Povedzme, že pre každý projekt na serveri nemá nahrať veľké súbory (video), ale tam sú len obrazy, a užívatelia potrebujú obmedziť

if (($ _files [ "photo1"] [ "veľkosť"]> 1024 * 1024 * 2)

{

?>

je maximálna povolená veľkosť 2 MB

Back ...

exit;

}

// Vytvorenie zložky

// vytvorí zložku aktuálneho mesiaca

if (! file_exists ( "img /". date ( "M")))

{

mkdir ( "img /" dáta ( "M").);

}

// vytvorí zložku aktuálneho dňa

if (! file_exists ( "img /". date ( "M"). "/". date ( "d")))

{

mkdir ( "img /" date ( "M") "/" date ( "d"), ...);

}

/// prípona súboru

$ PATH_INFO = pathinfo ($ _ FILES [ 'photo1'] [ "name"]);

$ Ext = $ PATH_INFO [ 'rozšírenie'];

/// generovať názov súboru

$ Id = md5 (dátum ( "RMD"));

if (copy ($ _ FILES [ 'photo1'] [ "tmp_name"], "img /". date ( "M"). "/". date ( "d"). "/". $ id. $ ext) )

{

echo ( "Súbor bol úspešne nahraný");

}

/// akékoľvek ďalšie opatrenia (položka v databáze, a tak ďalej. N.)

}

viac súborov

Nahrávanie viac súborov (PHP) dochádza pomocou ďalších polí vo formulári.

Táto metóda nie je veľmi dobrá, pretože obmedzuje počet súborov na stiahnutie. Okrem toho, že je považované za zlú formu v programovaní. Snažte sa robiť všetko dynamické.

Ideálna voľba - to je výber z veľkého množstva súborov naraz stlačením jediného tlačidla.

Ak to chcete urobiť, vytvorte tvar, ako je tento kód.

Všimnite si, že viacnásobné pridanie slova a názov je uvedený ako maticu []. V tomto prípade $ _files array bude mierne líšiť. Získate rad poľa.

Otestovať možné znovu použiť var_dump ($ _ súborov);

Všetky vaše súbory budú umiestnené v poli, ako je tento:

  1. $ _files [ "súbor1"] [ "name"] [0]
  2. $ _files [ "súbor1"] [ "name"] [1]
  3. A tak ďalej.

V zátvorkách je napísané číslo súboru v poli. Počítané od nuly. Sme s nimi zaobchádzať rovnakým spôsobom, spýtajte cyklus a kontaktovaním vyššie popísaného kód na konci indexu pridanie [$ i].

$ I = 0;

while ($ _files [ "súbor1"] [ "name"] [$ i] <> '')

{

/// vložiť vyššie uvedený kód

}

Takže budete musieť stáť cez PHP upload súborov na server v jednom cykle bez zbytočného opakovania kódu, ako je obvykle prípad, ak používate verziu so statickým počet súborov (posledná foto).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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