使用php,apache创建动态,可过期和可恢复的下载链接


Create dynamic, expireable and resumable download link using php, apache

以下是问题详细信息:

1)我想创建动态(基于ip)下载链接。因此,用户无法使用相同的下载链接下载具有不同IP的文件。

2)在开始实际下载之前,我想使用php记录此下载请求并执行一些检查(验证http引用器)以允许用户下载实际文件。

3)我还希望下载文件是可恢复的,并且可以使用下载管理器(具有多个下载实例)下载。还希望限制每次下载允许的最大实例数。

4)文件大小可能超过200 MB。

因此,我正在考虑的解决方案是使用用户IP的md5哈希创建下载链接。http://yourdomain.com/download.php?ip_hash=hash-of-the-ip&file=file-to-download

这只是一个例子,但我们也可以使用 htaccess 创建一个很好的链接。

接下来我应该怎么做?我试图使用

header("Content-Type: $ctype");
header("Content-Length: " . filesize($file));
header("Content-Disposition: attachment; filename='"$fileName'"");
readfile($file);

但是使用此功能,下载不会对最终用户保持可恢复状态。

使用此方法发送大文件可以吗?

经过一些研究,我开始知道使用这种方式对最终用户来说,.exe文件会损坏。

经过更多的研究,我找到了问题的答案。我只是想我也应该和你们分享。

正如 rambo 评论的那样,我们可以使用 apache 服务器mod_xsendfile模块。如果禁用,我们需要启用它。

如果您的 apache 没有此模块,这里是下载模块文件的链接。它几乎适用于所有版本的 apache,也可用于 x32 和 x64。
https://github.com/nmaier/mod_xsendfile

在完成所有自定义验证后,您可以使用以下代码使用此 apache 模块发送文件。

<?php
//We want to force a download box with the filename hello.txt
header('Content-Disposition: attachment;filename=hello.txt');
//File is located at data/hello.txt
header('X-Sendfile: data/hello.txt');
?>

我希望它能帮助你们:)