У меня есть простая служба загрузки файлов, написанная на PHP, которая также включает скрипт, который контролирует скорость загрузки, отправляя пакеты ограниченного размера, когда пользователь запрашивает загрузку с этого сайта.
Я хочу внедрить систему, ограничивающую количество одновременных / одновременных загрузок до 1 на пользователя, если они не являются премиум-членами. В приведенном выше сценарии загрузки я могу использовать базу данных MySQL для хранения записи, которая имеет: (1) идентификатор пользователя; (2) идентификатор файла; (3) когда загрузка была начата; и (4) когда был отправлен последний пакет, который обновляется каждый раз, когда это делается (если скорость DL ограничена 150 кБ / с, то после каждых 150 кБ эта запись обновляется и т. д.).
Однако пока запись в базе данных будет удалена только после успешного завершения загрузки - в конце сценария, после завершения загрузки, запись удаляется из таблицы:
insert DB record;
while (download is being served) {
serve packet of data;
update DB record with current date/time;
}
// Download is now complete
delete DB record;
Как я могу определить, когда загрузка была отменена? Нужно ли было бы, чтобы задание Cron (или что-то подобное) обнаруживало, существует ли существующая запись для загрузки более X минут / часов? Или я могу что-то сделать, чего мне не хватает?
Надеюсь, я объяснил это достаточно хорошо. Я не думаю, что размещение определенного кода не требуется; Меня больше интересует логистика того, как / можно ли это сделать. Если нужно конкретное, я с радостью предоставлю.
ПРИМЕЧАНИЕ: я знаю, как определить, был ли файл успешно загружен; Мне нужно знать, как определить, был ли он отменен, прерван или иным образом остановлен (а не просто приостановлен). Это будет полезно для остановки параллельных загрузок, а также для предотвращения ситуации, когда пользователь отменяет загрузку № 1 и пытается запустить загрузку № 2 только для того, чтобы убедиться, что сайт утверждает, что он все еще загружает файл № 1.
РЕДАКТИРОВАТЬ: Вы можете найти мой скрипт загрузки здесь: http://codetidy.com/1319/ - он уже поддерживает загрузку нескольких частей и возобновление загрузки.