封装一个PHP可控限速下载文件的方法

这篇具有很好参考价值的文章主要介绍了封装一个PHP可控限速下载文件的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明

  1. 实测下载后的文件与源文件哈希值一致,保证数据传输安全一致。
  2. 如果下载到的文件每次都165KB左右,和源文件大小不符合,需要用IDE打开下载的文件,看看是否报致命错误,提示超过最大内存限制。这个与php.ini中的“memory_limit”参数配置有关,所以方法的$kilobyte参数不要设置过大。
  3. 如果实际下载速率低于代码中配置的速率,需要考虑是云服务器带宽或者其中某个网络链路的问题。
  4. 由于添加了下载响应头的缘故,所以遇到任何文件都会强制下载。

代码

/**
 * @function 自定义文件下载速度
 * @param    $file_path string 文件路径
 * @param    $kilobyte  int    每秒发送多少千字节数据(有波动)
 * @param    $file_name string 文件名,无需后缀,自定义下载的初始文件名
 * @return   void
 * @other    并未判断文件是否存在的逻辑,所以请前置逻辑判断。
 */
function speedLimitedDownload($file_path, $kilobyte = 1024, $file_name = '') {
    $file_info = pathinfo($file_path);
    header('Content-Disposition:attachment; filename="'. ($file_name ? $file_name . '.' . $file_info['extension'] : $file_info['basename']) . '"');
    header('Content-Type:"' . mime_content_type($file_path) . '"');
    header('Content-Length:' . filesize($file_path));

    //使用二进制和只读方式打开文件资源
    $handle = fopen($file_path, 'rb');
    //判断文件指针是否到了文件末尾
    while (! feof($handle)) {
        // 输出数据到客户端
        echo fread($handle, $kilobyte * 1024);
        //刷新缓冲区,使其直接输出到客户端
        flush();
        //此处意思是设置每秒输出多少个字节的数据。
        sleep(1);
    }
    fclose($handle);
}

文章来源地址https://www.toymoban.com/news/detail-711126.html

到了这里,关于封装一个PHP可控限速下载文件的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • excel 下载方法封装

    1.首先需要拿到后端返回的URL下载地址  2.写个下载方法 //  如果不要求加文字名称,可以用 window.open(url)

    2024年02月12日
    浏览(27)
  • 2023新版网盘云存储系统网站PHP源码 支持转存+限速 可稳定运营级

    新运营级限速网盘系统网站源码是一款非常实用的系统,可以帮助您打造一个安全可靠的网盘分享平台。该系统支持用户使用微信扫码登录,上传文件分享链接可自定义,文件可一键保存到我的网盘。此外,该系统还支持微信和支付宝官方接口,易支付接口不强制且可自定义

    2024年02月11日
    浏览(42)
  • BT下载磁力下载工具,这几款,不限速

    想看个电影,迅雷限速,经常还因为某些原因下不了,下载电影,BT下载工具总少不了,今天给大家推荐这几款BT下载磁力链接下载工具。不限速下载,超爽! 一、Motrix Motrix是一款全能的下载工具,支持下载 HTTP、FTP、BT、磁力链、百度网盘等资源。Motrix使用aria2作为内核,下

    2024年02月13日
    浏览(47)
  • PHP大文件切片下载代码

    header(\\\"Content-Type: application/fORCe-download\\\"); 表示强制下载,服务端将一个完整的文件或者包一并输出浏览器,然后浏览器触发下载(用户看到的下载);缺点是文件或者包有多大脚本就占用多大内存; header(\\\"Content-type: application/octet-stream\\\"); 表示未知的应用程序文件,也是会触发浏

    2024年02月16日
    浏览(34)
  • kali php无法执行,直接下载或显示php文件内容

    问题描述: 开启apache或nginx,访问php文件要么直接显示php文件内容,要么直接下载,这都是php文件无法解析的问题,需要nginx+php-fpm解决 1、安装NGINX 查看是否安装,如下图则已安装 #apt-cache policy nginx 未安装则执行安装nginx #apt-get install nginx 补充说明 Nginx 网站目录是 /var/www/h

    2024年02月03日
    浏览(32)
  • PCB封装下载网站推荐及其详细使用方法

    本文汇总了当下比较流行的几个原理图符号,PCB封装与对应的3D模型下载网站,网站均支持多种流行的EDA软件,如AD, Cadence, PADS等。 因为我使用的是Cadence,版本是16.6和17.4,对应的原理图工具是Orcad,PCB工具是Allegro,所以在使用网站时均以Cadence为示例。 当下最流行的三个PC

    2024年02月05日
    浏览(84)
  • minio下载文件速度很慢的原因分析与说明

    最近在做一个项目,需要用到minio来搭建文件系统,先简单说一下我在项目中设置的上传文件流程: 前端将分块文件逐一传给后端,后端再存储到 linux服务器的minio 当中。 所有分块文件存储完毕,后端从 minio 下载所有的分块文件到本地磁盘中。 后端进行合并文件处理,将合

    2024年02月06日
    浏览(37)
  • 如何在PHP中包含一个文件?

    在 PHP 中,你可以使用 include 、 require 、 include_once 或 require_once 来包含外部文件。这些语句允许你在当前脚本中引入其他文件的内容,以便重用代码、模块化项目等。 include 语句: include 语句用于包含文件,如果包含文件出错,脚本会继续执行。 示例: include \\\'filename.php\\\'; r

    2024年02月04日
    浏览(37)
  • .net core使用Html模板转PDF文件并下载的业务类封装

    前言:我这里文件下载的模板选型优先考虑html模板,上手容易,前后端通用,有了模板后就需要有转换了,html转PDF采用第三方包:DinkToPdf(1.0.8),下面是代码核心类:   重点:html转PDF的三方包有很多,我目前采用的是支持跨平台(windows和linux)的包源:DinkToPdf,这里提一嘴

    2024年02月09日
    浏览(84)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包