以下是问题详情:
1)我想创建动态(基于IP)的下载链接。因此,用户无法使用相同的下载链接下载具有不同IP的文件。
2)在开始实际下载之前,我想使用php记录此下载请求并执行一些检查(验证http referrer)以允许用户下载实际文件。
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文件使用这种方式对最终用户来说已经损坏了。
答案 0 :(得分:1)
在做了一些研究之后,我找到了问题的答案。我只是想我也应该和你们分享。
正如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');
?>
我希望它会帮助你们:)