PHP: prijenos datoteke na poslužitelj

Preuzimanje datoteka putem PHP-a je vrlo zanimljiva stvar, trebali biste je vrlo pažljivo pristupiti. Na internetu možete pronaći mnoge primjere implementacije preuzimanja datoteka, ali nisu svi dobri i zadovoljavaju sigurnosna pravila.

Takve se stvari moraju dovesti do kraja, čak i ako traje duže vrijeme. Ako ostavite rupu u kodu, cijeli vaš poslužitelj može biti izložen riziku.

sigurnosni

Korištenje PHP-a preuzimanje datoteka na poslužitelju je dovoljno lako. Kôd je vrlo kratak i jednostavan. Samo nekoliko redaka. Ali takva metoda je opasna. Tamo gdje više vremena i linija koda ide na sigurnost.

Opasnost je da ako ne izvršite nikakve provjere, bilo koji napadač će moći preuzeti svoje skripte na vašem poslužitelju. U tom će slučaju imati puni pristup. On može učiniti sve što želi:

  • izbrisati bazu podataka;
  • izbrišite datoteke web-mjesta;
  • mijenjati datoteke web-mjesta;
  • dodajte svoje oglase na svoju web stranicu;
  • preuzimanje virusa;
  • preusmjeriti sve korisnike na njihove web stranice;
  • i još mnogo toga što će provalnici doći na pamet.

Uvijek morate provjeriti što korisnik pokušava učitati za datoteku. Ako, na primjer, prenesete samo fotografije, morate provjeriti je li ta datoteka točno slika. U suprotnom ćete biti preuzeli sve.

Kako točno provesti test će se prikazati kasnije, kada izravno uzmete u obzir skriptu za preuzimanje datoteke.

Izrada PHP formata

Format za preuzimanje datoteka izgleda vrlo jednostavno. Dosta gumba za pregledavanje i gumbe za preuzimanje.

format za preuzimanje php datoteke

Nećemo opisati stvaranje obrasca, jer je lako. Daljnje upute pretpostavljaju da već imate osnovne koncepte HTML-a (inače ne biste tražili informacije o učitavanju u PHP-u).

Ali imajte na umu da za prijenos podataka u obrascu morate dodati atribut enctype.

prijenos datoteka putem php-a

U suprotnom, podaci o upravitelju datoteka neće se prenijeti.

Kako bi to trebalo funkcionirati?

jednostavno preuzimanje datoteka php datotekaKada kliknete gumb za pregledavanje, trebali biste otvoriti prozor, gdje će biti zatraženo da odaberete datoteku.

Nakon toga se put treba pojaviti na mjestu gdje se datoteka nalazi.

brzo prijenos datoteka putem php-a

Ako se put ne pojavi, učinite to ponovo.

Nakon što kliknete gumb za preuzimanje, sve informacije mogu se izdati pomoću datoteke rukovatelja.

obrazac za prijenos datoteka putem PHP-a

Na primjer, možete napisati retku koja kaže da je datoteka s nazivom "so-and-so" uspješno prenesena u mapu "such-and-such". Naravno, ime datoteke uvijek će biti drugačije.

Obično se ove detaljne informacije koriste za ispravljanje koda. Na taj način možete provjeriti prenose li se podaci i evidencija ide u imenik koji vam je potreban. To znači da ni naziv datoteke ne pokazuje. Budući da su to dodatne informacije koje korisnik ne treba.

Ima smisla izlaziti podatke o imenu samo ako korisnik preuzme nekoliko datoteka. Razmotrit ćemo ovaj slučaj malo dalje. Nećemo ići naprijed.

podešavanje

U PHP-u, učitavanje datoteke na poslužitelj zahtijeva određene postavke u php.ini datoteci. U ovoj datoteci postoji mnogo postavki. Svi ih ne trebamo. Zanima nas tri retka: datoteku_uploads, upload_tmp_dir i upload_max_filesize.

Imajte na umu da će te postavke utjecati na sve vaše web-lokacije na poslužitelju, a ne samo na jedan od njih. Stoga postavite maksimalnu veličinu na temelju onoga što ćete prenijeti korisnike. Nije preporučljivo postaviti previsoke vrijednosti.

Nakon promjene vrijednosti u tim postavkama potrebno je ponovno pokrenuti poslužitelj. Inače, postavke neće stupiti na snagu jer se čita u trenutku učitavanja poslužitelja.

To možete učiniti na konzoli povezivanjem putem SSH poslužitelja. Dovoljno je unijeti naredbeni servis httpd restart, a nakon toga će postavke stupiti na snagu.

Drugi je način ponovnog pokretanja putem ISP panela ili putem davatelja naplate.

kako ponovno pokrenuti poslužitelj

Niz s datotekom

U PHP-u datoteka se učitava pomoću polja $ _FILES. Sadrži sve informacije o datotekama koje ćemo preuzeti.

Da biste vidjeli kakva je informacija sadržana u ovom nizu, dovoljno je napisati sljedeće u datoteku upravitelja.

preuzimanje php datoteke

Odaberite bilo koju datoteku i kliknite "Preuzmi". Ručna stranica prikazuje podatke pohranjene u $ _FILES. Varijabla je potpuno napisana velikim slovima. PHP je velika i mala slova.

php preuzimanje datoteka na poslužitelj

Kao što vidite, u ovom nizu postoji mnogo polja. Svi oni su važni za nas. Prvo polje pohranjuje naziv datoteke u obliku u kojem se koristi na vašem računalu.

Stupac vrste označava vrstu datoteke. Polje tmp_name odgovara nazivu privremene datoteke. Nakon završetka skripte ona će biti izbrisana.

Polje pogreške pohranjuje šifru pogreške. O ovom malo dalje. Veličina - veličina u bajtovima.

greške

Preuzimanje datoteke kroz PHP uvijek prati kod pogreške. Poruka o pogrešci nalazi se u polju "greška". Na snimci zaslona pogreška je nula.

skriptu za preuzimanje PHP datoteke

Razmotrite vrijednosti svih pogrešaka:

pogreške preuzimanjaIznad toga je rečeno o parametru koji se može navesti u normalnom HTML-u.

Evo primjera obrasca za prijenos datoteke, gdje je određena ograničenja u veličini datoteke koja se prenosi.

HTML obrazac za prijenos datoteka

PHP: skripta za preuzimanje datoteke

Kako se sve radi u praksi? U PHP-u datoteka se preuzima pomoću naredbe za kopiranje. Ako ste zainteresirani za pitanje kako prenijeti datoteku, odgovor je jednostavno kopija, koja koristi dva parametra - izvornu datoteku i odredišnu datoteku.

Ali, kao što je gore spomenuto, to se ne može ograničiti iz sigurnosnih razloga. Na primjer, kako bismo provjerili kakvu vrstu datoteka šaljemo, možemo upotrijebiti vrstu polja u nizu $ _FILES. Prije svega, shvatit ćemo ga testom, a zatim prebaciti na punu skriptu

Recimo da želite da korisnici prenesu fotografiju rezolucijom samo GIF-a, JPEG-a ili PNG-a. Možete ga ovako odrediti.

ako ($ _ FILES [`file_upload`] [`tip`]! = "slika / gif") {
echo "Nažalost, podržavamo preuzimanje samo Gif datoteka" -
exit-
}

Ako želite poslati sve 3 vrste, jednostavno dodajte dodatni uvjet s drugom vrstom slike.

Kopiranje je učinjeno ovako: kopija (datoteka 1, datoteka 2).

U našem slučaju, kada rad odvija s preuzimanjem s računala na poslužitelj, možete to učiniti

kopiju ($ _ FILES [`file_upload`] ["tmp_name"], "1.jpg")

Dakle, datoteka će se kopirati s imenom 1.jpg. Ovo nije sasvim točno. U ovom slučaju to je samo jedan primjer. Naziv datoteke mora uvijek biti drugačije postavljen, a proširenje treba biti specificirano ovisno o datoteci.

Proširenje možete definirati na mnogo načina. Sve ovisi o erudici razvojnog programera. Jedan od najbržih načina (razlika u desetima sekundi) definiranja proširenja je sljedeći kod.

$ path_info = putovnica ($ _ FILES [`photo1`] ["ime"]);

$ ext = $ path_info [`proširenje`];

U varijabli $ ext pohranjujemo traženo proširenje. A naziv datoteke može se postaviti nasumično pomoću md5. Ako namjeravate preuzeti mnoge datoteke, bolje ih je učitati u različite mape. Tako će biti prikladnije. Pogotovo ako želite očistiti.

Kôd za preuzimanje bit će sljedeći.



provjeru vrste php datoteke

/// dostupnost fotografija

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

{

jeka ("

Datoteka nije navedena.

Natrag ...

") -

izlaz;

}

///. Pretpostavimo da imate dopuštenje za prijenos velikih datoteka (videozapisa) za projekt na poslužitelju, ali bit će samo fotografija i korisnici trebaju ograničiti

ako (($ _FILES ["photo1"] ["size"]> 1024 * 1024 * 2)

{

?>

Najveća dopuštena veličina slike 2 MB

Natrag ...

izlaz;

}

/ / izraditi mape

/ / stvorite trenutnu mapu mjeseca

ako (! file_exists ("img /". datum ("M")))

{

mkdir ("img /" datum ("M"));

}

/ / stvoriti mapu današnjeg dana

ako je (! file_exists ("img /" datum ("M"). "/" datum ("d")))

{

mkdir ("img /" datum ("M"). "/" datum ("d"));

}

/// datotečni nastavak

$ path_info = putovnica ($ _ FILES [`photo1`] ["ime"]);

$ ext = $ path_info [`proširenje`];

/// generirati naziv datoteke

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

ako (kopija ($ _ FILES [ `photo1`] [ "tmp_name"] "img /". datum ( "M"). "/". Datum ( "d"). "/". $ id. $ ext) )

{

echo ("datoteka je uspješno preuzeta");

}

/// bilo kakve daljnje radnje (pisanje u bazu podataka itd.)

}

Više datoteka

Preuzimanje više datoteka (PHP) pojavljuje se pomoću dodatnih polja u obrascu.

preuzimanje više php datoteka

Ova metoda nije baš dobra jer ograničava broj datoteka za preuzimanje. Štoviše, smatra se lošim tonom u programiranju. Pokušajte učiniti sve dinamično.

Idealna mogućnost je mogućnost odabira velikog broja datoteka odjednom pritiskom na jednu tipku.

Da bismo to učinili, formiramo ovaj kôd.

Imajte na umu da se višestruka riječ dodaje, a naziv je naveden kao niz []. U ovom slučaju polje $ _FILES bit će malo drugačije. Na polju ćete dobiti niz.

Za potvrdu možete ponovo koristiti var_dump ($ _ FILES);

Sve vaše datoteke bit će smještene u nizu ovako:

  1. $ _FILES ["file1"] ["ime"] [0]
  2. $ _FILES ["file1"] ["ime"] [1]
  3. I tako dalje.

U zagradama se zapisuje broj datoteke u polju. Brojanje od nule. Obradimo ih na isti način, samo postavimo petlju i, pri pristupu gore navedenom kodu, na kraju dodajemo indeks [$ i].

$ i = 0;

dok je ($ _FILES ["file1"] ["ime"] [$ i]<> ``)

{

/// umetnite gore navedeni kôd

}

Dakle, morat ćete se dogoditi kroz upload PHP datoteke na poslužitelj u jednom ciklusu bez nepotrebnog ponavljanja koda, kao što je obično slučaj ako koristite inačicu sa statičkim broj datoteka (posljednja fotografija).

Dijelite na društvenim mrežama:

Povezan
Što je FTPS: princip rada i razlike u odnosu na konvencionalne FTPŠto je FTPS: princip rada i razlike u odnosu na konvencionalne FTP
Popularni downloaderi datoteka s internetaPopularni downloaderi datoteka s interneta
Koje su FTPS i SFTP protokoli?Koje su FTPS i SFTP protokoli?
FTPS port - što je to?FTPS port - što je to?
Kako dodati pjesmu u `VK`. Preuzimanje glazbe u Moje snimke i preuzimanje na…Kako dodati pjesmu u `VK`. Preuzimanje glazbe u Moje snimke i preuzimanje na…
Kako otvoriti torrent datoteku? Detaljna analizaKako otvoriti torrent datoteku? Detaljna analiza
FTP programi: Pregled klijenata za WindowsFTP programi: Pregled klijenata za Windows
FTP protokolFTP protokol
XLS datoteke - što treba otvoritiXLS datoteke - što treba otvoriti
Kako izbrisati privremene datoteke u sustavu Windows 10 bez katastrofalnih posljedica?Kako izbrisati privremene datoteke u sustavu Windows 10 bez katastrofalnih posljedica?
» » PHP: prijenos datoteke na poslužitelj
LiveInternet