PHP: încărcarea unui fișier pe server

Descărcarea fișierelor prin PHP este un lucru foarte interesant, ar trebui să o abordați foarte atent. Pe Internet, puteți găsi multe exemple de implementare a descărcărilor de fișiere, dar nu toate sunt bune și respectă regulile de securitate.

Astfel de lucruri trebuie să fie aduse la sfârșit, chiar dacă durează mult timp. Dacă lăsați o gaură în cod, atunci întregul dvs. server poate fi în pericol.

siguranță

Folosind PHP descărcarea fișierelor pe server este destul de ușor. Codul este foarte scurt și simplu. Doar câteva linii. Dar o astfel de metodă este periculoasă. În cazul în care mai mult timp și linii de cod merge la securitate.

Pericolul este că, dacă nu faceți nicio verificare, orice atacator va putea să-și descarce scripturile pe serverul dvs. În acest caz, el va avea acces complet. El poate face orice vrea:

  • șterge baza de date;
  • ștergeți fișierele de site
  • modificați fișierele site-ului;
  • adăugați anunțurile pe site-ul dvs.
  • descărcați viruși;
  • să redirecționeze toți utilizatorii la site-urile lor;
  • și mult mai mult ca să vină în minte hoțul.

Întotdeauna trebuie să verificați ce utilizatori încearcă să încarce pentru fișier. Dacă, de exemplu, încărcați numai fotografii, trebuie să verificați dacă acest fișier este exact imaginea. În caz contrar, veți fi descărcat orice.

Cât de precis va implementa testul va fi afișat mai târziu, atunci când luați în considerare direct scriptul de descărcare a fișierului.

Crearea unui formular PHP

Formularul de descărcare a fișierului arată foarte simplu. Suficient butoane de navigare și butoane de descărcare.

php formularul de descărcare

Nu vom descrie crearea formularului, deoarece este ușor. Instrucțiunile suplimentare presupun că aveți deja conceptele de bază despre HTML (altfel nu ar trebui să căutați informații despre încărcarea în PHP).

Dar rețineți că pentru a transfera date în formă, trebuie să adăugați atributul enctype.

încărcarea fișierelor prin php

În caz contrar, datele despre dispozitivul de tratare a fișierelor nu vor fi transmise.

Cum ar trebui să funcționeze acest lucru?

descărcarea simplă a fișierelor phpCând faceți clic pe butonul de navigare, ar trebui să deschideți o fereastră, unde vi se va cere să selectați un fișier.

După aceasta, ar trebui să apară calea unde este localizat fișierul.

încărcare rapidă a fișierelor prin php

Dacă calea nu apare, faceți acest lucru din nou.

După ce faceți clic pe butonul de descărcare, orice informație poate fi transmisă de fișierul handler.

formular pentru încărcarea fișierelor prin PHP

De exemplu, puteți scrie o linie care spune că un fișier cu un nume "așa-și-așa" a fost încărcat cu succes într-un folder "așa-și-așa". Desigur, numele fișierului va fi întotdeauna diferit.

De obicei, aceste informații detaliate sunt folosite pentru a depana codul. În acest fel, puteți verifica dacă datele sunt transferate și înregistrarea se îndreaptă către directorul de care aveți nevoie. Asta este, chiar și numele fișierului nu indică. Deoarece aceasta este o informație suplimentară pe care utilizatorul nu o are nevoie.

Este logic să transmiteți date despre nume numai dacă utilizatorul descarcă mai multe fișiere. Vom examina acest caz un pic mai departe. Nu vom merge mai departe.

ajustare

În PHP, încărcarea unui fișier pe un server necesită să se facă anumite setări în fișierul php.ini. Există o mulțime de setări în acest fișier. Toți nu avem nevoie de ei. Suntem interesați de trei linii: file_uploads, upload_tmp_dir și upload_max_filesize.

Rețineți că aceste setări vor afecta toate site-urile dvs. de pe server, nu doar unul dintre ele. Prin urmare, setați dimensiunea maximă în funcție de ceea ce veți încărca utilizatorii. Nu se recomandă setarea unor valori prea mari.

După ce modificați valorile din aceste setări, serverul trebuie să fie repornit. În caz contrar, setările nu vor avea efect, deoarece sunt citite în momentul încărcării serverului.

Puteți face acest lucru în consola prin conectarea prin SSH la server. Este suficient să introduceți serviciul de comandă httpd restart și apoi setările vor intra în vigoare.

O altă modalitate este să reporniți prin panoul ISP sau prin panoul de facturare al furnizorului.

cum să reporniți un server

Array cu fișier

În PHP, fișierul este încărcat utilizând matricea $ _FILES. Acesta conține toate informațiile despre fișierele pe care le descărcăm.

Pentru a vedea ce fel de informații este conținută în această matrice, este suficient să scrieți următoarele în fișierul handler.

descărcare fișier php

Selectați orice fișier și faceți clic pe "Descărcați". Pagina handler afișează informațiile stocate în fișierele $ _FILES. Variabila este scrisă complet cu litere mari. PHP este un limbaj sensibil la caz.

php descărcarea de fișiere pe server

După cum puteți vedea, există multe câmpuri în acest tablou. Toate acestea sunt importante pentru noi. Primul câmp stochează numele fișierului în forma în care este utilizat pe computer.

Coloana de tip indică tipul de fișier. Câmpul tmp_name corespunde numelui fișierului temporar. După finalizarea scriptului, acesta va fi șters.

Câmpul de eroare stochează codul de eroare. Despre acest lucru mai departe. Dimensiune - mărime în octeți.

erori

Descărcarea unui fișier prin PHP este întotdeauna însoțită de un cod de eroare. Mesajul de eroare este inclus în câmpul "eroare". În screenshot, eroarea este zero.

php script de descărcare de fișiere

Luați în considerare valorile tuturor erorilor:

descărcați eroriDeasupra sa spus despre parametru, care poate fi specificat în HTML normal.

Iată un exemplu de formular pentru încărcarea unui fișier, unde este specificată o limită în mărimea fișierului încărcat.

Formularul de încărcare a fișierului html

PHP: script de descărcare de fișiere

Cum se face totul în practică? În PHP, fișierul este descărcat utilizând comanda de copiere. Dacă ați fost interesat de întrebarea cum să încărcați un fișier, atunci răspunsul este pur și simplu copiați, care utilizează doi parametri - fișierul sursă și fișierul de destinație.

Dar, așa cum am menționat mai sus, acest lucru nu poate fi limitat din motive de securitate. De exemplu, pentru a verifica tipul de fișier pe care îl expediem, putem folosi tipul de câmp în matricea $ _FILES. În primul rând, o să ne dăm seama printr-un test și apoi vom trece la scenariul complet

Să presupunem că doriți ca utilizatorii să încarce o fotografie cu rezoluția numai GIF, JPEG sau PNG. Puteți specifica astfel.

dacă {$ _ FILES [`file_upload`] [`tip`]! = "imagine / gif") {
ecou "Ne pare rău, avem suport pentru descărcarea numai a fișierelor Gif" -
exit-
}

Dacă doriți să expediați toate cele 3 tipuri, pur și simplu adăugați o condiție suplimentară cu un alt tip de imagine.

Copierea se face astfel: Copiați (fișierul 1, fișierul 2).

În cazul nostru, când lucrarea continuă cu descărcarea de pe computer la server, puteți face acest lucru

copiați ($ _ FILES [`file_upload`] ["nume_tmp"], "1.jpg")

Adică, fișierul va fi copiat cu numele 1.jpg. Acest lucru nu este complet corect. În acest caz, acesta este doar un exemplu. Numele fișierului trebuie să fie întotdeauna setat diferit, iar extensia trebuie specificată în funcție de fișier.

Puteți defini extensia în mai multe moduri. Totul depinde de erudiția dezvoltatorului. Una dintre cele mai rapide căi (diferența în zecimi de secunde) de definire a unei extensii este următorul cod.

$ path_info = caleinfo ($ _FILES [`photo1`] ["nume"]);

$ ext = $ cale_info [`extensie`];

În variabila $ ext vom stoca extensia necesară. Și numele fișierului poate fi setat aleator folosind md5. Dacă intenționați să descărcați mai multe fișiere, este mai bine să le încărcați în foldere diferite. Deci, va fi mai convenabil. Mai ales dacă doriți să curățați.

Codul de descărcat va fi după cum urmează.



verificarea tipului de fișier php

/// disponibilitatea fotografiilor

dacă ($ _FILES [`photo1`] [`tmp_name`] == null)

{

echo ("

Fișierul nu este specificat.

Înapoi ...

") -

ieșire;

}

///. Să presupunem că aveți permisiunea de a încărca fișiere mari (video) pentru un proiect pe server, dar vor exista doar fotografii și că utilizatorii trebuie să limiteze

dacă {($ _FILES ["photo1"] ["size"]> 1024 * 1024 * 2)

{

?>

Dimensiunea maximă permisă a imaginii 2 MB

Înapoi ...

ieșire;

}

// crea dosare

// creați dosarul lunii curente

dacă (!! file_exists ("img /". date ("M")))

{

mkdir ("img /". dată ("M"));

}

// creați un dosar al zilei curente

dacă (!! fișier_există ("img /". dată ("M") "/"

{

mkdir ("img /". data ("d"));

}

/// extensie de fișier

$ path_info = caleinfo ($ _FILES [`photo1`] ["nume"]);

$ ext = $ cale_info [`extensie`];

/// generează numele fișierului

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

în cazul în care (copie ($ _ FILES [ `photo1`] [ "tmp_name"], "img /". Data ( "M"). "/". data ( "d"). "/". $ id. $ ext) )

{

ecou ("fișierul descărcat cu succes");

}

/// orice alte acțiuni (scrierea în baza de date etc.)

}

Fișiere multiple

Descărcarea mai multor fișiere (PHP) apare utilizând câmpuri suplimentare în formular.

descărcarea mai multor fișiere php

Această metodă nu este foarte bună, deoarece limitează numărul de fișiere de descărcat. Mai mult, este considerat un ton rău în programare. Încercați să faceți totul dinamic.

Opțiunea ideală este capacitatea de a selecta simultan un număr mare de fișiere prin apăsarea unui singur buton.

Pentru a face acest lucru, vom crea formularul cu acest cod.

Rețineți că cuvântul multiplu este adăugat, iar numele este specificat ca array []. În acest caz, matricea $ _FILES va fi puțin diferită. Veți obține o matrice în matrice.

Pentru verificare, puteți utiliza din nou var_dump ($ _ FILES);

Toate fișierele dvs. vor fi amplasate în matrice, astfel:

  1. $ _FILES ["file1"] ["nume"] [0]
  2. $ _FILES ["fișier1"] ["nume"] [1]
  3. Și așa mai departe.

În paranteze, numărul fișierului din matrice este scris. Numărătoare de la zero. Noi le procesăm în același mod, setăm doar bucla și, la accesarea codului de mai sus, adăugăm indexul [$ i] la sfârșit.

$ i = 0;

în timp ce ($ _FILES ["file1"] ["nume"] [$ i]<> ``)

{

/// introduceți codul de mai sus

}

Astfel, va trebui să descărcați fișierele prin PHP într-un singur ciclu, fără repetarea inutilă a codului, așa cum se întâmplă de obicei dacă utilizați opțiunea numărului de fișier static (ultima fotografie).

Distribuiți pe rețelele sociale:

înrudit
Detalii despre ceea ce este pe serverele FTPDetalii despre ceea ce este pe serverele FTP
Ce este FTPS: principiul funcționării și diferențele față de FTP convenționaleCe este FTPS: principiul funcționării și diferențele față de FTP convenționale
Ce este acest program - Mipony? Cum se utilizează?Ce este acest program - Mipony? Cum se utilizează?
Portul FTPS - ce este?Portul FTPS - ce este?
Care este eroarea de 500 de erori interne? Ce se întâmplă dacă ați văzut inscripția 500 Server de…Care este eroarea de 500 de erori interne? Ce se întâmplă dacă ați văzut inscripția 500 Server de…
Cum in "MTA" pentru a crea un server pentru prieteni?Cum in "MTA" pentru a crea un server pentru prieteni?
În detaliu, despre verificarea integrității cache-ului în "Steam"În detaliu, despre verificarea integrității cache-ului în "Steam"
Cum se conectează la server: recomandăriCum se conectează la server: recomandări
Nu există nicio legătură cu serverul "Sharemann": ce trebuie să faceți?Nu există nicio legătură cu serverul "Sharemann": ce trebuie să faceți?
Care sunt funcțiile serverului LAN? Setarea luiCare sunt funcțiile serverului LAN? Setarea lui
» » PHP: încărcarea unui fișier pe server