回复讨论(解决方案) 将echo $file_size;去掉
貌似不行,我这句是把这句话后面的注销掉后,为了看字节数才后来加的,发帖子的时候忘记去掉了
错误原因:
你用文本方式打开了二进制文件
这个问题图片处理经常遇到 要用
$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);