php中文件下载原理源代码展示


/**
 * 封装下载文件函数
 * @param $file_name-----下载文件名
 * @param $file_sub_dir----下载文件的子路径
 */
function fileDown($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;
    echo $file_path;
    //打开下载文件,首先判断文件是否存在
    if(!file_exists($file_path)){
        echo "<script type='application/javascript'>window.alert('文件不存在!')</script>";
        return;
    }
    $fp=fopen($file_path,'r');
    //清空缓冲器才不会导致文件下载成功但是无法正常查看(ps:重点---如果不清除缓存内容则常常会出现显示错误)
    ob_clean();
    //打开文件之后获取文件大小
    $file_size=filesize($file_path);
    //服务器返回到获取数据
    //返回的文件
    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);
}
fileDown("1.bmp","/images/");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值