Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

  Раздел: Компьютерная документация -> Интернет технологии -> PHP

 

Временные ссылки на php. Что это такое и с чем их едят?

Временные ссылки на php. Что это такое и с чем их едят? Все очень просто. Часто при построении какого-либо php движка возникает необходимость размещения на страницах сайта, которым будет управлять этот движок, ссылок на скачивание различных архивов с программами, изображениями, шаблонов сайтов и т. п. В простейшем случае все это можно снабжать прямыми линками на архивы, а сами архивы размещать в незащищенной папке своего домена. Но такой путь не совсем верный. Во-первых, линки на архивы могут быть скопированы на другие ресурсы и скачивать их можно будет даже не заходя на ваш сайт. Во-вторых, из-за того, что файлы будут размещены в незащищенной папке они могут быть повреждены или даже стерты злоумышленниками.

Поэтому наилучший способ, это отдавать линки на скачивание архивов с сайта по так называемым временным ссылкам формируемым средствами PHP. Архивы при этом могут быть запрятаны в любую папку любой директори сайта и защищены от постороннего доступа файлом .htaccess.

Каков же механизм формирования временных ссылок? Необходимо создать базу с двумя таблицами. В первой будут находиться уникальные названия файлов для скачивания с их атрибутами - расширение, описание, и т. п. В другой будут создаваться временные строки с уникальными названиями файлов, случайный хеш и время создания записи. Строки второй таблицы должны формироваться при переходе на страницу для скачивания файла. И какраз на базе второй таблицы и будут формироваться временные линки на скачивание которые будут содержать в себе случайный хеш.

Задача 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 < count($arruniqid); $i++)
{
// строки таблицы временных уник. id
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, который передан в строке запроса файла. Например строка запроса файла выглядит так http://.../templinks.php?getlink=001

if($_GET['getlink'])
{
// матрица названий файлов
$arrtbfl = file($namefiles);
foreach($arrtbfl as $key => $val)
{
list($id,$descr,$filename) = explode("|",$val);
if($id == $_GET['getlink'])
{
list($id,$descr,$filename) = explode("|",$val);
$nowid = $id;
break;
}
}
// генерировать уник. id
$arrtbunq = file($templinks);
$uniq_id = md5( uniqid(rand(), 1) );
array_push($arrtbunq, "$nowid|$uniq_id|$currtime\n");
// новая строка уник. id
$newtbunq = implode("",$arrtbunq);
// записать файл базы обратно
$fp=fopen($templinks,"w");
@fwrite ($fp,$newtbunq);
fclose($fp,$templinks);
// Ссылка для скачивания
$shlink = "href=http://.../templinks.php?download=$uniq_id";
}

Третья часть - это переход по сформированному временному линку для скачивания нужного файла. Для этого нужно пройтись по базе временных линков и найти какой строке базы соответствует наличие там $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 и отдать юзеру. Что собственно нам и требовалось.

Подведем итоги. Описанный механизм позволяет формировать ссылки с управляемым временем существования и случайным параметром запроса. Что это дает? Скачать нужный файл юзер сможет только зайдя на нужную страницу вашего сайта. Невозможно будет скачать файл с другого домена по линку сформированному на вашем сайте, поскольку он имеет конечное короткое время существования. Ну, а вобщем это полезный способ для сохранения и приумножения трафика вашего сайта.

Автор: Yury Gusin
Источник: www.webscript.ru



  Добавить закладку на материал: 


Ссылки по теме
Внутренние функции
Обработка строк в РНР
PHP и всё такое...
Пишем PHP код, устойчивый к ошибкам
Полезные скрипты на PHP
Почтовые функции в РНР
Полезные функции для работы с файловой системой

Вся документация PHP

 

Компьютерная документация от А до Я - Главная

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.