Kako preuzeti datoteku pomoću PHP funkcije move_uploaded_file

U nekom trenutku u svojoj karijeri želite stvoriti stvarne dinamičke web aplikacije. Možda se odlučite napisati društvenu mrežu. Kao programer, pokušat ćete dobiti zainteresirane korisnike, dati im mogućnost učitavanja fotografija, glazbe i dijeljenja datoteka. U ovom slučaju, morate znati i biti u mogućnosti raditi s funkcijom PHP move učitane datoteke.

Obrazac za prikupljanje podataka

PHP podržava preuzimanje svih datoteka metodom POST. Stoga je za prijenos podataka na poslužitelju ili za spremanje na lokalni stroj potreban HTML obrazac. Pomoću oznake označite posebno mjesto na kojem korisnik može odabrati datoteku. Skripte moraju konfigurirati sve kako bi se podaci poslali bez prekida. Razmotrite ovaj postupak preuzimanjem fotografije profila.




enctype = "podaci iz više dijelova /obrazaca" & gt;











Obratite pozornost na atribut enctype = "multipart /form-data". Zahvaljujući njemu obrazac je konfiguriran za primanje podataka. Kako korisnici ne bi došli do 25 MB bootload-a, u skrivenom polju nužno morate postaviti ograničenje veličine za slike. Za sliku profila dovoljno je 2 MB, kao u ovom primjeru.

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

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

Slanje slike

Gore navedeni obrazac u akcijskoj akciji znači da prijem iobrada slike će se izvršiti u istom dokumentu. Ako vas to zbunjuje i želite da svaka radnja ima vlastitu skriptu, zalijepite ime skripte na mjesto, na primjer, create_profile.php. Sada je cijeli kôd, uključujući i PHP datoteku prenesenu funkciju, zapisana u ovoj datoteci.

'Maks. veličina datoteke navedena u php.ini ',
2 = & gt; Maks veličina datoteke navedena u HTML obrascu ',
3 = & gt; "Poslan je samo dio datoteke",
4 = & gt; "Datoteka za slanje nije odabrana.");
//provjera pogrešaka pri slanju datoteke
($ _FILES [$ image_fieldname] ['error'] == 0) ili
die ("pogreška pri slanju datoteke". $ Php_errors [$ _ FILES [$ image_fieldname ] ['pogreška']]);
//provjerite normalnu datoteku za slanje, ili je pokušaj hakiranja
@is_uploaded_file ($ _FILES [$ image_fieldname] ['tmp_name']) ili
umrijeti ('počinite nemoralni čin, sramota!' Datoteka: "." '{$ _ FILES [$ image_fieldname] [' tmp_name ']}' ');
//je predložena slikovna datoteka
@getimagesize ($ _FILES [$ image_fieldname] ['tmp_name']) ili umrijeti ("Greška! Datoteka koju ste odabrali nije slika." "Naziv datoteke {$ _FILES [$ image_fieldname] ['tmp_name']} ");
//Dodjeljivanje jedinstvenog imena
$ now = time ();
dok (file_exists ($ upload_filename = $ uploads_dir. $ Sada .'- '. $ _ FILES [$ image_fieldname] [' ime '])) {
$ now ++;
}
?

U kodu postoje pomoćne varijable:


& lt; script type = "text /javascript" & gt;
može 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)} (ovaj, ovaj.dokument," yandexContextAsyncCallbacks ");
  • $ Upload_dir je registrirana stazau imenik za preuzimanje. Umjesto HOSW_WWW_ROOT, napišite apsolutnu putanju u radni direktorij na poslužitelju ili računalu.
  • Varijabla $ image_fieldname je ime polja slike u HTML obliku.

Kao što možete vidjeti, prije prelaska na datoteku za učitavanje, postoje redovi koji provjeravaju preuzetu sliku. Naravno, sigurne PHP aplikacije su mit, ali bi trebala postojati barem minimalna zaštita.

Niz provjere pogrešaka $ php_errors ne počinje od nule, već iz jedinice. Pod indeksomje $ _FILES [$ image_fieldname] ['error'], koji u slučaju uspješnog učitavanja vraća broj 0. U PHP $ _FILES je poseban niz koji sadrži sve informacije o datoteci. Za pristup tim podacima koristimo indeks s nazivom polja za unos, koje smo prethodno naveli u zasebnoj varijabli $ image_fieldname:


& lt; script type = "text /javascript" & gt;
može 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)} (ovaj, ovaj.dokument," yandexContextAsyncCallbacks ");
//provjera pogrešaka pri slanju datoteke
($ _FILES [$ image_fieldname] ['error'] == 0) ili
die ("pogreška pri slanju datoteke". $ Php_errors) [$ _FILES [$ image_fieldname] ['pogreška']]);

Kada PHP učitana datoteka ne radi

Mislite li da ste sve učinili ispravno, a tumač pogriješio? Datoteka odbija dignuti u imenik i pojavljuje se na potpuno neočekivanim mjestima? Prije svega, provjerite php.ini za dozvoljenu veličinu u parametru upload_max_filesize. Najčešće je to pogreškapojavljuje se u Denveru. Otvorite php.ini (obično je to u php mapi) i samo postavite željenu veličinu:

;;;;;;;;;;;;;;;; 
; Prijenosi datoteka;
;;;;;;;;;;;;;;;;

; Dopušta li prijenos HTTP datoteka.
; http://php.net/file-uploads
file_uploads = Uključeno

; Privremeni direktorij za HTTP datoteke (koristit će zadani sustav ako nije
; naveden).
; http://php.net/upload-tmp-dir
upload_tmp_dir = "***"

; Maksimalna dopuštena veličina za učitane datoteke.
; http://php.net/upload-max-filesize
upload_max_filesize = 5M

; Max_file_uploads = 50


Ako radite na poslužitelju, pitajte davatelja usluga čije je datoteke dopušteno preuzeti. Na besplatnom hostingu, maksimalni iznos obično iznosi 2 MB. Drugi razlog zbog kojeg kôd može biti neuspješan jest da je postavljen pogrešan direktorij. Provjerite drugi argument od move_uploaded_file, on mora sadržavati put i nužno ime.

Povezane publikacije