一个 PHP 脚本让用户从我的网站下载文件而不显示我网站中的实际文件链接?
Posted
技术标签:
【中文标题】一个 PHP 脚本让用户从我的网站下载文件而不显示我网站中的实际文件链接?【英文标题】:A PHP script to let users download a file from my website without revealing the actual file link in my website? 【发布时间】:2011-03-16 04:59:42 【问题描述】:问题说明了一切.. 我如何让用户从我的网站下载文件并且不让他们看到该文件来自哪个链接?我知道可能需要像 download.php 这样的东西作为网关,但过了那个阶段,我不知道接下来要编写什么脚本......如果你写整个代码,我应该需要使用的一些函数名称会非常方便!
【问题讨论】:
【参考方案1】:您可以使用header()
函数,即documented here
我建议向下滚动并查看第一个示例。它似乎正在做你想做的事。
【讨论】:
只是 Shedo Chung-Hee Surasi 的注释-第二个示例还向您展示了如何指定与原始文件名不同的文件名(正如您在问题中提到的那样)。 【参考方案2】:readfile 应该做你想做的事。将实际文件放在 Web 服务器根目录之外,并在传回文件之前需要一些凭据。
【讨论】:
【参考方案3】:您不能让某人从某个 URL 下载文件而不让他们知道该 URL。在 HTTP 规范下这是不可能的。下载的任何内容都有一个 URL。
但是,您可以有一个只能使用一次的下载 URL,或者需要通过 POST 方法传递一些特定信息。您在 GET 或 POST 变量中检查令牌,并在使用一次后使该令牌失效。
【讨论】:
【参考方案4】:找到一种方法来识别要下载的文件(例如,与数据库中行的 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;
?>
【讨论】:
我记得使用类似的技术在 csv 文件中导出电子邮件地址。 Safari for mac 忽略了 content-type 标头。 这个脚本是 htaccess-proof 的吗?我有一个 htaccess 规则来拒绝访问真实 URL,以防该方法被绕过。deny from all
也会影响这个脚本吗?
@CodigosTutoriales,.htaccess 文件中的规则仅影响来自客户端的 Web 请求。它们不会做任何事情来阻止您的服务器代码读取服务器上的文件。以上是关于一个 PHP 脚本让用户从我的网站下载文件而不显示我网站中的实际文件链接?的主要内容,如果未能解决你的问题,请参考以下文章
让用户将视频从我的站点服务器上传到他们的 youtube 频道