Тимчасові посилання на php. Що це таке і з чим їх їдять? Все дуже просто. Часто при побудові будь-якого php движка виникає необхідність розміщення на сторінках сайту, яким управлятиме цей движок, посилань на скачування різних архівів з програмами, зображеннями, шаблонів сайтів і т. П. У найпростішому випадку все це можна постачати прямими лінками на архіви, а самі архіви розміщувати в незахищеною папці свого домену. Але такий шлях не зовсім вірний. По-перше, лінки на архіви можуть бути скопійовані на інші ресурси і завантажувати їх можна буде навіть не заходячи на ваш сайт. По-друге, через те, що файли будуть розміщені в незахищеною папці вони можуть бути пошкоджені або навіть стерті зловмисниками.
Який же механізм формування тимчасових посилань? Необхідно створити базу з двома таблицями. У першій будуть перебувати унікальні назви файлів для скачування з їх атрибутами - розширення, опис, і т. П. В іншій будуть створюватися тимчасові рядки з унікальними назвами файлів, випадковий хеш і час створення запису. Рядки другий таблиці повинні формуватися при переході на сторінку для скачування файлу. І якраз на базі другої таблиці і будуть формуватися тимчасові лінки на скачування які будуть містити в собі випадковий хеш.
Завдання php обробника для формування тимчасової посилання полягає в знаходженні в другій таблиці рядок з хешем присутнім в лінк і витягти з цього рядка id архіву на скачування, за яким потім в базі назв архівів можна знайти назву потрібного архіву і віддати його на скачування користувачеві.
Це можна організувати з використанням бази MySQL. Але якщо база файлів невелика то вигідніше це зробити на звичайних текстових файлах, один з яких буде базою з назв архівів і їх атрибутів. а інший вмістилищем для тимчасових лінків. Такий механізм працює на ресурсі 'Електроніка програмування сайтостроєніє' php, html, css для любителів і професіоналів в розділі 'Шаблони сайтів', який виконаний на базі CMS згаданої в статті про пошукову статистику. Припустимо у нас є два текстові файли
// файл-база для назв файлів
$ Namefiles = "namefiles.dat";
// файл-база для тимчасових посилань
$ Templinks = "templinks.dat";
Перший - це база з назвами файлів в якому можуть бути рядки кожна з яких має записи розділені знаком '|'. Ясно що перший запис у рядку це унікальний id файлу, друга це його опис, третя - назва архіву
001 | Шаблон сайту ultra 77 | templates1.rar
002 | Шаблон сайту від Open Designs | templates2.rar
Другий - це файл для тимчасових лінків, які будуть туди записуватися в рядок. Рядок буде містити три поля розділені все тим же знаком '|', перше - унікальний id файлу, друге - випадковий хеш і третє - час формування рядка. Ну а скрипт формування тимчасових лінків, назвемо його наприклад templinks.php, повинен складатися з трьох частин. Перша з них це очищення файлу тимчасових лінків з простроченим часом існування. Виглядає це приблизно так:
// скільки зберігати посилання (в секундах - 10 хвилин)
$ Hardtime = 600;
// поточний час в сек
$ Currtime = time ();
// перевірка і очищення тимчасових рядків
$ Arruniqid = file ($ templinks);
$ Newarruniqid = array ();
for ($ i = 0; $ i
list ($ file_id, $ uniq_id, $ puttime) = explode ( "|", $ arruniqid [$ i]);
$ Difftime = $ currtime - intval ($ puttime);
// якщо час поточного рядка в межі
if ($ difftime <$hardtime)
array_push ($ newarruniqid, "$ file_id | $ uniq_id | $ puttime");
>
// скласти матрицю таблиці тимчасових id
$ Newtbdwn = implode ( "", $ newarruniqid);
$ Fp = $ wf-> fopen ($ templinks, "w");
@fwrite ($ fp, $ newtbdwn);
fclose ($ fp, $ templinks);
Друга частина - це отримання рядка з файлу бази назв файлів, відповідної id, який переданий в рядку запиту файлу. Наприклад рядок запиту файлу виглядає так //. /templinks.php?getlink=001
Третя частина - це перехід по сформованому тимчасового лінку для скачування потрібного файлу. Для цього потрібно пройтися по базі тимчасових лінків і знайти якому рядку бази відповідає наявність там $ uniq_id щоб потім пройшовшись по базі файлів знайти там назва архіву відповідне знайденому в базі тимчасових лінків $ id.
if ($ _ GET [ 'download'])
$ Dwn = file ($ templinks);
foreach ($ dwn as $ key => $ val)
list ($ file_id, $ uniq_id, $ puttime) = explode ( "|", $ val);
if (strstr ($ uniq_id == $ _GET [ 'download'])
$ Id = $ file_id
break;
>
>
Тепер у нас є id файлу за яким можна знайти назву самого файлу в базі namefiles.dat і віддати користувачеві. Що власне нам і було потрібно.
Підведемо підсумки. Описаний механізм дозволяє формувати посилання з керованим часом існування і випадковим параметром запиту. Що це дає? Завантажити потрібний файл юзер зможе тільки зайшовши на потрібну сторінку вашого сайту. Неможливо буде завантажити файл з іншого домену по лінку сформованому на вашому сайті, оскільки він має кінцеве короткий час існування. Ну, а вобщем це корисний спосіб для збереження і примноження трафіку вашого сайту.