为了账号安全,请及时绑定邮箱和手机立即绑定

php文件下载的原理

标签:
PHP

<?php

      //对函数的说明

      //参数说明 $file_name 文件名

      //$file_sub_dir: 下载文件的子路径 '"/xxx/xxx/"

      function down_file($file_name,$file_sub_dir){

             //死去活来,演示下载一个图片.

             //如果文件是中文.



             //原因 php文件函数,比较古老,需要对中文转码 gb2312

             $file_name=iconv("utf-8","gb2312",$file_name);

             //绝对路径

             $file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;

             //如果你希望绝对路径


             //1.打开文件

             if(!file_exists($file_path)){

                    echo "文件不存在!";

                    return ;

             }

             $fp=fopen($file_path,"r");


             //获取下载文件的大小

             $file_size=filesize($file_path);

             if($file_size>30){


                    echo "<script language='javascript'>window.alert('过大')</script>";

                    return ;

             }

             //返回的文件

             header("Content-type: application/octet-stream");

             //按照字节大小返回

             header("Accept-Ranges: bytes");

             //返回文件大小

             header("Accept-Length: $file_size");

             //这里客户端的弹出对话框,对应的文件名

             header("Content-Disposition: attachment; filename=".$file_name);

             //向客户端回送数据


             $buffer=1024;

             //为了下载的安全,我们最好做一个文件字节读取计数器

             $file_count=0;

             //这句话用于判断文件是否结束

             while(!feof($fp) && ($file_size-$file_count>0) ){

                    $file_data=fread($fp,$buffer);

                    //统计读了多少个字节

                    $file_count+=$buffer;

                    //把部分数据回送给浏览器;

                    echo $file_data;

             }

             //关闭文件

             fclose($fp);

      }

      //测试函数是否可用

      down_file("吕虎林.jpg","/http/down/");

?>



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消