PHP下载大文件失败并限制下载速度的实例代码


Posted in PHP onMay 10, 2019

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 '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 相关文章推荐
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
Jan 16 PHP
用PHP+MySQL搭建聊天室功能实例代码
Aug 20 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
给ECShop添加最新评论
Jan 07 PHP
PHP中让curl支持sock5的代码实例
Jan 21 PHP
PHP版QQ互联OAuth示例代码分享
Jul 05 PHP
thinkphp关于简单的权限判定方法
Apr 03 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
php7性能提升的原因详解
Oct 13 PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 PHP
PHP实现随机发放扑克牌
Apr 21 PHP
PHP 7.4 新语法之箭头函数实例详解
May 09 #PHP
PHP文件类型检查及fileinfo模块安装使用详解
May 09 #PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
May 09 #PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
May 09 #PHP
PHP CURL中传递cookie的方法步骤
May 09 #PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
May 09 #PHP
Laravel配置全局公共函数的方法步骤
May 09 #PHP
You might like
PHP 采集程序中常用的函数
2009/12/09 PHP
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
php curl_init函数用法
2014/01/31 PHP
详解js异步文件加载器
2016/01/24 PHP
php array_pop 删除数组最后一个元素实例
2016/11/02 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
2018/12/24 PHP
PHP __call()方法实现委托示例
2019/05/20 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
jquery $.ajax入门应用二
2008/11/19 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
Python中的CURL PycURL使用例子
2014/06/01 Python
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
Python探索之ModelForm代码详解
2017/10/26 Python
Python遍历文件夹 处理json文件的方法
2019/01/22 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
Python 私有化操作实例分析
2019/11/21 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
中专生学习生活的自我评价分享
2013/10/27 职场文书
食堂标语大全
2014/06/11 职场文书
2014年绿化工作总结
2014/12/09 职场文书
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技