Home > Article > Backend Development > How to use php to download large files
The content of this article is about how to use php to download large files. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
The key to downloading large files is to read the byte stream in a loop
function downloadFile($filename) { //获取文件的扩展名 $allowDownExt = array ( 'rar', 'zip', 'png', 'txt', 'mp4', 'html'); //获取文件信息 $fileExt = pathinfo($filename); //检测文件类型是否允许下载 if(!in_array($fileExt['extension'], $allowDownExt)) { return false; } //设置脚本的最大执行时间,设置为0则无时间限制 set_time_limit(0); ini_set('max_execution_time', '0'); //通过header()发送头信息 //因为不知道文件是什么类型的,告诉浏览器输出的是字节流 header('content-type:application/octet-stream'); //告诉浏览器返回的文件大小类型是字节 header('Accept-Ranges:bytes'); //获得文件大小 //$filesize = filesize($filename);//(此方法无法获取到远程文件大小) $header_array = get_headers($filename, true); $filesize = $header_array['Content-Length']; //告诉浏览器返回的文件大小 header('Accept-Length:'.$filesize); //告诉浏览器文件作为附件处理并且设定最终下载完成的文件名称 header('content-disposition:attachment;filename='.basename($filename)); //针对大文件,规定每次读取文件的字节数为4096字节,直接输出数据 $read_buffer = 4096; $handle = fopen($filename, 'rb'); //总的缓冲的字节数 $sum_buffer = 0; //只要没到文件尾,就一直读取 while(!feof($handle) && $sum_buffer<$filesize) { echo fread($handle,$read_buffer); $sum_buffer += $read_buffer; } //关闭句柄 fclose($handle); exit; }
The above is the detailed content of How to use php to download large files. For more information, please follow other related articles on the PHP Chinese website!