Download [php]
У каждого пользователя свои привелигии:
1 - Прохожий
2 - Уникальный посититель
3 - Модератор
Устанавливаем лимит на закачки - 6. То есть могут качать одновременно 2 модератора или 6 прохожих, или 3 прохожих и 1 модератор и т.д. При запросе файла, скрипт проверяет кол-во людей, качающих на данный момент и их привелигии, если есть свободное место, то отдает фаил, иначе выдает сообщение Server is full... Ну и т.д. и т.п. Всё знаю как сделать, вот только как проверить сколько человек качают не знаю... люди добрые помогите решить проблему...
Туповатый, но работоспособный вариант. При начале закачки записывай куда-нибудь время начала, и примерное время окончания(размер файла дели на очень среднюю скорость). При попытке закачки проверяй эту таблицу, и удаляй строки, относящиеся к уже завершённым закачкам. Потом смотри на количество "живых" строк и принимай решение.
Пока ничего лучше в голову не приходит :)
Плясат алгорит нужно от реализации прав доступа, а не подсчета какого-то там гипотетического времени скачивания.
Плясат алгорит нужно от реализации прав доступа, а не подсчета какого-то там гипотетического времени скачивания.
Прав доступа к чему? То есть правильно ли я понимаю, что такого ограничение на PHP не реализовать?
Прав доступа к чему? То есть правильно ли я понимаю, что такого ограничение на PHP не реализовать?
Вот поэтому я тебя и срашиваю, как же ты собираешь реализовать регулирования доступа? Напиши уж, если не код, то хотя бы алгиртм работы такого скрипта.
При запросе файла, проверяем качает ли ктонить (как предложил Ailer)
Неудачный способ.
если нет то присваеваем этому файлу новое имя (proga.exe -> proga_12321234.exe) и записываем его куданить, а потом отдаем его...
Это действительно самый напрашиваемый способ. При этом у тебя получить как раз организовать механизм скачивания одним человек.
Если с ходу не доходит поясняю как это выглядит с виде алгоритма.
1) Пользователь_1 обращается к скрипту с запросом на скачивание файла. Скрипт переименовывает скичиваемый файл на случайно имя и отдает URL файла. Пользователь_1 начинает качать. Скрипт завершает свою работу.
2) Пользователь_1 не завершил скачивание, а скрипт запустил другой и пользователь и потребовал файл. Скрипт сгенерировал новое случайное имя и попытался переименовать файл. Но сервер не даст это сделать и функция переименования вернет FALSE. Вот по этому результату мы и поймет, что пользователь_1 еще не завершил загрузку. Шлем пользователя_2 на .... 30 сек. в ожидание и повторяем попытку.
В общих чертах будет так.
П'аходу дела это один из возможных вариантов.
Скоросто download можно проверить через upload :D
Неудачный способ.
Тоже самое, что и Ваш...
Если с ходу не доходит
Все до меня прекрасно доходит!
1) Пользователь_1 обращается к скрипту с запросом на скачивание файла. Скрипт переименовывает скичиваемый файл на случайно имя и отдает URL файла. Пользователь_1 начинает качать. Скрипт завершает свою работу.
А на мой взгляд все равно придется записывать случайное имя файла…
пользователь и потребовал файл. Скрипт сгенерировал новое случайное имя и попытался переименовать файл. Но сервер не даст это сделать и функция переименования вернет FALSE. Вот по этому результату мы и поймет, что пользователь_1 еще не завершил загрузку. Шлем пользователя_2 на .... 30 сек. в ожидание и повторяем попытку.
В таком случае, функция переименования, будет всегда возвращать FALSE, так как пользователь_2 будет запрашивать неверное имя файла, лишь потому, что пользователь_1 переименовал файл и не записал случайное имя файла.
П'аходу дела это один из возможных вариантов.
Я пока вижу только один – кто-нибудь может предложить еще чего?
Скоросто download можно проверить через upload :D
Естественно через upload, только как? Я имею в веду максимальная скорость download у пользователя, при регистрации записать в базе...
Слышал надо, определенное кол-во, каких то пакетов отравлять пользователю. Потом высчитывать время отправки определенных KB. Только как это пишется я не пойму... Вот пример. Как видите - написано на PHP.
В таком случае, функция переименования, будет всегда возвращать FALSE, так как пользователь_2 будет запрашивать неверное имя файла, лишь потому, что пользователь_1 переименовал файл и не записал случайное имя файла.
Не будет. Если вести базу имен.
Линк любопытный. Видно без PEAR не обошлось, либо личные наработки этого ресурса. Есть над чем подумать.
А сам-то то что надумал? А?
Не будет. Если вести базу имен.
Линк любопытный. Видно без PEAR не обошлось, либо личные наработки этого ресурса. Есть над чем подумать.
А сам-то то что надумал? А?
Хочу сделать так:
1. Создаем базы: file_name (file_name , changeable_name), now_downloads (login , status , finish_time , file_name), turn_uesrs (login , start_time , finish_time).
2. Пихаю все имена файлов в базу(file_name).
3. Пользователь регистрируется на сайте. Записывается: вся личная информация, максимальная скорость download и статус(прохожий[1], пользователь[2], модератор[3]) пользователя.
4. Пользователь запрашивает имя файла (file_name). Проверяем базу (turn_users) на наличие пользователя, запросившего файл. Если есть такой: проверяем время его начала, совпадает ли с настоящим -+ 3 мин или нет. Если да, то идет на 6-ой пункт, иначе выводим сообщение: до Вашей очереди осталось: … А если нет такого, проверяем: есть ли вообще в базе (turn_users) кто-нибудь. Если есть, то находим самый большой finish_time и прибавляем к нему высчитанное время, когда закончит качать пользователь, если начнет с начала найденного наибольшего finish_time и это будет finish_time нынешнего пользователя. Потом записываем это все в базу (turn_users) и выводим сообщение: Сервер переполнен! Вас поставили на очередь. Ваша очередь подойдет через: … А если база оказалась пустой, то идем на 5-ый пункт.
5. Скрипт проверяет базу (now_downloads) на все находящиеся статусы (status), складывает их и если >= 5, высчитывает время (start_time), когда его статус сможет вместиться в 5; высчитывает время (finish_time), когда пользователь закончит качать после высчитанного время (start_time). Записываем все это в базу (turn_users). Выводим сообщение: “Сервер переполнен! Вас поставили на очередь. Ваша очередь подойдет через: {start_time - now_time}. Если с {start_time} до {start_time + 5 мин.} Вы не повторите попытку, то Вас удалят из очереди”.
6. Cкрипт пытается изменить имя файла (Changeable_name). При удачной попытки в базе (file_name) записывается новое имя файла (Changeable_name) и в базе (now_downloads) записывается: логин пользователя (login); статус пользователя (status); максимально приблизительное, время окончания download (finish_time); имя файла(file_name) и отдается файл. При неудачной: найти в базе (now_downloads) приблизительное время окончания (finish_time), данного файла и ставим пользователя в очередь, как в пункте 5.
Написал в короткой форме! Может кто-нибудь меня поправит или добавит чего?
Интересный скрипт! Много нового узнал... Если често - даже и не думал искать в нете скрипт, как-то сам задался задачай написать и все! С него и начну. Просто из него сделаю, что мне надо! Спасибо alekciy!