Crearea unui singur-url-adrese
1. Situația problemei
În primul rând, să sunt de acord că o legătură de o singură dată, vom crea un fișier pentru a descărca. Acest fișier va fi stocat într-un dosar de fișiere și este o imagine comună, care este necesar, de exemplu.
Cadrul YII2. Dezvoltarea rapidă a cadrelor moderne PHP
Explorați moderne subtilitățile cadru de dezvoltare web folosind YII2
În cele din urmă, trebuie să furnizați o utilizare de referință o singură dată. Adică, orice link nou, utilizatorul nu poate folosi mai mult de o dată. Atunci când reutilizați link-uri pentru a descărca fișiere de acces ar trebui să fie interzisă. Acum, sa trecem pentru a realiza sarcina.
2. Creați o referință o singură dată
Acum, să creați un nou fișier numit get_hash.php, care va genera un șir unic, formând astfel o legătură într-o singură dată pentru a descărca fișierul. Primul pas este de a genera un șir unic:
După cum puteți vedea, șirul este generat cu succes. Apoi, creați un fișier $ variabila, care va păstra numele fișierului care urmează să fie salvat pentru a crea o linie unică pentru referințe:
Acum, creați un șir de caractere pentru a fi stocate într-un fișier, astfel încât să deschidă fișierul text pentru scris:
Pentru a deschide un fișier pentru scriere funcția de utilizare fopen (). Ceea ce se deschide un fișier într-un anumit mod. Vom lucra într-un mod, care este, deschide fișierul pentru scriere și numai mutați indicatorul la fișierul (dacă vom apela funcția pentru prima dată, se deschide este creat un fișier).
Acum, pentru a preveni erorile datorate de referință constantă la dosar, trebuie să-l blocheze, la momentul scrierii datelor. Adică, atunci când generarea de link-uri, se execută o intrare șir unic în fișierul. Apoi, vom fi cu voi citi în mod constant datele de fișiere pentru a valida siruri de caractere. Astfel, pot apărea erori atunci când mai multe apeluri la unul și același timp fișierul (adică, scriere și citire a datelor are loc practic simultan). De aceea, înainte de a scrie datele pe care le vom contacta vă bloca funcția turmei fișier ():
Permiteți-mi să vă reamintesc că această caracteristică pune un sistem de blocare pe dosar. Modul de operare care este setat constantele transmis de-al doilea parametru pentru această funcție. Modul LOCK_EX - pune o blocare exclusivă (scriere). Și ei vor fi interzise, adică, până când acesta este blocat cu toate posibile fișierul de referință. În plus față de înregistrarea datelor în fișierul de script-ul nostru, care de fapt, vom efectua:
Pentru înregistrare, vom folosi funcția fwrite și notați șirul unic generat. Acum, să debloca fișierul, adică permite accesul la acesta din exterior, și închideți fișierul:
Pentru a debloca accesul la dosar, vom folosi funcția de turmă (), și să treacă LOCK_UN constantă, adică, eliminarea blocajelor. Acum, să actualizeze script de mai multe ori și a vedea ce este scris în fișierul:
După cum puteți vedea, datele din dosar a fost scris cu succes. Acum aveți nevoie pentru a crea o legătură și afișa pe ecran pentru utilizator:
Pentru a face acest lucru, avem nevoie pentru a defini dosarul în care script-ul este conținut. Prin urmare, cu ajutorul funcției substr, vom obține numele folderului și stocat în calea $ variabila. Apoi, afișează o referință utilizând o matrice de celule superglobale $ _SERVER [ „HTTP_HOST“], și calea $ variabilă. Trebuie doar să adăugați numele fișierului handler, în acest caz get_file.php și utilizând parametrii GET trecut la șirul generat. Acum să trecem la browser-ul dvs. și să vedem ce avem:
Cadrul YII2. Dezvoltarea rapidă a cadrelor moderne PHP
Explorați moderne subtilitățile cadru de dezvoltare web folosind YII2
Acum aveți nevoie pentru a crea un script care va primi datele transferate și de a efectua verificările necesare.
3. Verificați referințe
Deci, creați un get_file.php fișier gol, în cazul în care vom verifica link-ul și dacă totul este corect, pune la dispoziție pentru a descărca fișierul. Primul pas, de a crea două variabile, care va conține numele fișierului pentru download (link către care vom crea), și numele de fișier într-un șir unic de referințe:
Apoi, creați o variabilă care va conține permisiunea de a descărca fișierul. Aceasta este, în cazul în care valoarea acestei variabile este adevărat, atunci trebuie să permită link-ul de descărcare:
Acum, din moment ce știm că șirul unic, obținut prin criptare MD5, apoi un șir unic trebuie să conțină exact 32 de caractere. Deci, haideți să rulați primul test:
Acum, ia în considerare un fișier cu un șir unic și toate liniei conținutul său de linie, stocate într-o matrice de celule:
Aceasta este, matrice $ ARR, conține în fiecare linie de celule generate din dosar. De exemplu, dacă imprima print_r funcția (), vom vedea următoarele:
Acum, din moment ce toate conținutul fișierului sunt conținute într-o singură matrice, putem verifica dacă șirul a trecut prin parametrii GET (valoarea de $ hash variabilă) într-una din celulele de matrice $ ARR. Și dacă într-adevăr există o potrivire, aceasta înseamnă că accesul la dosar poate fi deschis.
Prin urmare, deschide fișierul pentru scriere în modul w (deschide fișierul pentru scriere numai și plasează cursorul fișier la începutul și trunchiați fișierul în lungime zero.):
Apoi, blocați fișierul de a fi accesate din afara înregistrării este în curs de desfășurare:
Forma o buclă care verifică și suprascrie codurile unice în dosarul în care nu concordanțe cu valoarea $ hash variabila:
Apoi, eliminați de blocare și de a închide un fișier deschis:
Acum trebuie doar să verifice ceea ce este conținut în verificarea $ variabila, iar în cazul în care conține la TRUE, atunci puteți trimite fișierul pentru a descărca. De exemplu, puteți face următoarele:
Aceasta este, verifica valoarea cecului $ variabila, iar dacă este adevărat, atunci vom trimite niște antete la browser. Prin aceasta sa fie informat despre faptul că tipul de conținut - un format de imagine jpeg (header ( «Content-Type: image / jpeg»);). În același mod în care imaginea nu trebuie să fie afișat pe ecran, și să treacă pentru download, care este, care ar deschide fereastra de browser de fișiere de descărcare (antetul ( «Content-Disposition: atașament; filename =» basename ($ s_file)) ;.). Și, desigur, trece numele fișierului și dimensiunea (numele fișierului = »numele de baza ($ s_file).); antet ( «Conținut-Lungime:« .filesize ($ s_file));).
Se purifică suplimentar clipboard și citi un fișier folosind funcția ReadFile (). Și nu uitați să iasă din script-ul după citirea fișierului. Dacă verificarea $ variabilă conține o valoare diferită de TRUE, atunci testul eșuează și doriți să refuzați accesul pentru a descărca fișiere. Acum, doar în cazul în complet fișier cu cod get_file.php:
Aici suntem cu tine și să pună în aplicare un mecanism pentru a crea o referință o singură dată. Sper ca acest tutorial va fi util pentru tine. Acum, să spunem la revedere.
Toate cele mai bune și o codificare bun!
Cadrul YII2. Dezvoltarea rapidă a cadrelor moderne PHP
Explorați moderne subtilitățile cadru de dezvoltare web folosind YII2
Cele mai multe știri IT si dezvoltare web pe canalul nostru-Telegram