Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Download [php]

1.9K
29 апреля 2006 года
Ananim
156 / / 15.05.2005
Добрый день! Хочу написать скрипт выдачи файлов, примерно следующего вида:
У каждого пользователя свои привелигии:
1 - Прохожий
2 - Уникальный посититель
3 - Модератор
Устанавливаем лимит на закачки - 6. То есть могут качать одновременно 2 модератора или 6 прохожих, или 3 прохожих и 1 модератор и т.д. При запросе файла, скрипт проверяет кол-во людей, качающих на данный момент и их привелигии, если есть свободное место, то отдает фаил, иначе выдает сообщение Server is full... Ну и т.д. и т.п. Всё знаю как сделать, вот только как проверить сколько человек качают не знаю... люди добрые помогите решить проблему...
17K
30 апреля 2006 года
Ailer
8 / / 30.04.2006
Цитата:
Ну и т.д. и т.п. Всё знаю как сделать, вот только как проверить сколько человек качают не знаю... люди добрые помогите решить проблему...


Туповатый, но работоспособный вариант. При начале закачки записывай куда-нибудь время начала, и примерное время окончания(размер файла дели на очень среднюю скорость). При попытке закачки проверяй эту таблицу, и удаляй строки, относящиеся к уже завершённым закачкам. Потом смотри на количество "живых" строк и принимай решение.
Пока ничего лучше в голову не приходит :)

12
01 мая 2006 года
alekciy
3.0K / / 13.12.2005
Я бы для начала подумал, а КАК скрипт будет ограничивать закачки, если пользователь значет URL файла ;)
Плясат алгорит нужно от реализации прав доступа, а не подсчета какого-то там гипотетического времени скачивания.
1.9K
02 мая 2006 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by alekciy
Плясат алгорит нужно от реализации прав доступа, а не подсчета какого-то там гипотетического времени скачивания.


Прав доступа к чему? То есть правильно ли я понимаю, что такого ограничение на PHP не реализовать?

1.9K
02 мая 2006 года
Ananim
156 / / 15.05.2005
Есть еще такой способ: Каждый фаил одновременно можно качать только одному. При запросе файла, проверяем качает ли ктонить (как предложил Ailer), если нет то присваеваем этому файлу новое имя (proga.exe -> proga_12321234.exe) и записываем его куданить, а потом отдаем его... То есть при каждом скачивании, фаил будет иметь новое имя. Паходу это единственный вариант??? А еще есть вопрос: как проверить скорость download пользователя?
12
02 мая 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
Originally posted by Ananim
Прав доступа к чему? То есть правильно ли я понимаю, что такого ограничение на PHP не реализовать?


Вот поэтому я тебя и срашиваю, как же ты собираешь реализовать регулирования доступа? Напиши уж, если не код, то хотя бы алгиртм работы такого скрипта.

12
02 мая 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
Originally posted by Ananim
При запросе файла, проверяем качает ли ктонить (как предложил Ailer)


Неудачный способ.


Цитата:

если нет то присваеваем этому файлу новое имя (proga.exe -> proga_12321234.exe) и записываем его куданить, а потом отдаем его...


Это действительно самый напрашиваемый способ. При этом у тебя получить как раз организовать механизм скачивания одним человек.

Если с ходу не доходит поясняю как это выглядит с виде алгоритма.
1) Пользователь_1 обращается к скрипту с запросом на скачивание файла. Скрипт переименовывает скичиваемый файл на случайно имя и отдает URL файла. Пользователь_1 начинает качать. Скрипт завершает свою работу.
2) Пользователь_1 не завершил скачивание, а скрипт запустил другой и пользователь и потребовал файл. Скрипт сгенерировал новое случайное имя и попытался переименовать файл. Но сервер не даст это сделать и функция переименования вернет FALSE. Вот по этому результату мы и поймет, что пользователь_1 еще не завершил загрузку. Шлем пользователя_2 на .... 30 сек. в ожидание и повторяем попытку.

В общих чертах будет так.


Цитата:
[BПаходу это единственный вариант??? А еще есть вопрос: как проверить скорость download пользователя?


П'аходу дела это один из возможных вариантов.
Скоросто download можно проверить через upload :D

1.9K
02 мая 2006 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by alekciy
Неудачный способ.


Тоже самое, что и Ваш...

Цитата:
Originally posted by alekciy
Если с ходу не доходит


Все до меня прекрасно доходит!

Цитата:
Originally posted by alekciy
1) Пользователь_1 обращается к скрипту с запросом на скачивание файла. Скрипт переименовывает скичиваемый файл на случайно имя и отдает URL файла. Пользователь_1 начинает качать. Скрипт завершает свою работу.


А на мой взгляд все равно придется записывать случайное имя файла…

Цитата:
Originally posted by alekciy
пользователь и потребовал файл. Скрипт сгенерировал новое случайное имя и попытался переименовать файл. Но сервер не даст это сделать и функция переименования вернет FALSE. Вот по этому результату мы и поймет, что пользователь_1 еще не завершил загрузку. Шлем пользователя_2 на .... 30 сек. в ожидание и повторяем попытку.


В таком случае, функция переименования, будет всегда возвращать FALSE, так как пользователь_2 будет запрашивать неверное имя файла, лишь потому, что пользователь_1 переименовал файл и не записал случайное имя файла.

Цитата:
Originally posted by alekciy
П'аходу дела это один из возможных вариантов.


Я пока вижу только один – кто-нибудь может предложить еще чего?

Цитата:
Originally posted by alekciy
Скоросто download можно проверить через upload :D


Естественно через upload, только как? Я имею в веду максимальная скорость download у пользователя, при регистрации записать в базе...
Слышал надо, определенное кол-во, каких то пакетов отравлять пользователю. Потом высчитывать время отправки определенных KB. Только как это пишется я не пойму... Вот пример. Как видите - написано на PHP.

12
02 мая 2006 года
alekciy
3.0K / / 13.12.2005
Цитата:
Originally posted by Ananim
В таком случае, функция переименования, будет всегда возвращать FALSE, так как пользователь_2 будет запрашивать неверное имя файла, лишь потому, что пользователь_1 переименовал файл и не записал случайное имя файла.


Не будет. Если вести базу имен.

Линк любопытный. Видно без PEAR не обошлось, либо личные наработки этого ресурса. Есть над чем подумать.

А сам-то то что надумал? А?

1.9K
03 мая 2006 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by alekciy
Не будет. Если вести базу имен.
Линк любопытный. Видно без 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.

Написал в короткой форме! Может кто-нибудь меня поправит или добавит чего?

12
03 мая 2006 года
alekciy
3.0K / / 13.12.2005
Ну если тебе алгоритм работы ясен, пиши код.
12
04 мая 2006 года
alekciy
3.0K / / 13.12.2005
Кстати поиск еще ни кто не отменял:
Push Me!
1.9K
04 мая 2006 года
Ananim
156 / / 15.05.2005
Цитата:
Originally posted by alekciy
Кстати поиск еще ни кто не отменял:
Push Me!


Интересный скрипт! Много нового узнал... Если често - даже и не думал искать в нете скрипт, как-то сам задался задачай написать и все! С него и начну. Просто из него сделаю, что мне надо! Спасибо alekciy!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог