简介1、问题:PHP在使用readfile函数定义下载文件时候,文件不可以过大,否则会下载失败,文件损坏且不报错;2、原因:这个是因为readfile读取文件的时候会把文件放入缓存,导致内存溢出;3、解决:分段下载,并限制下载速度;
1、问题:PHP在使用readfile函数定义下载文件时候,文件不可以过大,否则会下载失败,文件损坏且不报错;
2、原因:这个是因为readfile读取文件的时候会把文件放入缓存,导致内存溢出;
3、解决:分段下载,并限制下载速度;
<?php//设置文件最长执行时间set_time_limit(0);if(isset($_GET['filename'])&&!empty($_GET['filename'])){$file_name=$_GET['filename'];$file=__DIR__.'/assets/'.$file_name;}else{echo'whatareyoursearchingfor?';exit();}if(file_exists($file)&&is_file($file)){$filesize=filesize($file);header('Content-De ion:FileTransfer');header('Content-Type:application/octet-stream');header('Content-Transfer-Encoding:binary');header('Accept-Ranges:bytes');header('Expires:0');header('Cache-Control:must-revalidate');header('Pragma:public');header('Content-Length:'.$filesize);header('Content-Disposition:attachment;filename='.$file_name);//打开文件$fp=fopen($file,'rb');//设置指针位置fseek($fp,0);//开启缓冲区ob_start();//分段读取文件while(!feof($fp)){$chunk_size=1024*1024*2;//2MBechofread($fp,$chunk_size);ob_flush();//刷新PHP缓冲区到Web服务器flush();//刷新Web服务器缓冲区到浏览器sleep(1);//每1秒下载2MB}//关闭缓冲区ob_end_clean();fclose($fp);}else{echo'filenotexistsorhasbeenremoved!';}exit();
总结
以上所述是小编给大家介绍的PHP下载大文件失败并限制下载速度的实例代码,希望对大家有所帮助。
下载链接:网站源码/小程序源码/网站模板下载