Ako stiahnuť súbor pomocou funkcie PHP move_uploaded_file

V určitom okamihu vašej kariéry budete chcieť vytvoriť skutočné dynamické webové aplikácie. Možno sa rozhodnete napísať svoju sociálnu sieť. Ako vývojár sa pokúsite získať zainteresovaných používateľov, dať im možnosť nahrávať fotky, hudbu a zdieľať súbory. V tomto prípade musíte vedieť a byť schopní pracovať s funkciou PHP presunúť nahraný súbor.

Formulár na zhromažďovanie údajov

PHP podporuje sťahovanie všetkých súborov metódou POST. Preto je potrebný formulár HTML na prenos dát servera alebo jeho uloženie na lokálny počítač. Použite značku na výber samostatného miesta, kde by mohol používateľ vybrať súbor. Skripty musia nakonfigurovať všetko, aby sa dáta posielali bez problémov. Zvážte tento proces stiahnutím profilovej fotografie.




enctype = "viacnásobné /formulárové údaje" & gt;





Venujte pozornosť atribútu enctype = "multipart /form-data". Je to vďaka tomu, že formulár je nakonfigurovaný na príjem dát. Aby používatelia nedosiahli 25 MB bootloadov, musíte v skrytom poli nevyhnutne nastaviť limit veľkosti obrázkov. Pre profilový obrázok je to dosť 2 MB, ako v tomto príklade.

Formulár uvedený vyššie v akcii atribútu znamená, že príjem aspracovanie obrazu sa uskutoční v tom istom dokumente. Ak ste zmätení, a chcete, aby každá akcia mala samostatný skript nahraďte názov scenára dizajnu, napríklad create_profile.php. Teraz je v tomto súbore napísaný celý kód vrátane funkcie posunutia súboru PHP.

"Max. veľkosť súboru špecifikovaná v php.ini ',
2 = & gt; Max prekročil veľkosť súboru špecifikovaná vo formáte HTML ',
3 = & gt; 'Bola odoslaná len časť súboru',
4 = & gt; 'Súbor na odoslanie nebol vybraný.');
//zistiť chyby pri odosielaní súborov
, ($ _files [$ image_fieldname] ['error'] == 0) alebo
die ("Chyba pri odosielaní súboru". $ Php_errors [$ _ FILES [$ image_fieldname ] ['chyba']]);
//zistiť normálny súbor je odoslaný, alebo pokus o trhliny
@is_uploaded_file ($ _ FILES [$ image_fieldname] ['tmp_name']) alebo
die ('Vy sovershyete nemorálnosti hanba!'. "First "súboru:". " '{$ _ súbory [$ image_fieldname] [' tmp_name ']}'");
//Je navrhovaný súbor s obrázkom
@getimagesize ($ _ FILES [$ image_fieldname] ['tmp_name']) or die ("Chyba! Vybraný súbor nie je obrázok." "Filename {$ _files [$ image_fieldname] ['tmp_name']}});
//Priradenie jedinečného názvu súboru na stiahnutie
$ now = time ();
, zatiaľ čo (file_exists ($ upload_filename = $ uploads_dir $ Teraz .'- '[názov,]). $ _ Súbory [$ image_fieldname].') {
$ teraz ++;
}
& Gt;

V kóde existujú pomocné premenné


& lt; script type = "text /javascript" & gt;
var blockSettings2 = {blockId: "R-A-271049-5", renderTo "yandex_rtb_R-A-70350 - 39", async:! 0};
, ak (document.cookie.indexOf ("abmatch =") väčšie alebo rovné 0) blockSettings2.statId = 70350;
! Funkcie (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkcia () {Ya.Context.AdvManager.render (blockSettings2)}), e = b.getElementsByTagName ("scenár") , d = b.createElement ("scenár"), d.type = "text /javascript", d.src = "//an.yandex .ru /systém /context.js "d.async = 0e.parentNode.insertBefore (d, e)} (to, this.document ,!" yandexContextAsyncCallbacks ");
  • $ Upload_dir je registrovaná cestado adresára na stiahnutie. Namiesto HOSW_WWW_ROOT napíšte absolútnu cestu do pracovného adresára na serveri alebo počítači.
  • Variabilné $ image_fieldname je názov poľa obrázka vo forme HTML.

Ako vidíte, skôr ako sa presuniete do súboru na odovzdanie odovzdávania, existujú riadky, ktoré kontrolujú stiahnutý obrázok. Samozrejme, bezpečné PHP aplikácie sú mýtus, ale mala by existovať aspoň minimálna ochrana.

$ php_errors pole kontroly chýb nezačína od začiatku, ale z jednotky. Ak je indexje v hodnote $ _files [$ image_fieldname] [, error '], ktorý v prípade úspechu topánka vracia číslo 0. PHP $ _files - špeciálny pole obsahujúce všetky informácie o súbore. Pre prístup k tejto dát pomocou vstupný kód poľa s názvom, ktorý sme priniesol ako samostatný premennej $ image_fieldname:


& lt; script type = "text /javascript" & gt;
var blockSettings3 = {blockId: "R-A-271049-6", renderTo "yandex_rtb_R-A-70350 - 44", async:! 0};
ak (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings3.statId = 70350;
! Funkcie (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkcia () {Ya.Context.AdvManager.render (blockSettings3)}), e = b.getElementsByTagName ("scenár") , d = b.createElement ("scenár"), d.type = "text /javascript", d.src = "//an.yandex .ru /systém /context.js "d.async = 0e.parentNode.insertBefore (d, e)} (to, this.document ,!" yandexContextAsyncCallbacks ");
//zistiť chyby pri odosielaní súborov 
, ($ _files [$ image_fieldname] ['error'] == 0) alebo
die ("Chyba pri odosielaní súboru". $ Php_errors [$ _FILES [$ image_fieldname] ['chyba']]);

Ak je ťah nahraný súbor PHP nefunguje

Myslíte si, že ste urobili všetko správne a tlmočníčka chybu? Súbor odmieta načítať označený adresár a zobrazí sa v pomerne nečakaných miestach? Po prvé, pozrite sa na php.ini k právnemu veľkosť parametra upload_max_filesize. Často sa táto chybasa vyskytuje v Denveri. Otvorte php.ini (zvyčajne je to v priečinku php) a nastavte požadovanú veľkosť:

;;;;;;;;;;;;;;;; 
; Nahranie súborov;
;;;;;;;;;;;;;;;;

; Či povoliť odovzdávanie súborov HTTP.
; http://php.net/file-uploads
file_uploads = On

; Dočasný adresár pre odovzdané súbory HTTP (použije sa predvolený systém, ak nie je
špecifikovaný).
; http://php.net/upload-tmp-dir
upload_tmp_dir = "***"

; Maximálna povolená veľkosť nahraných súborov.
; http://php.net/upload-max-filesize
upload_max_filesize = 5M

; Max_file_uploads = 50


Ak pracujete na serveri, požiadajte poskytovateľa, ktorého súbory môžu stiahnuť. Na bezplatnom hosťovaní je maximálna suma obvykle 2 MBytes. Druhým dôvodom, prečo môže kód zlyhať, je nastavenie nesprávneho adresára. Pozrite sa na druhý argument mov_uploaded_file, musí obsahovať cestu a nevyhnutne meno.

Súvisiace publikácie