PHP-直接访问站点上的某个资源的绝对路径就可以下载,为什么还要写下载代码?
有些时候我们想提供下载功能,直接把文件上传到某一目录,然后访问该目录下的文件,就可以下载该文件,比如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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
很少直接在网站用绝对路径方式显示下载文件的,一首先考虑到安全,服务器文件存放路径暴漏了很容易受到攻击,而下载程序更灵活些,你可以把文件放到服务器某个目录下或其他服务器(不用web同服务器)在你下载程序里进程文件目录转换;
二是、 考虑到业务需求,有时候你业务上要统计下载量、下载者的一些信息,比如ip等,这个只能在下载程序里进行逻辑处理;
三是、下载程序更容易防攻击,比如有些人就无聊频繁访问你的绝对地址文件下载,占用你服务器资源和带宽,而在下载程序里你可以进行限制。
如果你要下载的是一个txt文档,如果直接放文件的绝对路径,浏览器不会下载而是打开,这个应该算是一个原因吧。
我再补充一个,就是如果用户访问量大的情况下,直接下载会导致文件服务器压力太大而导致奔溃,一般通过子域名分发到不同服务器进行均衡,比如,file1.xxx.com,file2.xxx.com...
很多网站都是怎么弄的,如果没有下载逻辑,这一部分就不好控制了,其他的上面的朋友已经都覆盖了
不暴露直接地址,然后可以实现一些比如下载计数之类的功能。还可以检查防盗链。
如果你提供直接地址的话,别人就可能直接通过你的地址盗链你的文件。
可以进行下载权限控制
比如在CSDN上下载资源会要求登录,还会扣除积分这种需求都需要用代码来控制下载