1.问题:

PHP在使用readfile函数定义下载文件时候,文件不可以过大,否则会下载失败,文件损坏且不报错;

2.原因:

这个是因为readfile读取文件的时候会把文件放入缓存,导致内存溢出;

3.解决:分段下载,并限制下载速度;

//设置文件最长执行时间

set_time_limit(0);

if (isset($_GET['filename']) && !empty($_GET['filename'])) {

$file_name = $_GET['filename'];

$file = __DIR__ . '/assets/' . $file_name;

} else {

echo 'what are your searching for?';

exit();

}

if (file_exists($file) && is_file($file)) {

$filesize = filesize($file);

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');

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; // 2MB

echo fread($fp, $chunk_size);

ob_flush(); // 刷新PHP缓冲区到Web服务器

flush(); // 刷新Web服务器缓冲区到浏览器

sleep(1); // 每1秒 下载 2 MB

}

// 关闭缓冲区

ob_end_clean();

fclose($fp);

} else {

echo 'file not exists or has been removed!';

}

exit();

php下载效率不高,解决PHP下载大文件失败,并限制下载速度相关推荐

  1. sky下载 star_star sky五军之战高清无损下载 star sky 高清mv下载

    star sky五军之战高清无损下载 star sky 高清mv下载由软吧下载编辑精心整理,是由Two Steps From Hell(地狱咫尺)工作组制作,歌曲发布于该工作组2015年4月28日发行 ...

  2. php 7.0 readfile_php readfile下载大文件失败的解决方法

    本文实例讲述了php readfile下载大文件失败的解决方法.分享给大家供大家参考,具体如下: 大文件有200多M,只下载了200K就提示下载完成,且不报错. 原因是PHP内存有限制,需要改为按块下 ...

  3. linux rm 不释放_Linux解决rm 删除大文件后 磁盘空间无法释放的问题

    Linux解决rm 删除大文件后 磁盘空间无法释放的问题 在Linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会 ...

  4. VMware 解决 ubuntu 虚拟机 复制文件 失败 闪退

    VMware 解决 ubuntu 虚拟机 复制文件 失败 闪退 问题 解决办法一 解决方法二 解决办法三(共享文件夹) 问题 在尝试将主机文件复制粘贴入虚拟机的文件夹中,会出现文件夹崩溃闪退的情况. ...

  5. python -m http.server 搭建一个简易web下载服务器(可用于快速发送大文件)

    在工作过程中需要经常发送安装包等大文件给同事,亲测共享文件夹拷贝.QQ.微信等聊天工具,大文件传输速度效率不高. 然而局域网内使用python搭建的简易下载服务器速度比较快,百兆网卡下载速度随便达到1 ...

  6. linux下载大文件失败,Linux下FTP/SFTP传输大文件总是失败的处理办法

    海外服务器,一般延迟都比较高.如果不是China Telecom/China Unicom路由直连,延迟更加的不稳定,甚至长连接会经常闪断.国内跨运营商服务器,没有BGP网关,也同样会发生这样的情况, ...

  7. Nginx下载大文件失败

    原因分析: nginx代理nginx时,前端用户请求下载文件, nginx代理会先从后端nginx拿到文件并缓存到本地,然后响应给客户端,其中与proxy buffer相关的配置项如下: proxy_ ...

  8. php readfile 下载大文件失败

    大文件有200多M,只下载了200K就提示下载完成,且不报错. 原因是PHP内存有限制,需要改为按块下载,就是把大文件切块后逐块下载. if (file_exists($file)) {if (FAL ...

  9. python数据量太大如何解决_Python 如何处理大文件

    Python作为一门程序设计语言,在易读.易维护方面有独特优势,越来越多的人使用 Python 进行数据分析和处理,而 Pandas 正是为了解决数据分析任务而创建的,其包含大量能便捷处理数据的函数和 ...

最新文章

  1. CentOS7.5(64位)安装Anaconda
  2. 提升命令行效率的Bash快捷键
  3. NIO:与 Buffer 一起使用 Channel
  4. 数据挖掘之关联算法Apriori
  5. 下列关于php说法错误的,PHP试题
  6. 操作系统实验2—实现动态分区分配模拟程序
  7. UNIX网络编程——套接字选项(SO_RCVBUF和SO_SNDBUF)
  8. chmod命令详解使用格式和方法
  9. python双向索引什么意思_Python 双向链表的实现
  10. 自己编写DLL文件——注册——VB工程引用——标准EXE调用(含例子)
  11. C语言实训 --- 仓库管理系统(原代码)
  12. 如何入门短视频剪辑?先要有五大思维,有想法才能有如神助
  13. 数据分析之客户价值模型(RFM)技术总结
  14. Springboot 使用 Guava 的重试Retry ,轻便灵活
  15. 【Windows】外接USB键盘报“无法找到驱动”——手动指定驱动
  16. 最优控制理论 八、CasADi求解路径约束轨迹优化的多重打靶法
  17. html引用资源相对路径,超链接中的绝对路径和相对路径
  18. StrokeIt:让鼠标手势无处不在
  19. Python爬虫之正则表达式
  20. java 修改表格颜色代码_workBook设置单元格颜色方法

热门文章

  1. 为什么要选择桌面云?
  2. 玩转Linux命令-合集
  3. 鸿蒙os 2.0应用商店,鸿蒙版京东App已在华为应用商城上架 包含HarmonyOS服务
  4. 学计算机专业用微软和华为xpro,顶级Windows笔记本终极对决 究竟谁更胜一筹?
  5. Java运行时错误 类型,“运行时错误13:类型不匹配”
  6. python做花瓣飘落的背景_jquery+css3实现网页背景花瓣随机飘落特效
  7. 三年百度,五年阿里,阿里p8架构师浅谈:我是如何顺利进入BAT
  8. android 桌球游戏,这款超真实的桌球游戏,不会打也能玩上瘾 - Pool Break #iOS #Android...
  9. 计算机模拟的实例,案例:数值模拟 - 随机漫步
  10. 图的深度优先遍历DPS邻接矩阵初始化