2024年10月php下载大文件堵塞(PHP文件下载文件损坏的问题)

 更新时间:2024-10-12

  ⑴php下载大文件堵塞(PHP文件下载文件损坏的问题

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

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

  ⑷function?download($file_url,$new_name=’’){????????????????$file_url=iconv(’utf-’,’gb’,$file_url);?????????????????//将编码转为支持中英文的gb编码if(!isset($file_url)||trim($file_url)==’’){return?’’;}if(!file_exists($file_url)){?//检查文件是否存在return?’’;}$file_name=basename($file_url);$file_type=explode(’.’,$file_url);$file_type=$file_type;????????????????$file_name=trim($new_name==’’)?$file_name:urlencode($new_name).’.’.$file_type;//输入文件标签header(“Content-type:?application/octet-stream“);header(“Aept-Ranges:?bytes“);header(“Aept-Length:?“.filesize($file_url));header(“Content-Disposition:?attachment;?filename=“.$file_name);$file_type=fopen($file_url,’r’);?//打开文件//输出文件内容$file_size=filesize($file_url);//获取文件大小?$buffer=;???//定义KB的缓存空间?????????????????$file_count=;??//计数器,计算发送了多少数据?????????????????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-无ROM格式编码保存,否则每个文件头部都会有?EF?BB?这两个字节

  ⑹用PHP怎么读取大文件才不会导致服务器宕机

  ⑺读本地大文件用fseek+FOPEN,这是最快的组合。FSEEK可以进一步封装成函数。

  ⑻php下载函数,在ie上不能下载大于G的文件,当文件大于G的时候,下载下的压缩文件是KB的,求大神指点

  ⑼/***发送文件**author:legend()*link:header(“HTTP/.NotFound“);returnfalse;}$fileStat=stat($fileName);$lastModified=$fileStat;$md=md($fileStat);$etag=’“’.$md.’-’.crc($md).’“’;header(’Last-Modified:’.gmdate(“D,dMYH:i:s“,$lastModified).’GMT’);header(“ETag:$etag“);if(isset($_SERVER)》=$lastModified){header(“HTTP/.NotModified“);returntrue;}if(isset($_SERVER)《$lastModified){header(“HTTP/.NotModified“);returntrue;}if(isset($_SERVER==$etag){header(“HTTP/.NotModified“);returntrue;}if($fancyName==’’){$fancyName=basename($fileName);}if($contentType==’’){$contentType=’application/octet-stream’;}$fileSize=$fileStat;$contentLength=$fileSize;$isPartial=false;if(isset($_SERVER)){if(preg_match(’/^bytes=(d*)-(d*)$/’,$_SERVER,$matches)){$startPos=$matches;$endPos=$matches;if($startPos==’’&&$endPos==’’){returnfalse;}if($startPos==’’){$startPos=$fileSize-$endPos;$endPos=$fileSize-;}elseif($endPos==’’){$endPos=$fileSize-;}$startPos=$startPos《?:$startPos;$endPos=$endPos》$fileSize-?$fileSize-:$endPos;$length=$endPos-$startPos+;if($length《){returnfalse;}$contentLength=$length;$isPartial=true;}}//sendheadersif($isPartial){header(’HTTP/.PartialContent’);header(“Content-Range:bytes$startPos-$endPos/$fileSize“);}else{header(“HTTP/.OK“);$startPos=;$endPos=$contentLength-;}header(’Pragma:cache’);header(’Cache-Control:public,must-revalidate,max-age=’);header(’Aept-Ranges:bytes’);header(’Content-type:’.$contentType);header(’Content-Length:’.$contentLength);if($forceDownload){header(’Content-Disposition:attachment;filename=“’.rawurlencode($fancyName).’“’);}header(“Content-Transfer-Encoding:binary“);$bufferSize=;if($speedLimit!=){$packetTime=floor($bufferSize*/$speedLimit);}$bytesSent=;$fp=fopen($fileName,“rb“);fseek($fp,$startPos);//fpassthru($fp);while($bytesSent《$contentLength&&!feof($fp)&&connection_status()==){if($speedLimit!=){list($usec,$sec)=explode(““,microtime());$outputTimeStart=((float)$usec+(float)$sec);}$readBufferSize=$contentLength-$bytesSent《$bufferSize?$contentLength-$bytesSent:$bufferSize;$buffer=fread($fp,$readBufferSize);echo$buffer;ob_flush();flush();$bytesSent+=$readBufferSize;if($speedLimit!=){list($usec,$sec)=explode(““,microtime());$outputTimeEnd=((float)$usec+(float)$sec);$useTime=((float)$outputTimeEnd-(float)$outputTimeStart)*;$sleepTime=round($packetTime-$useTime);if($sleepTime》){usleep($sleepTime);}}}returntrue;}

  ⑽Thinkphp在下载MB以上的rar压缩文件时,下来后是KB,急求解决!其他文件可以实现

  ⑾你先找找别的方法,最后实在不行的话你就把用户上传的所有文件放在一个文件夹里。用php遍历那个文件夹给他们输到页面上,然后给那些文件加上下载的连接。应该没啥问题。。下载连接:域名./文件夹/要下载的文件.rar

  ⑿使用PHPExcel读取大文件(M左右时,报内存不足

  ⒀这个报错不是PHPExcel报的错,而是php本身报的,原因大概就是因为你读取的文件超过了php单次请求运算占有的内存值的最大值。所以光设置PHPExcel是不行的解决办法有三个:,修改php.ini中memory_limit的值,重启apache服务,在你读取文件的页面头部加入ini_set(”memory_limit”,”M”);(-为不限,修改.htaess文档,在文档中加上一句:php_valuememory_limitM(或更大)

  ⒁php批量大文件上传下载如何实现

  ⒂首先还是查看环境是否支持超大容量上传的支持,M以上的文件通常为视频文件;.即然他要上传M以上的文件,估计服务器性能必定非同凡想,所以暂可不考虑服务器硬件配置问题,但一定要考虑到网速问题,建议M以上出入速率,如少于这个数,你可以放弃这个方案了;.前面硬件都过关了,但程序也要加强了,一下上传M是哪种语言都不能实现的,唯一解决方案,文件切割,如迅雷下载原理一样(采用续点上传,分成若干小块,然后全部上传完毕以后,再进行文件合成。.至于PHP的文件切割,切割后上传,以及文件合并,此类代码网上有许多,楼主可查询并选择适合你的代码,实现你的功能!

  ⒃php里fopen读大文件太慢,怎么解决

  ⒄fopen本来就是socket啊你读取的时候不要一次性全部读完啊while($content=read($fd,)){//一次读字节echo$content;}echo就是一边执行一边输出的啊,是不是你开启了缓存?不过话又说回来,一边执行一边输出本来也是效率最低的。

  ⒅php处理大文件文件

  ⒆我前几天有一个面试,面试题就是有这样一道题。先把自己的思路说一下,因为信息量非常的大,所以我采用了分表,分成张表,每个小时一张,虽然凌晨时刻的表可能很少数据,但这样sum字段的问题就容易解决了,我理解的sum字段是一个小时同一个用户在相同的环境的登陆次数。这样理解不知对否,请网友自行甄辨。然后我通过PHP中的fgets函数一行一行的数据取出,入表。实验了几万条数据是没有问题的,但是上亿条数据可能够呛。这一点也请网友注意,我也是新手。只是看到这里没有答案,给大家一个参考。废话不多,看流程:

  ⒇日志文件(aess.log格式:

  ⒈?/alipeng.gif?zoneid=&bannerid=&clentid=&materia//得到表后缀$tbhz=date(’H’,$getmun);$sql=“insert?into?logininfo_{$tbhz}?values(null,’{$narray}’,)“;//echo?$sql;$res=mysql_query($sql);//执行插入if(!$res?||?!mysql_affected_rows()》){die(’写入数据库失败’);}unset($narray);//循环一次将narray销毁,为下一次循环做准备//var_dump(parse_url($line));}}fclose($file);//关闭//因为sum字段还是,下面代码段需要处理sum字段的值//张表循环处理for($i=;$i《;$i++){if($i《){$tbhz=’’.$i;//如果前张表,表后缀应该是-}else{$tbhz=$i;}//该sql语句是把同一个小时内,并且符合条件相等的登陆的总次数和需要的登陆信息查出,为下面修改sum做准备$sql=“SELECT?COUNT(’zoneid’)?AS?sum,zoneid,bannerid,clentid,materialid,redirect,user_agent,utrace?FROM?logininfo_{$tbhz}?GROUP?BY?zoneid,bannerid,clentid,materialid,redirect,user_agent,utrace“;//发送查询sql$res=mysql_query($sql);if($res?&&?mysql_num_rows($res)》){while($row=mysql_fetch_assoc($res)){//修改sum字段,即同一小时内的登陆次数$upsql=“update?logininfo_{$tbhz}?set?sum=’{$row}’“;//发送修改sql,执行修改sum$upres=mysql_query($upsql);if(!$upres){die(’修改登陆sum失败’);}}}}echo?’数据成功入表’;

  ⒉通过php读超过G的文件时,提示Filesizelimitexceeded,怎么办

  ⒊使用命令ulimit-f将限制filesize改大就可以了。

  ⒋你可以看下配置文件。M的下载可能会超出脚本响应时间。看下配置文件中的max_execution_time。尽可能把数值改大一些。以秒为单位的脚本最大执行时间。可能你在下载文件的时候超过了这个限制。

您可能感兴趣的文章:

相关文章