2010-08-26 146 views
2

我正在开发一个项目,用户可以购买媒体文件。 付款处理后,我想让他们下载文件。 我想可以肯定地说我应该有一个临时链接到这些文件。一个链接到用户的IP,可能还有一个时间戳? 问题是我不知道从哪里开始。首先是 。这是做到这一点的方法吗?如果是这样..我怎么继续使用PHP。 (我想我不需要确切的脚本只是提示如何做到这一点,虽然如果有一个现有的脚本,我不介意) 谢谢。使用php下载临时链接文件

回答

6

既然你要处理在PHP中,你可能会藏汉使用登录来检查该文件,如果用户购买了文件,除此之外,代码应该有点像这样:

header('Content-Type: application/force-download'); 

$file = new File(intval($_GET['id'])); 
$fileLocation = dirname(__FILE__) . "/../../upload/fileArchive/" . $file->id . "." . $file->type; 

header('Content-Length:' . filesize($fileLocation)); 
header("Content-Disposition: inline; filename=\"".$file->name."\""); 

$filePointer = fopen($fileLocation,"rb"); 
fpassthru($filePointer); 

采取从生产和测试

2

我不会绑定到IP的临时链接,它不是非常人性化的解决方案。

存储在例如表所购买的媒体:

  • 介质ID(这是指在媒体详细描述的另一个表)
  • 唯一令牌(这将identificate购买者除外)
  • 客户端ID
  • 总下载量(也许你想使下载5次)
  • 令牌到期(如果你想限制这一访问)

下载url必须包含唯一令牌和一些其他数据(用户的散列电子邮件等),以使url更独特和更安全。

样品网址:http://example.com/purchase/nc9o32ocrn8of4nv348/989934ov9344b

首先哈希持有购买本身,而第二个标识用户。成功识别您可以像Kristoffer said这样的文件。

+0

下载页面本身怎么样。我不确定如何设置它,以便隐藏文件的位置。请您详细说明这一部分? 谢谢 – salmane 2010-08-26 13:35:19

0
header('Content-Type: application/force-download'); 
$filee = "r.txt"; 
$fileLocation = dirname(__file__).'/the_sub_folder_for_file/'.$filee; 
header('Content-Length:' . filesize($fileLocation)); 
header("Content-Disposition: inline; filename=\"".$filee."\""); 
$filePointer = fopen($fileLocation,"rb"); 
fpassthru($filePointer);