Небольшая задачка, но может быть полезна в будущем. Чего надо сделать:
Дать возможность пользователю скачивать файлы с сервера.
Одновременно, один пользователь может качать один файл.
Предусмотреть некоторое ограничение скорости, скачивания.
Простота и легкость применения.
Возможность докачки файлов.
Вроде, все. И так приступим. После некоторых размышлений и поиска по просторам Гугла, был найден, практически готовый вариант, реализующий все основные функций нашей задачи. Так как я ленивый, то я зарание благодарю неназванного автора с сайта blog.webmasterschool.ru, за столь полезную информацию.
Для начала приведу полную версию его кода для раздачи файлов через php
// лимит времени выполнения set_time_limit(0);
// скорость скачивания - 128КБ в сек. $speed = 1024*128; // имя файла $filename = 'doc.pdf'; // размер файла $filesize = filesize($filename); // смещение от начала файла $range = 0;
while( is_already_download()){ // спим пока у пользователя есть активные потоки sleep(1); }
// открываем файл на чтение $f = fopen($filename, 'rb');
// удаляем информацию о соединении из БД mysql_query("DELETE FROM `sessions` WHERE `session_ip`='".$_SERVER['REMOTE_ADDR']."' LIMIT 1");
function is_already_download(){ // проверяем на наличие соединений от пользователя $res = mysql_query("SELECT `session_ip` FROM `sessions` WHERE `session_ip`='".$_SERVER['REMOTE_ADDR']."' LIMIT 1"); if(mysql_num_rows($res)){ returntrue; }else{// если запись отсутствует, то добавляем mysql_query("INSERT INTO `sessions` VALUES ('".$_SERVER['REMOTE_ADDR']."')"); returnfalse; } } ?>
В чем суть. Имеем некоторый файл, который хотим отдать, имеем юзверя, который хочет его получить. А дальше отдаем одно другому с помощью fread(), паралелльно проверяя не качает ли наш пользователь еще чего. Вроде все. Для начала немного, но в качестве базы этот код в самый раз. В следующей части, мы уберем БД, добавим просмотр доступных файлов и получим в итоге 3 файла, для автономной работы.
Как всегда премного благодарен сайту за информацию.