Server și System File
Material de fond privind limbajele de programare majore și dispunerea de site-uri.
Tehnica Gata pentru crearea de ambele site-uri dinamice simple și complexe folosind PHP si MySQL.
dezvoltarea de site-uri web sub „cheie“.
Dezvoltarea de site-uri fragmente individuale, sfaturi cu privire la aspectul paginilor web și programare web.
instrument web
magazin web
servicii web
grafica web
Resurse web

Doriți să fiți la curent cu evoluțiile care au loc pe site-ul? Inscrie-te pentru a primi cele mai recente știri și articole.
Uita-te pe Google
Sistem de fișiere și server. Descărcați fișiere. PHP-script pentru a lucra cu fișiere

Imaginați-vă o situație în care clientul trebuie să ofere posibilitatea de a schimba conținutul site-ului web - de exemplu, cele mai recente știri despre compania lor. O modalitate de a face acest lucru este de a permite clientului pentru a descărca fișierul text. Apoi, aceste fișiere vor fi disponibile online, printr-o mască, dezvoltat în PHP.
Pentru a face acest lucru, vom înțelege modul în care fișierul de încărcare pe server.
încărcaţi fișiere
În PHP este disponibil un foarte util funcționalitate - suport pentru descărcarea de fișiere prin HTTP protocol. Mai degrabă decât a primi un fișier prin HTTP protocol de la server la browser-ul, le trimite în direcția opusă, adică din browser-ul la server. Acest lucru se aplică, de obicei, HTML-forme. Forma, pe care o vom folosi, după cum se arată.
După cum se vede în figură, forma conține un câmp de intrare în cazul în care utilizatorul poate introduce numele fișierului, sau făcând clic pe butonul „Browse“ pentru a selecta fișiere disponibile pe aparatul local. Poate că nu ați văzut formularul pentru a încărca fișiere. Mai jos ne arată cum să-l pună în aplicare.
După introducerea numelui fișierului, utilizatorul poate face clic pe „Trimite fișier“, iar fișierul este încărcat la server, unde asteapta pentru script PHP.
Pentru a pune în aplicare fișier de încărcare aplică unele construcții HTML concepute special pentru acest scop.
upload.html - HTML-format pentru descărcarea fișierelor
Încarcă fișier
for m>
Luați în considerare această formă specială.
- În descriptor
- Formularul trebuie să conțină un câmp care specifică dimensiunea maximă de încărcare de fișiere. Acest câmp ascuns, și este reprezentat de HTML-tag-ul:
Nume câmp de introducere, puteți selecta orice, trebuie doar să-l amintesc, pentru că numele va fi utilizat în gazdă script PHP pentru a accesa fișierul.
Înainte de a trece mai departe, trebuie reamintit faptul că, în unele versiuni de gauri de securitate PHP prezente în codul de descărcare. Dacă decideți să utilizați descărcarea la serverul dvs. de producție, trebuie să vă asigurați că ați instalat cea mai recentă versiune de PHP, și urmați eliberarea de revizii și actualizări.
Nu ar trebui să fie un motiv de a refuza o astfel de tehnologie utilă, dar atunci când scrierea de cod trebuie să fie atent și să încerce să restricționeze accesul la toate, dar administratorul administratorilor site-ului și de conținut.
Script-ul pentru fișierele
încărcare de fișiere PHP-cod este foarte simplu, dar aceasta depinde de setările versiunea PHP și configurare. Numele de funcții și variabile variază de la o versiune la alta, în funcție de faptul dacă register_globals setarea este activată. Codul nu necesită register_globals, dar necesită impolzovaniya versiune de PHP nu este mai mică decât 4.1.
atunci când descărcarea unui fișier este plasat într-un loc rezervat pe un server web pentru fișierele temporare. În mod implicit, acesta este principalul directorul temporar server de web. Dacă fișierul nu este redenumit și să nu se deplaseze până la sfârșitul script-ul, acesta va fi distrus.
Datele care urmează să fie prelucrate în noastre PHP script-uri sunt stocate în tablourile superglobale $ _FILES. Dacă register_globals este activat, datele de acces este posibil și imediat, prin intermediul nume de variabile. Dar aici, probabil, acesta este locul unde este mai bine să dezactivați register_globals și să lucreze cu date prin matrice superglobale.
Elementele din matrice $ _FILES vor fi salvate cu eticheta de nume
- Valoarea stocată în $ _FILES [ „userfile“] [ „tmp_name“], este locul ideal pentru stocarea fișierului de pe serverul Web.
- Valoarea stocată în $ _FILES [ „userfile“] [ „nume“], este fișierul imnem în sistemul utilizatorului.
- Valoarea stocată în $ _FILES [ „userfile“] [ „dimensiune“], indică dimensiunea fișierului în octeți.
- Valoarea stocată în $ _FILES [ 'userfile'] [ 'tip'], conține un fișier de tip MIME, de exemplu, text / plain sau imagine / gif.
- Valoarea stocată în $ _FILES [ „userfile“] [ „eroare“], va conține un cod de eroare care a avut loc în timpul de descărcare a fișierului.
Acum, că știi unde fișierul este localizat și ceea ce se numește, aveți posibilitatea să-l copiați într-un loc mai util. Un fișier temporar la sfârșitul script-ul va fi eliminat. Deci, dacă doriți să salvați fișierul, este necesar să se miște sau să redenumiți.
În pimere noastră presupune că fișierele descărcate sunt articole de știri, așa că trebuie să le eliminați din toate posibile HTML-tag-uri și să se mute la un director mai adecvat.
upload.php - PHP-script care primesc fișierul din HTML-forme
Cele mai multe dintre script controalele efectuate erori de piese. Încărcarea unui fișier este asociat cu riscul potențial al unei încălcări de securitate, iar acest risc trebuie să fie reduse la minimum. Ar trebui să fie cât mai mult posibil pentru a verifica cu atenție dosarul pentru a asigura siguranța afișajului său vizitatorului.
Să vedem ce sunt partea principală a script-ul conține.
În primul rând, verificați codul de eroare returnat în $ _FILES [ „userfile“] [ „eroare“]. Fiecare cod de eroare corespunde unei constante speciale. Constantele posibile și semnificațiile lor sunt enumerate mai jos:
- UPLOAD_ERROR_OK - este 0, ceea ce înseamnă că nu au existat erori.
- UPLOAD_ERR_INI_SIZE -ravna 1 înseamnă că dimensiunea fișierului depășește valoarea maximă definită în directivă up_load_max_filesize php.ini dosar.
- UPLOAD_ERR_FORM_SIZE -ravna 2 înseamnă că dimensiunea fișierului depășește valoarea maximă specificată în HTML formă elementul MAX_FILE_SIZE.
- -ravna UPLOAD_ERR_PARTIAL 3, ceea ce înseamnă că doar o parte din fișierul descărcat.
- UPLOAD_ERR_NO_FILE -ravna 4, indică faptul că fișierul nu este încărcat.
În continuare vom verifica-tip MIME. În acest caz, am decis că vom descărca numai fișierele text, astfel MIME-tip este controlat prin compararea $ _FILES [ „userfile“] [ „tip“] cu un șir de „text / plain“. Acesta verifică numai pentru erori, și legate de siguranță nu verificarea. MIME-tip este determinat de browserul utilizatorului bazat pe extensia de fișier, și apoi trimis la server. Deoarece este ușor să treacă un fals MIME-tip, atacatorii pot lua bine profite de ea.
Apoi vom verifica dacă fișierul este într-adevăr încărcat și nu este un fișier local, cum ar fi / etc / passwd. Ceva mai târziu, vom reveni la această problemă.
Dacă totul merge bine, atunci vom copia fișierul într-un director destinat pentru ea. În acest exemplu, directorul / uploads / -ona este în afara arborelui web și, prin urmare, este adecvat să fie plasate în fișierele sale, care vor fi incluse ulterior pe undeva.
Apoi vom procesa fișierul, șterge din toate HTML aleatoare și PHP-tag-uri, folosind strip_tags () și scrie fișierul înapoi.
În cele din urmă conținutul fișierului este afișată utilizatorului pentru a se asigura că fișierul este încărcat cu succes.
Rezultatul implementării cu succes a script-ul arată astfel:
Pentru a verifica finalizarea cu succes a fișierului de descărcare și să se asigure că nu avem de-a face cu un fișier local, cum ar fi / etc / passwd, a fost aplicată move_uploaded_file funcția () și poate fi utilizat, de asemenea, is_uploaded_file ().
script-ul de boot mâzgălit poate permite vizitatorului cu intenții rele pentru a crea un fișier temporar cu un anumit nume și pentru a obține script-ul să-l ocupe la fel de ocupat. Și, din moment ce multe script de pornire se întoarce utilizatorul pentru a copia fișierul descărcat sau plasat într-o locație din care puteți descărca, utilizatorii au posibilitatea de a accesa orice fișier disponibil pentru a citi server de web. Printre aceste fișiere pot fi fișiere cu informații confidențiale - de exemplu, / etc / passwd fișier de cod sursă sau PHP care conține parola pentru a accesa baza de date.
probleme comune
Când descărcați fișiere pe server ar trebui să ia în considerare mai multe puncte importante.
- În exemplul anterior presupune existența de verificare a drepturilor de acces ale utilizatorilor. Nu se permite să încărcați fișiere pentru oricine.
- Dacă permiteți încărcarea fișierelor pe server fără a verifica drepturi de acces sau utilizatorii care nu sunt demne de încredere, există motive foarte puternice de îngrijorare pentru conținutul acestor fișiere. Descărcați și executați un script care poate fi dăunătoare - evenimentul este extrem de nedorit. Prin urmare, ar trebui să verificați nu numai tipul și conținutul fișierului, ca în acest exemplu, dar, de asemenea, numele lui. idee foarte bună - pentru a atribui fișiere numele „sigure“ descărcate.
- Dacă aparatul este rulează Windows, apoi tot drumul la dosar în loc de \ necesitatea de a utiliza \\ sau /.
- Folosind numele de fișier introdus de utilizator, așa cum sa discutat într-un scenariu plină de apariția diferitelor probleme. Cea mai evidentă dintre acestea este asociat cu riscul de a suprascrierea accidental fișierele existente cu același nume. O problemă mai puțin evident este faptul că diferitele sisteme de operare, și chiar setările de limbă li se permite să folosească diferite seturi de caractere în numele de fișiere. fișier descărcat poate avea un nume care conține caractere care nu sunt valide în sistemul dumneavoastră.
- Dacă ai probleme cu lansarea schemei, verificați fișierul php.ini. Acesta ar trebui să conțină Directiva upload_tmp_dir specifică directorul în care doriți să îl accesați. Pentru a descărca fișiere mari pot, de asemenea, trebuie să configurați directiva dvs. memory_limit, care definește dimensiunea maximă permisă a fișierelor încărcate. În Apache, există, de asemenea, timeout configurabil și limitează dimensiunea tranzacției, care ar trebui să acorde o atenție, de asemenea, în caz de probleme.
- discuta