PHP下载页面

时间:2011-10-17 21:23:45

标签: php

这些PHP下载页面(例如somesite.com/download.php?id=somefile)是如何工作的?

我最初想过一个用于处理计数器的页面,然后只是将用户重定向到文件URL(这似乎是其他地方给出的唯一答案,但我不知道这是如何提供所有功能的),但是除此之外,这不会阻止直接链接,也不允许我用密码保护某些文件。有些网站甚至似乎实施了下载速度限制(基于用户帐户),队列用户等等。

5 个答案:

答案 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或在查询中发送密码来轻松保护文件。