这些PHP下载页面(例如somesite.com/download.php?id=somefile)是如何工作的?
我最初想过一个用于处理计数器的页面,然后只是将用户重定向到文件URL(这似乎是其他地方给出的唯一答案,但我不知道这是如何提供所有功能的),但是除此之外,这不会阻止直接链接,也不允许我用密码保护某些文件。有些网站甚至似乎实施了下载速度限制(基于用户帐户),队列用户等等。
答案 0 :(得分:2)
通常,这些不会重定向到文件的URL。相反,他们使用readfile()
直接从存储的位置输出URL(通常是在Web根目录之外的某个位置)。解决直接链接,密码保护,排队等问题。速度限制需要在Web服务器端。
答案 1 :(得分:1)
通常使用php函数readfile
完成:
if(is_allowed_to_download()){
header("Content-Disposition: attachment; filename=".basename( $file ));
header("Content-Type: application/octet-stream");
header("Content-Length: ". filesize( $file ) );
header("Content-Transfer-Encoding: binary");
@readfile($file);
exit;
}
使用较少的服务器特定解决方案 - 使用mod_xsend文件为lighttpd和apache发送标头X-SendFile: file-location.exe
(nginx也有一些等价物)。这些稍微好一点,因为http服务器已经过优化,可以提供内容,并允许使用Range
标头(适用于下载加速器)等高级用法。
答案 2 :(得分:0)
他们只追踪了很多关于你的事情 - cookies,IP地址,推荐人链接,浏览器名称。
答案 3 :(得分:0)
这不是特定于PHP的问题。为了使Web浏览器“下载”(无论是静态文件的内容还是动态生成的报告的主体),请设置Content-Disposition header in the HTTP response。 PHP允许您使用header函数设置HTTP标头,因此您的PHP脚本应该在将文件内容流式传输回HTTP客户端之前执行此操作。
答案 4 :(得分:0)
如果您在DownloadFile()函数之前使用某些安全验证,则可以通过使用user_session或在查询中发送密码来轻松保护文件。