打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
php使用http请求头实现文件下载

 众所周知php对http协议的依赖特别强,像java或者asp.net在某些情况下可以不依赖http例如asp.net的winform,对php来说文件下载可以使用http的请求头加上php的IO就可以实现了

1.先来看下下载所要用的的请求头

 

 header("Content-type:application/octet-stream"); header("Accept-Ranges:bytes"); header("Accept-Length:".$file_Size); header("Content-Disposition: attachment; filename=".$filename);


content-type就不解释了,Accept-Ranges表示接收数据的类型或者范围,图片属于二进制的东西所以需要使用字节的方式传输,Accept-Lenght表示接收的大小,php文件下载需要告诉浏览器下载的文件有多大,最后一个是附件只需要把文件名给过去就可以,这个名称就是下载时显示的文件名称。

 


2.php的文件操作出现的比较早,文件名是中文的时候需要注意转码

 

$filename=iconv("UTF-8","GB2312",$filename);


3.php的文件下载机制是首先apcahe把文件信息读入服务器内存,然后使用请求头把文件二进制信息通过浏览器传给客户端

 

 

//判断路径是否存在          if(!file_exists($filepath)){        echo "文件不存在";        return;     }     $fp=fopen($filepath,"r");     //取得文件大小     $file_Size=filesize($filepath);           header("Content-type:application/octet-stream");     header("Accept-Ranges:bytes");     header("Accept-Length:".$file_Size);     header("Content-Disposition: attachment; filename=".$filename);     $buffer=1024;     $buffer_count=0;         while(!feof($fp)&&$file_Size-$buffer_count>0){       $data=fread($fp,$buffer);        $buffer_count+=$buffer;       echo $data;            }        fclose($fp);


feof用来判断文件是否已经读到了末尾,fread用来把文件读入缓冲区,缓冲区的大小是1024,一边读取一边把数据输出到浏览器。为了下载的安全性每次读数据都进行字节的计数。文件读取完毕后关闭输入流

 


3.上面的代码有的时候不好使,可以清空(擦掉)输出缓冲区,使用下面的代码即可

 

ob_clean();


来看下运行效果图

 

下载之后文件也没有任何的问题

下面是全部代码

 

<?php   function downloadFile($name){     ob_clean();         $filename=$name;     $filename=iconv("UTF-8","GB2312",$filename);           $filepath="E:\\otherphp\\download\\download\\".$filename;            //判断路径是否存在          if(!file_exists($filepath)){        echo "文件不存在";        return;     }     $fp=fopen($filepath,"r");     //取得文件大小     $file_Size=filesize($filepath);           header("Content-type:application/octet-stream");     header("Accept-Ranges:bytes");     header("Accept-Length:".$file_Size);     header("Content-Disposition: attachment; filename=".$filename);     $buffer=1024;     $buffer_count=0;         while(!feof($fp)&&$file_Size-$buffer_count>0){       $data=fread($fp,$buffer);        $buffer_count+=$buffer;       echo $data;            }        fclose($fp);              }   downloadFile("桌面截图.png");?>


 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
PHP生成word的三种方式(转)
php 文件下载弹出
为性能而生,PHP Excel 扩展 xlswriter 1.3.3 发布!
PHP读写文件高并发处理操作实例详解
PHP中ZipArchive压缩文件并下载打包好的文件介绍
PHP文件下载代码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服