【发布时间】:2011-10-23 04:47:41
【问题描述】:
我有一个简单的文件上传服务,用 PHP 编写,它还包括一个脚本,当用户请求从该站点下载时,它通过发送有限大小的数据包来控制下载速度。
如果他们不是高级会员,我想实施一个系统,将每个用户的并行/同时下载限制为 1 个。在上面的下载脚本中,我可以使用 MySQL 数据库来存储具有以下内容的记录: (1) 用户 ID; (2) 档案编号; (3) 何时开始下载; (4) 发送最后一个数据包的时间,每次完成时都会更新(如果 DL 速度限制为 150 kB/秒,那么在每 150 kB 之后,更新此记录,等等)。
然而,到目前为止,数据库记录只有在下载成功完成后才会被删除——在脚本结束时,下载完成后,记录会从表中删除:
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/——它已经支持多部分下载和下载恢复。
【问题讨论】: