项目中有个700m左右的大文件,需要下载到本地电脑上,在网上找了段代码,如下:
1 <?php 2 $realname = "xxx.pdf"; 3 $filename = "xxx.pdf"; 4 t_time_limit(0); 5 $filesize = filesize($realname); 6 header('content-description: file transfer'); 7 header('content-type: application/octet-stre牛毛细雨am'); 8 header('content-transfer-encoding: binary'); 9 header('accept-ranges: bytes');10 header('expires: 0');11 header('cache-control: must-revalidate');12 header('pragma: public');13 header('content-length: ' . $filesize);14 header('content-disposition: at诚实守信的名人名言tachment; filename=' . $filename);15 16 // 打开文件17 $fp = fopen($realname, 'rb');18 // 设置指针位置19 fek($fp, 0);20 21 // 开启缓冲区22 ob_start();23 // 分段读取文件24 while (!feof($fp)) {25 电子科技大学录取分数线 $chunk_size = 1024 * 8; // 8kb26 echo fread($fp, $chunk_size);27 ob_flush(); // 刷新php缓冲区到web服务器28 flush(); // 刷新web服务器缓冲区特朗斯特罗姆到浏览器29 sleep(1); // 每1秒 下载 8 kb30 }31 // 关闭缓冲区32 ob_end_clean();33 34 fclo($fp);
完美下载!但是当部署到线上时,出现了问题:
说明:测试环境为http,线上环境为https
继续google….,找到如下代码:
<?php $realname = "xxx.pdf"; $filename = "xxx.pdf"; t_time_limit(0); $filesize = filesize($realname); header('content-description: file transfer'); header('content-type: application/octet-stream'); header('content-transfer-encoding: binary'); header(姐妹群名称大全'accept-ranges: bytes'); header('expires: 0'); header('cache-control: must-revalidate, post-check=0, pre-check=0'); header('pragma: public'); header('content-length: ' . $filesize); header('content-disposition: attachment; filename=' . $filename); // 打开文件 $fp = fopen($realname, 'rb'); ob_clean(); ob_end_flush(); while (!feof($fp)) { echo fread($fp, $filesize); ob_flush(); // 刷新php缓冲区到web服务器 flush(); // 刷新web服务器缓冲区到浏览器 } fclo($fp); exit;
完美解决!
本文发布于:2023-04-06 18:51:15,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/8d53c11c0af24731629fc4b2746e4b02.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP下载大文件.doc
本文 PDF 下载地址:PHP下载大文件.pdf
留言与评论(共有 0 条评论) |