Създаването на единен-URL адреси
1. Отчет за проблема
Първо, нека да са съгласни, че връзката едно време, ние ще създадете файл за изтегляне. Този файл ще се съхраняват в папка с файлове и е често срещано изображение, което е необходимо, например.

Рамковата YII2. Бързото развитие на съвременни PHP рамки
Изследване на съвременните рамкови уеб програмиране тънкостите използващи YII2
На последно място, трябва да предоставите справка за еднократна употреба. Това означава, че всяка нова връзка, потребителят не може да използва повече от веднъж. Когато повторно използване на връзките за изтегляне достъп до файла трябва да бъдат забранени. Сега нека да получите, за да изпълни задачата.
2. Създайте препратка едно време
Сега, нека да се създаде нов файл, наречен get_hash.php, който ще генерира уникален низ, при което се образува връзка еднократно за да изтеглите файла. Първата стъпка е да се генерира уникален низ:
Както можете да видите, низ бе създаден успешно. На следващо място, създаване на променлива файл $, което ще запази името на файла, за да бъде спасен, за да се създаде уникална линия за справки:
Сега, да създадете низ да се съхраняват във файл, така че нека да отворите текстов файл за писане:
За да отворите файл за писане на употреба fopen (функция). Което отваря файл в определен режим. Ще работим в режим, тоест, отворете файла, за писане само и преместете показалеца на файла (ако ще извикаме функцията за първи път, той се отваря файл е създаден).
Сега, за да се предотврати грешки, дължащи се на постоянна препратка към файла, трябва да го направите по време на запис на данни. Това означава, че при генериране на линкове, работи уникално влизане низ във файла. След това, ние ще бъдем с вас постоянно чете данните от файла за валидиране струни. По този начин могат да възникват грешки, когато няколко обаждания до едно и също време на файл (т.е., писане и четене на данни се извършва почти едновременно). Ето защо, преди да се записва данни ние ще се свържем с вас блокира функцията на стадото на файл ():
Позволете ми да ви напомня, че тази функция поставя за заключване на файла. Работният режим е посочен константи предава втори параметър на тази функция. Режим LOCK_EX - поставя изключително заключване (запис). И те ще бъдат забранени, това е, докато той е заключен с всички евентуални указания файл. В допълнение към записване на данните във файла от нашия скрипт, който всъщност ние извършваме:
За протокола, ние използваме неуспешно функция, и напишете генерирания уникален низ. Сега, нека да отключи файла, което означава, че се позволи достъп до него от външната страна, и затворете файла:
За да отключите достъпа до досието, ние използваме функцията стадо () и да премине LOCK_UN постоянно, което означава, отстраняване на блокажи. Сега, нека да актуализира сценария няколко пъти и да видим какво е записано във файла:

Както можете да видите, данните във файла е успешно, написани. Сега трябва да се създаде връзка и ще го покаже на екрана на потребителя:
За да направите това, което трябва да се определи в папката, където се съдържа сценария. Ето защо, като използвате функцията за SUBSTR, получаваме името на папката и се съхранява в променливата $ пътека. След това, показва справка използвайки клетъчен масив свръхглобална $ _SERVER [ 'HTTP_HOST'], и променлива пътя $. Просто добавете името на манипулатора на файла, в този случай get_file.php и с помощта на параметрите на GET предадени на генерирания низ. Сега нека да преминем към вашия браузър и да видим какво имаме:

Рамковата YII2. Бързото развитие на съвременни PHP рамки
Изследване на съвременните рамкови уеб програмиране тънкостите използващи YII2
Сега трябва да се създаде скрипт, който ще получава прехвърлените данните и да извършват необходимите проверки.
3. Проверете препратки
Така че, създайте празен файл get_file.php, където ние ще проверим вашата връзка и ако всичко е наред, да направи достъпна за изтегляне на файла. Първата стъпка, създаване на две променливи, които ще съдържат името на файла за изтегляне (линк към които ние създаваме), както и името на файла на една уникална поредица от препратки:
На следващо място, създаване на променлива, която ще съдържа разрешение да изтеглите файла. Това означава, че ако стойността на тази променлива е вярно, тогава трябва да се даде възможност на връзката за изтегляне:
Сега, тъй като ние знаем, че уникалната низ, получен чрез криптиране md5, след уникален низ трябва да съдържа точно 32 знака. Така че нека да тече на първия тест:
Сега, помислете файл с уникален низ и цялото му съдържание, ред по ред, се съхранява в масив от клетки:
Това означава, че масив $ ARR на, съдържа във всяка клетъчна линия, генерирани от файла. Например, ако сте го отпечатате print_r (функция), ще видим следното:

Сега, тъй като всички съдържанието на файла се съдържат в един масив, можем да проверим дали низ преминал през GET параметри (стойност на променливата $ хеш) в една от клетките на масива $ ARR на. И ако наистина има съвпадение, това означава, че достъпът до преписката може да се отвори.
Ето защо, отворете файла, за писане в w режим (отваря файла за писане само и поставя на показалеца на файл в началото и съкращава файла на нулева дължина.):
След това, заключване на файл от разглеждане отвън на записа е в ход:
Образуване на верига, която проверява и записва върху уникалните кодове във файла, където се открият съвпадения със стойността на променливата $ хеш:
На следващо място, отключите и да затворите отворен файл:
Сега само трябва да се провери това, което се съдържа в променливата проверката за $, и ако той съдържа до TRUE, тогава можете да изпратите, за да изтеглите файла. Например, можете да направите следното:
Това означава, че проверка на стойността на променлива проверката за $, и ако е вярно, тогава ние ще изпратим някои заглавия към браузъра. По този начин го информира, че вида на съдържанието - формат JPEG изображение (хедър ( «Content-Type: изображение / JPEG»);). По същия начин, че изображението не е необходимо да се показва на екрана, и да мине за изтегляне, което означава, че ще се отвори прозорецът на файла за изтегляне браузър (заглавната част ( «съдържание в: привързаност; име =» basename ($ s_file)) ;.). И разбира се, да премине на името на файла и размер (името на файла = »basename ($ s_file).); хедър ( «Content-Length:« .filesize ($ s_file))).
Следващо пречистване в клипборда и да прочетете файл с помощта на ReadFile (функция). И не забравяйте да се измъкнем от сценария след прочитането на файла. Ако променливата проверката за $ съдържа различна стойност на TRUE, тогава тестът е неуспешен и искате да откаже достъп до изтегляне на файлове. Сега, само в случай на пълна код get_file.php файл:
Тук ние сме с вас и прилагане на механизъм за създаване на референтен еднократно. Надявам се, че този урок ще бъде полезна за вас. Сега, нека да каже довиждане.
Всичко най-хубаво и добро кодиране!

Рамковата YII2. Бързото развитие на съвременни PHP рамки
Изследване на съвременните рамкови уеб програмиране тънкостите използващи YII2
Най-IT новини и уеб разработки на нашия канал Телеграма