使用php下载临时链接的文件

时间:2010-08-26 13:19:14

标签: php

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

3 个答案:

答案 0 :(得分: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);

从生产中获取并经过测试

答案 1 :(得分:2)

我不会将临时链接绑定到IP,它不是非常用户友好的解决方案。

将购买的媒体存储在表格中,例如:

  • 媒体ID(这是指描述媒体详细信息的另一个表)
  • 唯一令牌(这将标识购买)
  • 客户ID
  • 总下载量(也许您想要启用下载5次)
  • 令牌到期(如果您想限制对此的访问)

下载网址必须包含唯一令牌和更多数据(用户的哈希电子邮件等),以使网址更加独特和安全。

示例网址 http://example.com/purchase/nc9o32ocrn8of4nv348/989934ov9344b

第一个哈希持有购买本身,而第二个哈希识别用户。成功识别后,您可以像Kristoffer said一样提供文件。

答案 2 :(得分: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);