• 技术文章 >后端开发 >php教程

    为啥下载图片总少几个字节

    2016-06-13 12:12:48原创276
    为什么下载图片总少几个字节

    $file_name="Koala.jpg";

    if(!file_exists($file_name)){
    echo "文件不存在";
    return;
    }

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

    $file_size=filesize($file_name);
    echo $file_size;
    header("Content-type: application/octet-stream");
    header("Accept-Ranges: bytes");
    header("Accept-Length: $file_size");
    header("Content-Disposition: attachment; filename=".$file_name);

    $buffer=1024;
    while(!feof($fp)){
    $file_data = fread($fp,$buffer);

    echo $file_data;
    }



    fclose($fp);
    ?>

    ------解决思路----------------------
    错误原因:
    你用文本方式打开了二进制文件

    这个问题图片处理经常遇到 要用

    $file = fopen($file_name,"rb");


    在操作二进制文件时如果没有指定 "b" 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 \r\n 字符的奇怪问题。
    ------解决思路----------------------
    跟我前段时间做的差不多,也是多几个字节,然后下载的图片打开失败
    下面是解决办法,找了很久才搜到的

    //代码之前(或之后)有输出,也可能被写入下载的文件中,所以下载的时候多出几个字节
    //下载文件多出几个字节的解决方法是:使用ob_start();和ob_end_clean();来清除前面的输出;
    ob_end_clean();
    //http 下载需要的响应头
    header("Content-type: application/octet-stream"); //返回的文件
    header("Accept-Ranges: bytes"); //按照字节大小返回
    header("Content-length: $file_size"); //返回文件大小
    header("Content-Disposition: attachment; filename=".$name);//这里客户端的弹出对话框,对应的文件名
    ------解决思路----------------------
    测试可以的,我只注释了 echo $file_size;

    $file_name="maze.png";

    if(!file_exists($file_name)){
    echo "文件不存在";
    return;
    }

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

    $file_size=filesize($file_name);
    //echo $file_size;
    header("Content-type: application/octet-stream");
    header("Accept-Ranges: bytes");
    header("Accept-Length: $file_size");
    header("Content-Disposition: attachment; filename=".$file_name);

    $buffer=1024;
    while(!feof($fp)){
    $file_data = fread($fp,$buffer);

    echo $file_data;
    }



    fclose($fp);
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:nbsp file header name Content
    上一篇:discuz帖子编者后存入数据库 下一篇:discuz关于发帖数据保存效能
    千万级数据并发解决方案

    相关文章推荐

    • 100道常见PHP面试题(附解析),增强你的知识储备!• ThinkPHP控制器里javascript代码不能执行的解决方法_PHP• php 不使用js实现页面跳转_PHP• PHP加密扩展库Mcrypt安装和实例_PHP• 完美解决PHP中的Cannot modify header information 问题_PHP
    1/1

    PHP中文网