PHP文件下载文件损坏的问题

PHP文件下载文件损坏的问题,第1张

经过简单测试,下载大文件(>50M)时会出现,断节问题,还有对中文名字的文件支持不好,甚至返回404,下载的文件打不开也许是因为没有判断是否读取完,因为 fread不一定能一次性将一个文件读入内存,这样服务器有压力,服务器为了稳定可能对该内存区进行了优化,下面贴上我修改的代码,写的不好望指正,共同进步:

function download($file_url,$new_name=''){

                $file_url=iconv('utf-8','gb2312',$file_url) 

                //将编码转为支持中英文的gb2312编码

if(!isset($file_url)||trim($file_url)==''){

return '500'

}

if(!file_exists($file_url)){ //检查文件是否存在

return '404'

}

$file_name=basename($file_url)

$file_type=explode('.',$file_url)

$file_type=$file_type[count($file_type)-1]

                $file_name=trim($new_name=='')?$file_name:urlencode($new_name).'.'.$file_type

//输入文件标签

header("Content-type: application/octet-stream")

header("Accept-Ranges: bytes")

header("Accept-Length: ".filesize($file_url))

header("Content-Disposition: attachment filename=".$file_name)

$file_type=fopen($file_url,'r') //打开文件

//输出文件内容

$file_size=filesize($file_url)//获取文件大小

 $buffer=1024   //定义1KB的缓存空间

                 $file_count=0  //计数器,计算发送了多少数据

                 while(!feof($file_type) && ($file_size>$file_count)){ 

                 //如果文件还没读到结尾,且还有数据没有发送 

                 $senddata=fread($file_type,$buffer)

                 //读取文件内容到缓存区

                 $file_count+=$senddata

                  echo $senddata

                  }

//echo fread($file_type,filesize($file_url))

fclose($file_type)

}

//最主要的原因找到了,保存PHP源码时要用UTF-8 无ROM格式编码保存,否则每个文件头部都会有  EF  BB  这两个字节

这个解压出错的可能性有很多,最大的可能性是你下载文件时损坏了,这样损坏的文件肯定是解压不了的哦。

具体来说说吧

第一种可能:下载文件不全或下载时出错造成的,这样无法解压,可以重新再下载一次,最常见的。

第二种可能:别人上传的时候就出现了错误,你下载到本地自然会出错,这样的只能再找源文件了。

第三种可能:你的解压软件出现了问题,可以重新换一个解压软件再进行解压。

第四种可能:电脑系统出现问题了,把文件复制到其它电脑上,然后再解压。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12058326.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存