Хостинг для настоящих Митьков
Устраиваем бесплатное файлохранилище для платного хостинга
Вступление
У нас есть платный хостинг и платим мы за него примерно 5
американских рублей в месяц. Места на сервере, конечно, выделили
не так много, как хотелось, а разместить там хочется ой как много!
Выход есть, и это – narod.ru :).
Что за система?
Конечно, на народе мы разместим весь нужный софт, поскольку
ам нам дадут неограниченное пространство, а потом напишем
хитроумную систему, которая будет лежать у нас на платном хостинге.
С помощью этой системы любой юзер сможет скачивать наши файлы,
а ссылки будут вести на платный хостинг и выглядеть они будут так:
http://site.ru/download/download.php?id
Система будет состоять из четырех файлов:
1. Скрипт добавления софта (add.php)
2. Скрипт скачки (download.php)
3. Форма для добавления софта (form_add.php)
4. Скрипт, отображающий софт, который мы добавили (index.php)
Принцип работы
Системы очень прост. С помощью скрипта мы добавляем в таблицу
имя сервера, имя файла и его описание. Скрипт скачки же
просто-напросто выдирает из таблицы данные, соответствующие
номеру id, который передается из скрипта методом GET и
перенаправляет браузер на софт по этим данным.
Система использует базу данных MySQL, так что приконнектимся к
мускулу и выполним простой запрос (листинг 1).
Листинг 1:
CREATE TABLE `download` (
`uid` int(11) NOT NULL auto_increment,
`file` text NOT NULL,
`server` text NOT NULL,
`ops` longtext NOT NULL,
`click` int(11) NOT NULL default '0',
PRIMARY KEY (`uid`)
) TYPE=MyISAM;
Этим запросом мы создаем таблицу download.
Поля и их описания в этой таблице:
- uid – уникальный номер файла;
- file – имя файла;
- server – имя сервера;
- ops – описание файла;
- click – количество скачиваний этого файла.
[начинаем кодить] В скрипте form_add.php будет форма добавления
нового софта. Эта форма будет передавать данные скрипту add.php,
в качестве метода отправки данных в ней мы будем использовать GET.
Сами же данные - это имя сервера, имя файла и описание этого файла,
т.е. в скрипте мы пишем следующие поля:
<input type=text size0 name=filen> - сюда будем вводить имя файла;
<input type=text size0 name=server> - сюда имя сервера;
<input type=text sizeЂ name=ops> - сюда описание самого файла.
Например, мы закачали файл linux.rar на сайт http://mysite.narod.ru.
Отсюда следует, что в поле File name мы должны ввести linux.rar, а в
поле Server name - http://mysite.narod.ru/
Однако, можно и не писать в конце имени сервера знак прямого
слэша «/», тогда придется добавлять его в скрипте, который помещает
все данные в таблицу (add.php), т.е. вместо этой строки
$put = "$server$file"; надо написать $put = "$server/$file";
описание этого скрипта смотри ниже. В файле add.php мы соединяемся
с базой данных MySQL, потом проверяем все передаваемые параметры
на пустые строки и если все нормально, то добавляем эти переменные
в таблицу, пишем так:
mysql_connect($host,$user,"$password"); - здесь $host - имя сервера MySQL;
$user - имя пользователя базы данных; $password - пароль этого
пользователя.
Все эти переменные объявляем в начале скрипта. Далее выбираем базу
данных, в которой лежит созданная нами таблица download:
@mysql_select_db($base) or die("Base Error"); $base - в этой переменной
хранится имя базы, ее так же объявляем в начале.
После этого мы просто обязаны сделать проверку на пустые строки,
описывать, как это делать я не буду (можно посмотреть в исходнике
на диске). Ну и после проверки, если все нормально, добавляем наши
данные в таблицу:
mysql_query("insert into download values('', '$filen', '$server', '$ops','0')");
В этом скрипте нужно обязательно добавить проверку на расширение
закачиваемых файлов, т.е. скрипт должен фильтровать все файлы с
расширениями *.php; *.php3;*.html;*.htm и т.д., но если этим скриптом
будет пользоваться только админ, то никакой фильтрации писать и не
надо. Можно вообще пойти простым путем и сделать фильтрование так,
чтобы скрипт принимал только расширение *.rar, так будет намного проще.
Ах да, здесь нужно добавить еще одну фильтрацию на спецсимволы
в переменных: $filen, $server $ops.
Теперь рассмотрим стартовую страницу. На ней будут выводиться
ссылки и описания всех файлов, что мы добавили. Принцип работы
скрипта похож на работу предыдущего скрипта. Мы также соединяемся
с MySQL, но только вместо добавления в таблицу инфы, мы эту инфу
извлекаем и выводим на экран.
Листинг2:
..здесь соединяемся с MySQL...
print "<body bgcolor=000000 link=orange alink=orange vlink=orange textяffff>";
print "<center><div styleєckground-color:orange;color:000000>Best soft</div></center>";
….
Теперь нам надо взять всю инфу из таблицы, т.е. мы выполняем такой
запрос:
$re=mysql_query("select * from download order by uid desc");
Возникает законный вопрос – а что же такое desc? Рассказываю: это
нужно для того, чтобы тот файл, который добавлен последним,
был в списке вывода первым.
А дальше все просто, мы перебираем весь архив и выводим его на
нашу страничку (листинг 3).
Листинг 3:
while($res=mysql_fetch_array($re))
{
print "<div style='border-left: 1px orange solid;border-right: 1px orange
solid;border-bottom: 1px orange solid;padding:6px'>
<a href='download.php?id=$res[uid]'><b>$res[file]</b></a>
<div class=tekst>$res[ops]<br>
Скачиваний: ($res[click])<br>
</div></div>";
}
При клике на ссылку, скрипту download передается параметр id и
скрипт выдирает из таблицы всю нужную информацию.
В скрипте download.php как всегда соединяемся с MySQL и выполняем
запрос точно такой же, как и в предыдущем скрипте, но здесь уже
необязательно писать desc. Далее, опять перебираем весь полученный
массив и сравниваем переменную $id, полученную из стартовой
страницы, и $res[uid] - это уникальный идентификационный номер
каждой программки. Если они совпадают, то число, стоящее в таблице
в поле click мы увеличиваем на 1 (поле click отвечает за число
скачиваний, если ты не забыл), потом просто делаем перенаправление
на сгенерированный из таблицы адрес (листинг 4).
Листинг 4:
while($res=mysql_fetch_array($re))
{
$click = $res[click];// В этой переменной хранится количество скачиваний
if ($id == $res[uid])// Проверяем совпадение id из формы и uid из таблицы
{
$file = $res[file];
$server = $res[server];
$put = "$server$file";// Генерим адрес программы
$click = $click + 1;
mysql_query("UPDATE download SET click=$click WHERE
uid=$id");
header("location:$put");// А здесь перенаправляем
}
}
Есть и один минус
Этой системы, который не каждый заметит – это то, что при клике на
ссылку появляется стандартное окно закачки и в нем в поле источник
будет написан истинный адрес сервера – откуда юзер качает файл.
Но если пользоваться утилитой типа Flash Get, то там кроме имени
закачиваемого файла больше ничего не увидишь. Вот и все, надеюсь,
всех тех, кто хочет экономить на хостинге, эта статья заинтересовала.
Кстати, для хранения софта лучше пользоваться бесплатным
хостингом www.h1.ru