一个PHP脚本让用户从我的网站上下载一个文件,而不会泄露我网站上的实际文件链接?
这个问题说明了一切..我如何让用户从我的网站下载文件,并且而不是让他们看看该文件来自哪个链接?我知道可能需要类似download.php这将作为网关,但过去的阶段,我不知道接下来的脚本...如果它困扰你编写整个代码,一些函数我应该需要使用的名字将非常方便!一个PHP脚本让用户从我的网站上下载一个文件,而不会泄露我网站上的实际文件链接?
找到一种识别要下载的文件的方法(例如,与数据库中某行的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;
?>
可以使用header()
功能是documented here
我建议向下滚动,并期待在第1例。它似乎正在做你想要的东西。
只是Shedo Chung-Hee Surasi的一个注释 - 第二个例子还告诉你如何指定一个不同于原始文件名的文件名(正如你在你的问题中提到的那样)。 – jerebear 2010-07-15 04:27:53
你不能让别人从URL下载文件而不让他们知道URL。在HTTP规范下是不可能的。下载的任何东西都有一个URL。
但是,您可以拥有只能使用一次的下载网址,或者需要通过POST方法传递一些特定信息。您在GET或POST变量中检查一个标记,并在该标记使用一次后使其无效。
我记得使用类似的技术在csv文件中导出电子邮件地址。 Safari的mac为内容类型标头忽略。 – Keyo 2010-07-15 05:15:59
这个脚本是否支持htaccess?我有一个htaccess规则来拒绝在方法被绕过的情况下访问真正的URL。 “所有人都拒绝”是否也会影响到这个脚本? – 2016-12-28 19:36:38
@CodigosTutoriales,.htaccess文件中的规则只会影响来自客户端的Web请求。他们不会阻止您的服务器代码读取服务器上的文件。 – zneak 2016-12-28 19:39:23