浅谈网站文件下载的原理
来源:互联网 发布:从手机淘宝哪交电费 编辑:程序博客网 时间:2024/05/23 00:02
今晚我们来聊聊网站文件下载的原理,下面我结合代码来给大家分析。
<?php
function download($file_name){
header("Content-type:text/html;charset=utf-8");
// 可以将带中文的文件名进行编码转换,避免file_exists函数不认识中文!
$file_name = iconv("utf-8","gb2312",$file_name);
$path = $_SERVER['DOCUMENT_ROOT']'; // 获取下载文件的绝对目录
$file_path = $path.'/'.$file_name; // 拼接将被下载的文件的路径
if(!file_exists($file_path)){
echo '要下载的文件不存在!';
exit();
}
// 分享下载的文件,必须首先读入到内存
// 注意:任何有关从服务器下载的文件操作,必然需要先在服务端将文件读入内存当中
$fp = fopen($file_path, 'r');
$file_size = filesize($file_path); // 获取文件的总大小
// PHP下载文件需要用到的头
// 通过这句代码客户端浏览器就能知道服务端返回的文件形式
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes"); // 说明文件传输单位是字节
Header("Accept-Length:".$file_size); // 因为是http协议传输,因此必须指明需要接收的长度
// 告诉浏览器下载返回的文件的名称
Header("Content-Disposition: attachment; filename=".$file_name);
$buffer = 1024 ; // 避免给服务器造成很大压力,因此一次只读1024字节
$file_count = 0;
// feof:读取到文件结尾
while(!feof($fp) && $file_count<$file_size){
// 通过fopen,文件已经被放入内存了!现在从内存中读取fread即下载
$file_content = fread($fp, $buffer); // $file_content:每次读到的文件内容
$file_count += $buffer;
echo $file_content; // echo每次读取到的内容,就好比是一点一点的下载
}
fclose($fp);
}
?>
今天我们简单的讲解了文件下载原理,希望会对大家以后做下载方面功能的时候,有些许启发,那样就足够了!
大家可以关注我的微信公众号:iwork,我会每天推送一篇原创文章,让大家都能有所收获!
- 浅谈网站文件下载的原理
- 下载dll文件的网站
- php文件下载的一些浅谈
- 又一个下载恶意文件的政府网站
- 下载网站上INI文件的方法
- wget下载网站的目录文件
- 分享一个dll文件下载的网站
- python实现网站的js文件下载
- 网站下载各种文件的通用解决方案
- Java读取网站需下载的文件
- 浅谈Robots.txt文件给网站带来的好处
- 批量下载网站文件
- 在node.js下浅谈前端下载文件的方法
- php文件下载——断点续传下载的原理
- 文件上传文件浅谈,文件下载分享
- 浅谈网站的买卖
- php文件下载原理
- php文件下载原理
- 跳转远程服务器命令
- 正则表达式
- Oracle本地与远程数据的导入导出
- 关于Android的R文件丢失和Error executing aapt: Return code -1073741819解决方案
- C#实现对本地文件的访问,获取本地文件的地址
- 浅谈网站文件下载的原理
- android绘制view的过程之一---------计算view大小(measure)
- linux命令
- mysql-5.7配置教程及首次启动服务失败解决办法
- 案例丨详解当当网的分布式作业框架elastic-job
- while(*i++=*t++)都做了些什么。
- 递归创建级联目录之Python_VS_PHP
- C++模板元编程(一)
- ProgressBar 颜色的设置