Kako prenesti datoteko s pomočjo PHP funkcije move_uploaded_file

V neki karieri boste želeli ustvariti resnično dinamične spletne aplikacije. Morda se boste odločili napisati svojo družabno mrežo. Kot razvijalec boste poskušali pridobiti zainteresirane uporabnike, jim omogočiti nalaganje fotografij, glasbe in skupne rabe datotek. V tem primeru morate vedeti in biti sposobni delati s funkcijo PHP move uploaded file.

Obrazec za zbiranje podatkov

PHP podpira prenos datotek po metodi POST. Zato je za prenos podatkov o strežniku ali za shranjevanje na lokalni računalnik potreben obrazec HTML. Z oznako izberite ločeno mesto, kjer lahko uporabnik izbere datoteko. Skripte morajo konfigurirati vse, da bodo podatki poslani brez izjeme. Razmislite o tem postopku tako, da prenesete fotografijo profila.




enctype = "podatki iz več delov /obrazcev" & gt;











Bodite pozorni na atribut enctype = "multipart /form-data". Zaradi njega je obrazec konfiguriran za sprejemanje podatkov. Da uporabniki ne dobijo 25 MB zagonskih datotek, morate v skritem polju nujno nastaviti omejitev velikosti slik. Za sliko profila je dovolj 2 MB, kot v tem primeru.

& lt; skript async = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
& lt ;! - fb_336x280_2 - & gt;

& lt; skript & gt; (adsbygoogle = window.adsbygoogle || []). push ({});

Pošiljanje slike

Zgornji obrazec v dejanju atributa pomeni, da sprejem inobdelava slik bo potekala v istem dokumentu. Če vas to zmede in želite, da ima vsaka akcija svoj skript, prilepite ime skripte v kraj, na primer create_profile.php. Zdaj je v tej datoteki zapisana celotna koda, vključno s funkcijo PHP uploaded file.

„Maks. velikost datoteke, podana v php.ini ',
2 = & gt; Maks velikost datoteke, podana v obliki HTML ',
3 = & gt; "Poslan je bil le del datoteke",
4 = & gt; »Datoteka za pošiljanje ni bila izbrana.«);
//preverjanje napak pri pošiljanju datoteke
($ _FILES [$ image_fieldname] ['error'] == 0) ali
die ("napaka pri pošiljanju datoteke". $ Php_errors [$ _ FILES [$ image_fieldname ] ['napaka']]);
//preverite normalno datoteko, ki jo želite poslati, ali pa je poskus poskusa
@is_uploaded_file ($ _FILES [$ image_fieldname] ['tmp_name']) ali
umre ('Izvršite nemoralno dejanje, sramota!' 's file: "."' {$ _ FILES [$ image_fieldname] ['tmp_name']} '');
//je predlagana slikovna datoteka
@getimagesize ($ _FILES [$ image_fieldname] ['tmp_name']) ali die ("Napaka! Datoteka, ki ste jo izbrali, ni slika." "Ime datoteke {$ _FILES [$ image_fieldname] ['tmp_name']} ");
//Dodelitev edinstvenega imena Prenosna datoteka
$ now = time ();
medtem ko (file_exists ($ upload_filename = $ uploads_dir. $ Now.'- '. $ _ FILES [$ image_fieldname] [' name ']))) {
$ zdaj ++;
}
?

V kodi obstajajo pomožne spremenljivke:


& lt; script type = "text /javascript" & gt;
lahko blockSettings2 = {blockId: "R-A-271049-5", renderTo: "yandex_rtb_R-A-70350-39", async:! 0};
if (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings2.statId = 70350;
Funkcija (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkcija () {Ya.Context.AdvManager.render (blockSettings2)}), e = b.getElementsByTagName ("script") , d = b.createElement ("script"), d.type = "text /javascript", d.src = "//an.yandex .ru /system /context.js ", d.async =! 0e.parentNode.insertBefore (d, e)} (ta, ta.dokument," yandexContextAsyncCallbacks ");
  • $ Upload_dir je registrirana potv imenik za prenos. Namesto HOSW_WWW_ROOT napišite absolutno pot v delovni imenik na strežniku ali računalniku.
  • Spremenljivka $ image_fieldname je ime slikovnega polja v obliki HTML.

Kot lahko vidite, se pred premikom na datoteko za nalaganje naložijo vrstice, ki preverjajo preneseno sliko. Seveda, varne aplikacije PHP so mit, vendar bi moralo biti vsaj minimalno zaščito.

Matrika za preverjanje napak $ php_errors se ne začne iz nič, ampak iz enote. Pod indeksomje $ _FILES [$ image_fieldname] ['error'], ki v primeru uspešnega nalaganja vrne številko 0. V PHP $ _FILES je posebna matrika, ki vsebuje vse informacije o datoteki. Za dostop do teh podatkov uporabljamo indeks z imenom vnosnega polja, ki smo ga prej navedli v ločeni spremenljivki $ image_fieldname:


& lt; script type = "text /javascript" & gt;
lahko blockSettings3 = {blockId: "R-A-271049-6", renderTo: "yandex_rtb_R-A-70350-44", async:! 0};
if (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings3.statId = 70350;
Funkcija (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkcija () {Ya.Context.AdvManager.render (blockSettings3)}), e = b.getElementsByTagName ("script") , d = b.createElement ("script"), d.type = "text /javascript", d.src = "//an.yandex .ru /system /context.js ", d.async =! 0e.parentNode.insertBefore (d, e)} (ta, ta.dokument," yandexContextAsyncCallbacks ");
//preverjanje napak pri pošiljanju datoteke
($ _FILES [$ image_fieldname] ['error'] == 0) ali
die ("napaka pri pošiljanju datoteke". $ Php_errors) [$ _FILES [$ image_fieldname] ['napaka']]);

Kadar prenesena datoteka PHP ne deluje

Ali menite, da ste vse naredili pravilno in da tolmač napako? Datoteka zavrača zagon v imenik in se pojavi na popolnoma nepričakovanih mestih? Najprej preverite php.ini za dovoljeno velikost v parametru upload_max_filesize. Najpogosteje je to napakav Denverju. Odprite php.ini (običajno je v mapi php) in nastavite želeno velikost:

;;;;;;;;;;;;;;;; 
; Prenosi datotek;
;;;;;;;;;;;;;;;;

; Ali želite dovoliti prenos datotek HTTP.
; http://php.net/file-uploads
file_uploads = On

; Začasni imenik za datoteke, naložene s protokolom HTTP (če ne bo uporabil sistemske privzete nastavitve
).
; http://php.net/upload-tmp-dir
upload_tmp_dir = "***"

; Največja dovoljena velikost za naložene datoteke.
; http://php.net/upload-max-filesize
upload_max_filesize = 5M

; Max_file_uploads = 50


Če delate na strežniku, vprašajte ponudnika, katerega datoteke je dovoljeno prenesti. Na brezplačnem gostovanju je največji znesek običajno 2 MB. Drugi razlog, zakaj koda ne uspe, je, da je nastavljen napačen imenik. Preverite drugi argument datoteke move_uploaded_file, mora vsebovati pot in nujno ime.

Sorodne publikacije