PHP-直接访问站点上的某个资源的绝对路径就可以下载,为什么还要写下载代码?

发布于 2016-10-11 02:47:43 字数 771 浏览 1282 评论 4

有些时候我们想提供下载功能,直接把文件上传到某一目录,然后访问该目录下的文件,就可以下载该文件,比如http://www.xxx.com/uploads/test.rar.
但是很多时候我会会去写一些下载函数,

$file = basename($flash_name);
if (file_exists($flash_name)) {
$fp = fopen($flash_name, "rb");
$contents = "";
while(true) {
$data = fread($fp, 1024);
if (strlen($data) == 0) {
break;
}
$contents .= $data;
}
fclose ($fp);

header("Content-type: application/x-www-form-urlencoded");
header("Content-disposition: attachment; filename= $file");
header("Content-Length: " . strlen($contents));

print $contents;
}
exit;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

晚风撩人 2017-09-12 00:11:32

很少直接在网站用绝对路径方式显示下载文件的,一首先考虑到安全,服务器文件存放路径暴漏了很容易受到攻击,而下载程序更灵活些,你可以把文件放到服务器某个目录下或其他服务器(不用web同服务器)在你下载程序里进程文件目录转换;
二是、 考虑到业务需求,有时候你业务上要统计下载量、下载者的一些信息,比如ip等,这个只能在下载程序里进行逻辑处理;
三是、下载程序更容易防攻击,比如有些人就无聊频繁访问你的绝对地址文件下载,占用你服务器资源和带宽,而在下载程序里你可以进行限制。

如果你要下载的是一个txt文档,如果直接放文件的绝对路径,浏览器不会下载而是打开,这个应该算是一个原因吧。

夜无邪 2017-06-21 23:47:32

我再补充一个,就是如果用户访问量大的情况下,直接下载会导致文件服务器压力太大而导致奔溃,一般通过子域名分发到不同服务器进行均衡,比如,file1.xxx.com,file2.xxx.com...
很多网站都是怎么弄的,如果没有下载逻辑,这一部分就不好控制了,其他的上面的朋友已经都覆盖了

甜柠檬 2017-03-31 07:41:55

不暴露直接地址,然后可以实现一些比如下载计数之类的功能。还可以检查防盗链。
如果你提供直接地址的话,别人就可能直接通过你的地址盗链你的文件。

泛泛之交 2016-10-23 15:38:13

可以进行下载权限控制
比如在CSDN上下载资源会要求登录,还会扣除积分这种需求都需要用代码来控制下载

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文