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.
Obsah
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í.
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 je soubor umístěn.
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ů.
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.
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í.
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.
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.
Zvažte hodnoty všech chyb:
Nad 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.
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í.
/// dostupnost fotografií
if ($ _FILES [ `photo1`] [ `tmp_name`] == null)
{{
echo ("
Soubor není zadán.
") -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
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.
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:
- $ _FILES ["soubor1"] ["jméno"] [0]
- $ _FILES ["soubor1"] ["jméno"] [1]
- 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).
- Jak postavit web na internet?
- Podrobnosti o tom, co je na serverech FTP
- Jak vytvořit vlastní server v Agarionu? Jednoduchý způsob
- Oblíbené stahovače souborů z Internetu
- Síť sdílení souborů: funkce použití
- Jak stahovat hry z Internetu do počítače jednoduše a bez problémů
- Co je chyba 500 interních serverů? Co kdybyste viděli nápis 500 Interní chybový server (YouTube)?
- Webový server pro testování webů a aplikací
- Jak přidat píseň do `VK`. Stažení hudby do složky Moje nahrávky a stažení do…
- K serveru "Shareman" není žádné spojení: co dělat?
- Asistent pro stahování nebo Jak stáhnout data bez prohlížeče
- Co když nebudu stahovat soubor z Internetu? Příčiny selhání a způsoby jejich opravy.
- Programy FTP: Přehled klientů pro systém Windows
- WoT není aktualizován: jak vyřešit problém?
- Jak vyčistit soubory cookie v několika populárních prohlížečích
- Jak nainstalovat Minecraft?
- Jak vytvořit vlastní server
- Co udělat, pokud je překročen limit pro stahování disku Yandex Disk?
- Co je torrent a co jí?
- Rychle houpat nebo Jak stáhnout z torrentu?
- Jak stahovat hudbu z kontaktů?