PHP文件流下载内容

1、flush — 刷新输出缓冲

2、ob_clean — 清空(擦掉)输出缓冲区

此函数用来丢弃输出缓冲区中的内容。

此函数不会销毁输出缓冲区,而像 ob_end_clean() 函数会销毁输出缓冲区。

注:上面2个函数可以解决PHP下载文件内容乱码

代码如下

// 文件名不要用中文
//fname为要下载的文件名
//$fpath为下载文件所在文件夹,默认是downlod
function download($fname,$fpath="download/"){

    //避免中文文件名出现检测不到文件名的情况,进行转码utf-8->gbk
    $filename=iconv('utf-8', 'gb2312', $fname);
    $path=$fpath.$filename;
    if(!file_exists($path)){//检测文件是否存在
        echo "文件不存在!";
        die();
    }

    $fp=fopen($path,'r');//只读方式打开
    $filesize=filesize($path);//文件大小

    //返回的文件(流形式)
    header("Content-type: application/octet-stream");
    //按照字节大小返回
    header("Accept-Ranges: bytes");
    //返回文件大小
    header("Accept-Length: $filesize");
    //这里客户端的弹出对话框,对应的文件名
    header("Content-Disposition: attachment; filename=".$filename);
    //================重点====================
    ob_clean();
    flush();
    //=================重点===================
    //设置分流
    $buffer=1024;
    //来个文件字节计数器
    $count=0;
    while(!feof($fp)&&($filesize-$count>0)){
        $data=fread($fp,$buffer);
        $count+=$data;//计数
        echo $data;//传数据给浏览器端
    }

    fclose($fp);

}

download("CGEX脚本清单.doc")

转载于:https://blog.51cto.com/13708834/2105341

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值