【发布时间】:2011-03-16 04:59:42
【问题描述】:
问题说明了一切.. 我如何让用户从我的网站下载文件并且不让他们看到该文件来自哪个链接?我知道可能需要像 download.php 这样的东西作为网关,但过了那个阶段,我不知道接下来要编写什么脚本......如果你写整个代码,我应该需要使用的一些函数名称会非常方便!
【问题讨论】:
标签: php file scripting download hide
问题说明了一切.. 我如何让用户从我的网站下载文件并且不让他们看到该文件来自哪个链接?我知道可能需要像 download.php 这样的东西作为网关,但过了那个阶段,我不知道接下来要编写什么脚本......如果你写整个代码,我应该需要使用的一些函数名称会非常方便!
【问题讨论】:
标签: php file scripting download hide
您可以使用header() 函数,即documented here
我建议向下滚动并查看第一个示例。它似乎正在做你想做的事。
【讨论】:
readfile 应该做你想做的事。将实际文件放在 Web 服务器根目录之外,并在传回文件之前需要一些凭据。
【讨论】:
您不能让某人从某个 URL 下载文件而不让他们知道该 URL。在 HTTP 规范下这是不可能的。下载的任何内容都有一个 URL。
但是,您可以有一个只能使用一次的下载 URL,或者需要通过 POST 方法传递一些特定信息。您在 GET 或 POST 变量中检查令牌,并在使用一次后使该令牌失效。
【讨论】:
找到一种方法来识别要下载的文件(例如,与数据库中行的 ID 匹配的 GET 变量,或类似的东西)。确保它是有效的,因为您不希望您的用户能够从您的站点下载任何内容。然后,使用header 和Content-Disposition 告诉浏览器应该下载文件,并使用readfile 输出它。
例如:
<?php
$id = intval($_GET['id']);
$query = mysql_query('SELECT file_path FROM files WHERE id = ' . $id);
if (($row = mysql_fetch_row($query)) !== false)
{
header('Content-Disposition: attachment; filename=' . basename($row[0]));
readfile($row[0]);
}
exit;
?>
【讨论】:
deny from all 也会影响这个脚本吗?