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.

Crearea unui singur-url-adrese

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:

Crearea unui singur-url-adrese

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:

Crearea unui singur-url-adrese

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:

Crearea unui singur-url-adrese

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!

Crearea unui singur-url-adrese

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