• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP下载大文件失败并限制下载速度的实例代码

    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大文件及断点续传下载实现代码
    • php实现断点续传大文件示例代码
    • PHP超低内存遍历目录文件和读取超大文件的方法
    • 详解PHP多个进程配合redis的有序集合实现大文件去重
    • PHP如何通过表单直接提交大文件详解
    • PHP大文件分片上传的实现方法
    • php下载远程大文件(获取远程文件大小)的实例
    • 详解PHP如何读取大文件
    上一篇:PHP 7.4 新语法之箭头函数实例详解
    下一篇:Laravel推荐使用的十个辅助函数
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

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