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

 更新时间:2023年10月27日 11:11:26   作者:小松聊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);
}

到此这篇关于封装一个PHP可控限速下载文件的方法的文章就介绍到这了,更多相关封装PHP可控限速下载文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MAC下通过改apache配置文件切换php多版本的方法

    MAC下通过改apache配置文件切换php多版本的方法

    网上关于php版本切换的文章有很多,但测试发现有很多都不行,所以不如自己想办法实现了,所以下面这篇文章主要给大家介绍了在MAC系统下通过改apache配置文件的方法来使php多版本切换的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-04-04
  • PHP Session条件竞争超详细讲解

    PHP Session条件竞争超详细讲解

    这篇文章主要介绍了PHP Session条件竞争,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • 实测在class的function中include的文件中非php的global全局环境

    实测在class的function中include的文件中非php的global全局环境

    正如标题所言经测试的结果为:在class中include后,被include文件变量域已经变成func中了,非全局.但是可以通过global提升,感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-07-07
  • PHP中字符串长度的截取用法示例

    PHP中字符串长度的截取用法示例

    这篇文章主要介绍了PHP中字符串长度的截取用法,结合实例形式分析了mb_substr函数截取中文字符串的相关操作技巧与注意事项,需要的朋友可以参考下
    2017-01-01
  • php创建、获取cookie及基础要点分析

    php创建、获取cookie及基础要点分析

    这篇文章主要介绍了php创建、获取cookie及基础要点,实例分析了php操作cookie的技巧,需要的朋友可以参考下
    2015-01-01
  • 深入探究PHP的多进程编程方法

    深入探究PHP的多进程编程方法

    这篇文章主要介绍了深入探究PHP的多进程编程方法,同时介绍了Windows系统下的多线程尝试,是PHP并发实现方面的重要内容,需要的朋友可以参考下
    2015-08-08
  • Laravel 5.0 发布 新版本特性详解

    Laravel 5.0 发布 新版本特性详解

    这篇文章主要介绍了Laravel 5.0 发布 新版本特性详解,本文讲解了目录结构、Contracts、路由缓存、路由中间、控制器方法注入、认证脚手架等新特性,需要的朋友可以参考下
    2015-02-02
  • phpmyadmin显示utf8_general_ci中文乱码的问题终级篇

    phpmyadmin显示utf8_general_ci中文乱码的问题终级篇

    自己写PHP也有一年多了,然后编码问题却老是没有得到好的解决,自己的情况是这样的,网页显示完全正常,在phpmyadmin数据库显示中文乱码,不管是简体还是繁体,只要是中文都是乱码
    2013-04-04
  • 利用PHP访问带有密码的Redis方法示例

    利用PHP访问带有密码的Redis方法示例

    这篇文章主要介绍了利用PHP如何访问带有密码的Redis,文章开始先介绍了如何设置Redis密码及方法带密码的Redis,方便大家学习和理解,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • PHP设计模式中观察者模式讲解

    PHP设计模式中观察者模式讲解

    本文实例讲述了PHP设计模式之观察者模式定义与用法。分享给大家供大家参考,观察者模式 当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新
    2022-11-11

最新评论