nisfarm.ru

PHP: nahrání souboru na server

Stahování souborů přes PHP je velmi zajímavá věc, měli byste se k tomu velmi pečlivě obrátit. 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 musí být dokončeny, i když to trvá dlouho. Pokud opustíte díru v kódu, může být celý váš server ohrožen.

Bezpečnost

Použití PHP stahování souborů na serveru je dost snadné. Kód je velmi krátký a jednoduchý. Jen pár řádků. Ale taková metoda je nebezpečná. Kde více času a řádků kódu jde na bezpečnost.

Nebezpečí je, že pokud neprovedete žádné kontroly, útočník si bude moci své skripty stáhnout 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;
  • odstranění souborů webu;
  • upravovat soubory webu;
  • Přidejte své reklamy na své stránky.
  • stáhnout viry;
  • přesměrovat všechny uživatele na své stránky;
  • a mnohem víc, než by na to přišel lupič.

Musíte vždy zkontrolovat, co se uživatel pokouší o načtení souboru. Pokud například nahrajete pouze fotografie, je třeba zkontrolovat, zda je tento soubor přesně obraz. V opačném případě budete staženi cokoli.

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

Vytvoření formuláře PHP

Formulář pro stahování souborů vypadá velmi jednoduše. Dostatečné tlačítka pro prohlížení a tlačítka pro stahování.

php soubor ke stažení

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.

nahrávání souborů pomocí php

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

Jak by to mělo fungovat?

jednoduché stahování souborů phpPo 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 je soubor umístěn.

rychlé nahrání souborů pomocí php

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

Po kliknutí na tlačítko stahování mohou být všechny informace vyneseny pomocí souboru psů.

formulář pro nahrávání souborů přes PHP

Například můžete napsat řádek, který říká, že soubor s názvem "so-a-tak" 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 jsou data přenášena 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 stáhne 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 nahrávat uživatelem. Nedoporučuje se nastavovat příliš vysoké 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.

jak restartovat server

Pole 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 poli, stačí napsat v psovoda souboru následující.

stáhnout php soubor

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

php stahování souborů na server

Jak vidíte, existuje mnoho polí v tomto poli. 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.

php stahování skriptu

Zvažte hodnoty všech chyb:

stáhnout chybyNad tím bylo řečeno o parametru, který lze specifikovat v normálním HTML.

Zde je příklad formuláře pro upload souboru, kde je zadán limit ve velikosti nahraného souboru.

html formulář pro nahrání souboru

PHP: skript stahování souborů

Jak se vše dělá v praxi? V PHP se soubor stáhne pomocí příkazu copy. Máte-li zájem o otázku, jak nahrát soubor, pak je odpověď jednoduše kopírována, která používá dva parametry - zdrojový soubor a cílový soubor.

Ale, jak bylo uvedeno výše, nelze to z bezpečnostních důvodů omezit. Chcete-li například zkontrolovat, jaký druh souboru odesíláme, můžeme použít 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 ($ _ FILES [`file_upload`] [`typ`]! = "image / gif") {
echo "Omlouváme se, podporujeme stahování pouze souborů GIF" -
exit-
}}

Chcete-li odeslat všechny 3 typy, stačí přidat 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 s stažením z počítače na server, můžete tak učinit

kopie ($ _FILES [`file_upload`] ["tmp_name"], "1.jpg")

To znamená, že soubor bude zkopírován s názvem 1.jpg. To není úplně 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 si uložíme 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že to bude pohodlnější. Zvláště pokud chcete vyčistit.

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

zkontrolujte typ souboru php

/// dostupnost fotografií

if ($ _FILES [ `photo1`] [ `tmp_name`] == null)

{{

echo ("

Soubor není zadán.

Zpět ...

") -

výstup;

}}

///. Řekněme, že máte oprávnění k nahrání velkých souborů (videa) pro projekt na serveru, ale budou pouze fotografie a uživatelé musí omezit

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

{{

?>

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

Zpět ...

výstup;

}}

// 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í`];

/// vygenerujte název souboru

$ id = md5 (datum ("Y-M-d"));

pokud (kopírovat ($ _FILES [`photo1`] ["tmp_name"], "img /" datum ("M"). ).

{{

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

}}

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

}}

Více souborů

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

stahování více php souborů

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 slovo více 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.

Pro ověření 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, nastavíme smyčku a při přístupu k výše uvedenému kódu přidáme na konci index [$ i].

$ i = 0;

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

{{

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

}}

Proto budete muset stahovat soubory pomocí PHP v jediném cyklu, aniž byste museli zbytečně opakovat kód, což je obvykle v případě, že používáte možnost statického čísla souborů (poslední fotografie).

Sdílet na sociálních sítích:

Podobné
© 2021 nisfarm.ru