php下载效率不高,解决PHP下载大文件失败,并限制下载速度
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下载大文件失败,并限制下载速度相关推荐
- sky下载 star_star sky五军之战高清无损下载 star sky 高清mv下载
star sky五军之战高清无损下载 star sky 高清mv下载由软吧下载编辑精心整理,是由Two Steps From Hell(地狱咫尺)工作组制作,歌曲发布于该工作组2015年4月28日发行 ...
- php 7.0 readfile_php readfile下载大文件失败的解决方法
本文实例讲述了php readfile下载大文件失败的解决方法.分享给大家供大家参考,具体如下: 大文件有200多M,只下载了200K就提示下载完成,且不报错. 原因是PHP内存有限制,需要改为按块下 ...
- linux rm 不释放_Linux解决rm 删除大文件后 磁盘空间无法释放的问题
Linux解决rm 删除大文件后 磁盘空间无法释放的问题 在Linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会 ...
- VMware 解决 ubuntu 虚拟机 复制文件 失败 闪退
VMware 解决 ubuntu 虚拟机 复制文件 失败 闪退 问题 解决办法一 解决方法二 解决办法三(共享文件夹) 问题 在尝试将主机文件复制粘贴入虚拟机的文件夹中,会出现文件夹崩溃闪退的情况. ...
- python -m http.server 搭建一个简易web下载服务器(可用于快速发送大文件)
在工作过程中需要经常发送安装包等大文件给同事,亲测共享文件夹拷贝.QQ.微信等聊天工具,大文件传输速度效率不高. 然而局域网内使用python搭建的简易下载服务器速度比较快,百兆网卡下载速度随便达到1 ...
- linux下载大文件失败,Linux下FTP/SFTP传输大文件总是失败的处理办法
海外服务器,一般延迟都比较高.如果不是China Telecom/China Unicom路由直连,延迟更加的不稳定,甚至长连接会经常闪断.国内跨运营商服务器,没有BGP网关,也同样会发生这样的情况, ...
- Nginx下载大文件失败
原因分析: nginx代理nginx时,前端用户请求下载文件, nginx代理会先从后端nginx拿到文件并缓存到本地,然后响应给客户端,其中与proxy buffer相关的配置项如下: proxy_ ...
- php readfile 下载大文件失败
大文件有200多M,只下载了200K就提示下载完成,且不报错. 原因是PHP内存有限制,需要改为按块下载,就是把大文件切块后逐块下载. if (file_exists($file)) {if (FAL ...
- python数据量太大如何解决_Python 如何处理大文件
Python作为一门程序设计语言,在易读.易维护方面有独特优势,越来越多的人使用 Python 进行数据分析和处理,而 Pandas 正是为了解决数据分析任务而创建的,其包含大量能便捷处理数据的函数和 ...
最新文章
- CentOS7.5(64位)安装Anaconda
- 提升命令行效率的Bash快捷键
- NIO:与 Buffer 一起使用 Channel
- 数据挖掘之关联算法Apriori
- 下列关于php说法错误的,PHP试题
- 操作系统实验2—实现动态分区分配模拟程序
- UNIX网络编程——套接字选项(SO_RCVBUF和SO_SNDBUF)
- chmod命令详解使用格式和方法
- python双向索引什么意思_Python 双向链表的实现
- 自己编写DLL文件——注册——VB工程引用——标准EXE调用(含例子)
- C语言实训 --- 仓库管理系统(原代码)
- 如何入门短视频剪辑?先要有五大思维,有想法才能有如神助
- 数据分析之客户价值模型(RFM)技术总结
- Springboot 使用 Guava 的重试Retry ,轻便灵活
- 【Windows】外接USB键盘报“无法找到驱动”——手动指定驱动
- 最优控制理论 八、CasADi求解路径约束轨迹优化的多重打靶法
- html引用资源相对路径,超链接中的绝对路径和相对路径
- StrokeIt:让鼠标手势无处不在
- Python爬虫之正则表达式
- java 修改表格颜色代码_workBook设置单元格颜色方法
热门文章
- 为什么要选择桌面云?
- 玩转Linux命令-合集
- 鸿蒙os 2.0应用商店,鸿蒙版京东App已在华为应用商城上架 包含HarmonyOS服务
- 学计算机专业用微软和华为xpro,顶级Windows笔记本终极对决 究竟谁更胜一筹?
- Java运行时错误 类型,“运行时错误13:类型不匹配”
- python做花瓣飘落的背景_jquery+css3实现网页背景花瓣随机飘落特效
- 三年百度,五年阿里,阿里p8架构师浅谈:我是如何顺利进入BAT
- android 桌球游戏,这款超真实的桌球游戏,不会打也能玩上瘾 - Pool Break #iOS #Android...
- 计算机模拟的实例,案例:数值模拟 - 随机漫步
- 图的深度优先遍历DPS邻接矩阵初始化