前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php实现文件下载

php实现文件下载

作者头像
kl博主
发布2023-11-17 19:10:59
2180
发布2023-11-17 19:10:59
举报
文章被收录于专栏:kl的专栏

近期搞了一个安卓的客户端,想把它挂到站点上提供下载,整理实现思路如下:

(1).浏览器发送一个请求,请求访问服务器中的某个网页(如:down.php)

      (2).运行该文件的时候,必然要把将要被下载的文件读入内存当中,通过fopen()函数完成该动作 

      (3).从内存当中读取文件,通过fread()函数完成该动作 

(4).把读到的内容输出到客户端

需要注意的是,如果文件较大,文件应该是被分成多段返回给客户端的,并不是等文件在服务端全部读取完毕后,一次性返回给客户端,因为这样子会增加服务器的负荷。 所以我们需要在php代码中设置一次读取的字节数,比如我在下面的代码中通过$buffer=1024设置一次读取的字节数,每读取一次,就输出数据(即返回给浏览器)  

具体实现如下,我把代码贴出来,代码都做了详细的注释,保证能看明白

代码语言:javascript
复制
public function index()
    {
        $file_name="Kl博客.apk"; 
        //用以解决中文不能显示出来的问题 
        $file_name=iconv("utf-8","gb2312",$file_name); 
        $file_sub_path=$_SERVER['DOCUMENT_ROOT']./admin.php?s=."/Uploads/DownFile/"; 
        $file_path=$file_sub_path.$file_name; //完整的文件路径
        //首先要判断给定的文件存在与否 
        if(!file_exists($file_path)){ 
          echo "来晚了,文件不存在"; 
        } 
         else 
         {
            $fp=fopen($file_path,"r"); //以只读的方式打开文件
            $file_size=filesize($file_path);//得到文件大小
            //下载文件需要用到的头 
            Header("Content-type: application/octet-stream"); //告诉浏览器这是一个文件流格式的文件
            Header("Accept-Ranges: bytes"); //告诉客户端浏览器返回的文件大小是按照字节进行计算的
            Header("Content-length:".$file_size); //告诉浏览器返回的文件大小 
            Header("Content-Disposition: attachment; filename=".$file_name); //告诉浏览器文件的名称
            $buffer=1024; //设置缓冲区大小
            $file_count=0; //读取到的文件大小变量
            //向浏览器返回数据 
            while(!feof($fp) && $file_count<$file_size){ 
            $file_con=fread($fp,$buffer); //读到一个缓冲区文件的大小
            $file_count+=$buffer; //累积读到的文件大小
            echo $file_con; //直接向浏览器输出
            } 
            //echo fread($fp, $file_size);//小文件可以直接一次性读完
            fclose($fp); //可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区
         }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档