PočítačeTypy souborů

PHP: nahrání souboru na server

Stahování souborů přes PHP je velmi zajímavá záležitost, kterou byste měli velmi pečlivě přistupovat. Na internetu najdete mnoho příkladů implementace stahování souborů, ale ne všechny jsou dobré a splňují bezpečnostní pravidla.

Takové věci by měly být dokončeny, i kdyby to trvalo dlouho. Pokud opustíte díru v kódu, může být celý váš server ohrožen.

Bezpečnost

Pomocí PHP je nahrávání souborů na server poměrně snadné. Kód je velmi krátký a jednoduchý. Jen pár řádků. Ale taková metoda je nebezpečná. Kde se více času a řádků kódu vynakládá na bezpečnost.

Nebezpečí je, že pokud neuděláte žádné kontroly, může útočník stahovat své skripty na váš server. V takovém případě bude mít plný přístup. Může dělat všechno, co chce:

  • Odstranit databázi;
  • Odstranit soubory webu;
  • Změna souborů webu;
  • Přidejte reklamy na svůj web;
  • Stáhněte si viry;
  • Přesměrování všech uživatelů na jejich stránky;
  • A mnohem víc, než by na to přišel lupič.

Musíte vždy zkontrolovat, jaký typ souboru se uživatel pokouší načíst. Pokud například nahrajete pouze fotografie, musíte zkontrolovat, zda je tento soubor přesně obraz. V opačném případě budete naloženi cokoli.

Jak implementovat test bude zobrazen později, když přímo zkoumáte skript stahování souborů.

Vytvoření formuláře PHP

Formulář pro stažení souboru vypadá velmi jednoduše. Dostanete tlačítka pro prohlížení a tlačítka pro stahování.

Nebudeme popisovat vytvoření formuláře, protože je to snadné. Další pokyny předpokládají, že již máte základní pojmy HTML (jinak byste nehledali informace o načítání v PHP).

Všimněte si však, že k přenosu dat do formuláře musíte přidat atribut enctype.

V opačném případě nebudou data o obsluze souborů přenášena.

Jak by to mělo fungovat?

Po klepnutí na tlačítko procházení byste měli otevřít okno, kde budete požádáni o výběr souboru.

Potom by se měla zobrazit cesta, kde se nachází soubor.

Pokud se cesta neobjeví, proveďte to znovu.

Po kliknutí na tlačítko stahování pomocí souboru s ovladačem můžete zadat jakékoli informace.

Například můžete napsat řádek, který říká, že soubor s takovým a takovým jménem byl úspěšně nahrán do složky "takovýto a takový". Samozřejmě, jméno souboru bude vždy jiné.

Obvykle se tyto podrobné informace používají k ladění kódu. Tímto způsobem můžete zkontrolovat, zda se data přenášejí a záznam se dostane do adresáře, který potřebujete. To znamená, že i název souboru neukazuje. Protože toto jsou další informace, které uživatel nepotřebuje.

Dává smysl výstup dat o názvu pouze v případě, že uživatel načte několik souborů. Tento případ budeme zvažovat ještě daleko. Neuděláme.

Přizpůsobte

V PHP stahování souboru na server vyžaduje určité nastavení v souboru php.ini. V tomto souboru je mnoho nastavení. Všichni je nepotřebujeme. Zajímá nás tři řádky: file_uploads, upload_tmp_dir a upload_max_filesize.

Vezměte prosím na vědomí, že tato nastavení budou mít vliv na všechny vaše stránky na serveru, nikoli pouze na jednu z nich. Proto nastavte maximální velikost na základě toho, co budete uživatelé nahrávat. Nedoporučuje se nastavovat příliš velké hodnoty.

Po změně hodnot v těchto nastaveních musí být server restartován. V opačném případě se nastavení nezobrazí, protože jsou čteny v době načítání serveru.

Můžete to udělat v konzole připojením přes SSH k serveru. Stačí zadat příkazovou službu httpd restart a nastavení se pak projeví.

Další možností je restartovat přes panel ISP nebo přes fakturační panel poskytovatele.

Soubor se souborem

V PHP se soubor načte pomocí pole $ _FILES. Obsahuje veškeré informace o souborech, které si stáhneme.

Chcete-li zjistit, jaké informace jsou obsaženy v tomto poli, postačí zapsat následující informace do souboru popisovače.

Vyberte libovolný soubor a klikněte na "Stáhnout". Stránka obsluhy zobrazuje informace uložené ve složkách $ _FILES. Proměnná je zapsána úplně velkými písmeny. PHP je jazyk citlivý na velká a malá písmena.

Jak vidíte, v tomto poli je mnoho polí. Všechny jsou pro nás důležité. První pole ukládá název souboru ve formuláři, ve kterém je používán v počítači.

Typ sloupce označuje typ souboru. Pole tmp_name odpovídá názvu dočasného souboru. Po ukončení skriptu bude odstraněn.

Chybové pole uloží kód chyby. O tom trochu dál. Velikost - velikost v bajtech.

Chyby

Stažení souboru přes PHP je vždy doplněno kódem chyby. Chybová zpráva je uzavřena v poli "chyba". Na snímku obrazovky je chyba nula.

Zvažte hodnoty všech chyb:

Nad tím bylo řečeno o parametru, který lze specifikovat v obvyklém kódu HTML.

Zde je příklad formuláře pro nahrání souboru, ve kterém je určen limit velikosti nahraného souboru.

PHP: skript stahování souborů

Jak se vše dělá v praxi? V PHP je soubor načten příkazem kopie. Pokud vás zajímá otázka, jak nahrát soubor, odpovědí je jednoduše kopírovat, který používá dva parametry - zdrojový soubor a cílový soubor.

Ale jak bylo napsáno výše, nelze to z bezpečnostních důvodů omezit. Chcete-li například zkontrolovat, jaký typ souboru načítáme, můžeme použít pole pole v poli $ _FILES. Za prvé, budeme na to přijít s testem, a pak se přesunete na celý skript

Řekněme, že chcete, aby uživatelé nahrali fotografii s rozlišením pouze GIF, JPEG nebo PNG. Můžete to určit takto.

Pokud soubor ($ _FILES ['file_upload'] ['type']! = "Image / gif"
Echo "Omlouváme se, podporujeme stahování pouze souborů Gif";
Exit;
}}

Pokud chcete odeslat všechny 3 typy, jednoduše přidejte další podmínku s jiným typem obrazu.

Kopírování se provádí takto: kopie (soubor 1, soubor 2).

V našem případě, když práce pokračuje se stahováním z počítače na server, můžete tak učinit

Kopírovat ($ _FILES ['file_upload'] ["tmp_name"], "1.jpg")

To znamená, že soubor bude zkopírován s názvem 1.jpg. To není zcela správné. V tomto případě je to jen příklad. Název souboru musí být vždy nastaven jinak a přípona by měla být zadána v závislosti na souboru.

Rozšíření můžete definovat mnoha způsoby. Vše závisí na erudici vývojáře. Jeden z nejrychlejších způsobů (rozdíl v desetinách sekund) definování rozšíření je následující kód.

$ Path_info = pathinfo ($ _FILES ['photo1'] ["jméno"]);

$ Ext = $ cesta_info ['rozšíření'];

V proměnné $ ext budeme ukládat požadované rozšíření. A název souboru lze nastavit náhodně pomocí md5. Pokud plánujete stahovat mnoho souborů, je lepší je načíst do různých složek. Tak to bude pohodlnější. Zvláště pokud chcete vyčistit.

Kód ke stažení bude následující.

/// dostupnost fotografií

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

{{

Echo ("

Není zadán žádný soubor.

Zpět ... ");

Exit;

}}

///. Řekněme, že máte oprávnění nahrát velké soubory (video) pro projekt na serveru, ale budou pouze fotografie a uživatelé budou muset omezit

Pokud ($ _FILES ["photo1"] ["velikost"]> 1024 * 1024 * 2)

{{

?>

Maximální povolená velikost obrázku je 2 MB

Zpět ...

Exit;

}}

// vytvořit složky

// vytvořte složku aktuálního měsíce

Pokud (!! File_exists ("img /". Datum ("M"))

{{

Mkdir ("img /". Datum ("M"));

}}

// vytvořte složku aktuálního dne

Pokud (!! File_exists ("img /". Datum ("M").

{{

Mkdir ("img /". Datum ("M"). "/" Datum ("d"));

}}

/// přípona souboru

$ Path_info = pathinfo ($ _FILES ['photo1'] ["jméno"]);

$ Ext = $ cesta_info ['rozšíření'];

/ / / Generovat název souboru

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

Pokud kopírujete ($ _FILES ['photo1'] ["tmp_name"], "img /" datum ("M"). ).

{{

Echo (soubor byl úspěšně stažen);

}}

/// další akce (psaní do databáze atd.)

}}

Vícenásobné soubory

Stahování více souborů (PHP) dochází pomocí dalších polí ve formuláři.

Tato metoda není příliš dobrá, protože omezuje počet souborů ke stažení. Kromě toho se v programování považuje za špatný tón. Snažte se dělat vše dynamické.

Ideální volbou je možnost vybrat velké množství souborů najednou stisknutím jediného tlačítka.

Za tímto účelem vytvoříme formulář s tímto kódem.

Všimněte si, že je přidáno více slov a název je zadán jako pole []. V tomto případě bude pole $ _FILES mírně odlišné. Získáte pole v poli.

Chcete-li zkontrolovat, můžete znovu použít var_dump ($ _ FILES);

Všechny soubory budou umístěny v poli takto:

  1. $ _FILES ["soubor1"] ["jméno"] [0]
  2. $ _FILES ["soubor1"] ["jméno"] [1]
  3. A tak dále.

V závorkách je zapsáno číslo souboru v poli. Počítání od začátku. Zpracováváme je stejným způsobem, stačí nastavit smyčku a při přístupu k výše uvedenému kódu přidáme index [$ i] na konci.

$ I = 0;

Zatímco ($ _FILES ["file1"] ["jméno"] [$ i] <> '')

{{

/// vložte výše uvedený kód

}}

Proto budete muset stahovat soubory prostřednictvím PHP v jediném cyklu bez zbytečného opakování kódu, což je obvykle v případě, že používáte verzi se statickým počtem souborů (poslední fotografie).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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