我一直在试图弄清楚这一点:
我正在用 PHP 创建一个文件托管网站,我想知道如何将用户每天的带宽限制为 10Gb,这样他们就可以下载 - 就像 RapidShare 一样,直到他们的会话过期。然后他们会得到 25Gb 的退款。
我可以使用什么类型的上限来监视他们的文件下载会话(包括恢复)?
我知道我必须对块数据或已完成的总块做一些事情,然后我才能计算出它们的总块。
答案1
您可以将用户的会话 ID 连同他们已下载的数据量一起存储在数据库中。每次他们下载文件时,检查他们的current_usage + size_of_file < 100mb
。如果是,则允许下载,否则向他们显示错误。每天将每个人的 重置current_usage
为0
。
答案2
如果您想创建一个具有此类限制的文件托管网站,我认为您需要一个特定的 PHP 脚本来提供要下载的文件,就像 incrediman 所说的那样。如果您对 PHP 和 Web 开发不太熟悉,我建议您也查看这篇文章:http://onlamp.com/pub/a/php/2000/09/15/php_mysql.html
但最终的核心思想是,最终用户将始终访问相同的脚本(假设您将其命名为“download.php”),并且您将使用查询字符串之类的东西来动态选择要提供的内容。因此,要下载类似“lenna.jpg”的文件,他们会访问类似于“www.yoursite.ex/download.php?file=lenna.jpg”的 URL。
因为这样做,你将把下载集中在一个地方/脚本中(这称为信息专家模式/原理)你还可以通过一个中心位置来记录用户在会话期间下载了多少内容(PHP 内置了对简单会话信息的支持……请参阅http://php.net/manual/en/features.sessions.php) 并在下载了足够多的数据后,设置一个中心位置来阻止它们。
答案3
此外,您应该知道,您可以使用 php 来启动下载,如果您想跟踪下载,这就是您应该做的事情。如果您只是链接到文件,那是行不通的。因此,请使用脚本来启动下载,并以此方式增加下载次数。
有关使用脚本启动下载的更多信息:http://www.ryboe.com/tutorials/php-headers-force-download