Procesarea fișierelor încărcate

sarcină
Trebuie să procesați fișierul încărcat de utilizator.

Soluția
Utilizați matricea $ _FILES:
// a if (is_uploaded_file ($ _ FILES [ 'eveniment'] [ 'tmp_name'])) readfile ($ _ FILES [ 'eveniment'] [ 'tmp_name']); // scoateți fișierul pe ecran






>

discuție
Începând cu PHP 4.1, toate fișierele descărcate apar în matricea super-globală $ _FILES. Pentru fiecare fișier există patru secțiuni de informații:

Numele atribuit elementului de introducere a formularului.
tip

Tip fișier MIME.
dimensiune

Mărimea fișierului în octeți.
tmp_name

Locația temporară a fișierului de pe server.

În versiunile anterioare de PHP, în locul acestei matrice, utilizați matricea $ HTTP_POST_FILES.1

După selectarea unui fișier dintr-un fișier, utilizați funcția is_uploaded_file () pentru a verifica dacă fișierul pe care doriți să proceseze, într-adevăr încărcat de către utilizator, apoi trata în același mod ca și alte fișiere pe sistem. Faceți întotdeauna acest lucru. Dacă aveți încredere orbește în numele fișierelor furnizate de utilizator, cineva poate modifica interogarea și poate adăuga nume ca / ​​etc / passwd în listă pentru procesare.

De asemenea, puteți muta fișierul într-o locație permanentă; Pentru a muta în siguranță un fișier, utilizați funcția move_uploaded_file ():

// mutați fișierul: move_uploaded_file () execută, de asemenea
// verificați fișierele pentru legitimitate, deci nu este nevoie
// apelați și funcția is_uploaded_file ()
move_uploaded_file ($ _ FILES [ 'eveniment'] [ 'tmp_name'], '/path/to/file.txt');

Rețineți că valoarea stocată în variabila tmp_name este calea completă la fișier, nu doar numele fișierului.








Utilizați funcția basename () pentru a selecta un nume, dacă este necesar.

Nu uitați să vă asigurați că PHP are dreptul de a citi și scrie în directorul unde fișierele temporare sunt scrise (a se vedea. opțiune de configurare upload_tmp_dir pentru a verifica locația) și în directorul în care doriți să copiați fișierul. De multe ori poate fi un utilizator nimeni sau apache (în loc de numele de utilizator personal). Din această cauză, dacă lucrați în modul safe_mode, după copierea fișierului într-un director nou, este posibil să nu mai aveți acces la acesta.

Manipularea fișierelor este adesea o sarcină non-trivială, deoarece nu toate browserele împărtășesc aceleași informații în mod egal. Ar trebui să faceți acest lucru foarte atent, în caz contrar puteți crea singur o gaură de securitate. În final, atacatorii pot obține capacitatea de a descărca pe computer orice fișiere, hack sau distruge sistemul. Prin urmare, în PHP, există mai multe posibilități de a stabili restricții asupra fișierelor descărcate, inclusiv interzicerea completă a descărcării oricăror fișiere. Prin urmare, dacă aveți dificultăți
procesarea fișierelor descărcate, asigurați-vă că fișierul nu este respins deoarece poate prezenta un risc de securitate.


Pentru a efectua acest test, mai întâi asigurați-vă că parametrul file_uploads din fișierul de configurare este activat. Apoi verificați dacă dimensiunea fișierului nu depășește valoarea upload_max_filesize; implicit este de 2 MB, ceea ce blochează încercarea oricui de a distruge sistemul prin umplerea hard disk-ului cu fișiere uriașe.

În plus, există un parametru post_max_size, care controlează dimensiunea maximă a tuturor datelor POST permise într-o singură cerere; valoarea inițială este de 8 MB.

În plus, dacă nu sunt selectate fișiere pentru descărcare, versiunile PHP până la 4.1 nu pot seta parametrul tmp_name; versiunile mai noi îi atribuie un șir gol. Versiunea PHP 4.2.1 permite fișiere cu lungime zero.


Pentru a vă asigura că fișierul este încărcat și nu este gol (deși, în funcție de circumstanțe, acesta este exact ceea ce aveți nevoie),
trebuie să vă asigurați că parametrul tmp_name este setat și valoarea parametrului de dimensiune este mai mare decât zero. În cele din urmă, nu toate browserele trimit în mod obligatoriu același tip de fișier MIME; ceea ce ei trimit depinde de tipurile de fișiere pe care le permit.







Trimiteți-le prietenilor: