PHP进行图片下载的时候,出现图片损坏,无法打开(实质原因,多输出了一个空白字符ZWNBSP )

解决办法

非常重要, 必须加入下面两行代码,
否则会出现 ZWNBSP (图片下载,显示文件已损坏)

    ob_clean();
    flush();

参考代码:


function my_download($file_dir, $file_name)
{
    $filePath = $file_dir . $file_name;
    //检查文件是否可读
    if (!is_file($filePath)) exit('Can not access file, ' . $filePath);
    if (!is_readable($filePath)) exit('Can not read file, ' . $filePath);

    /**
     * 这里应该加上安全验证之类的代码,例如:检测请求来源、验证UA标识等等
     */

    //以只读方式打开文件,并强制使用二进制模式
    $fileHandle = fopen($filePath, "rb");
    if ($fileHandle === false) {
        exit("Can not open file: $filePath");
    }

    //文件类型是二进制流。设置为utf8编码(支持中文文件名称)

    if (extension_name($file_name) == 'png' or extension_name($file_name) == 'jepg' or extension_name($file_name) == 'jpg'){
        header('Content-type:application/octet-stream;');

    }else{
        header('Content-type:application/octet-stream;charset=' . "utf-8");
    }

    header("Content-Transfer-Encoding: binary");
    header("Accept-Ranges: bytes");
    //文件大小
    header("Content-Length: " . filesize($filePath));
    //触发浏览器文件下载功能
    header('Content-Disposition:attachment;filename="' . urlencode($file_name) . '"');

    // 非常重要, 否则会出现 ZWNBSP (图片下载,显示文件已损坏)
    ob_clean();
    flush();

    //循环读取文件内容,并输出
    while (!feof($fileHandle)) {
        //从文件指针 handle 读取最多 length 个字节(每次输出10k)
        echo fread($fileHandle, 10240);
    }



    //关闭文件流
    fclose($fileHandle);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏2同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值