博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php 文件限速下载代码
阅读量:5887 次
发布时间:2019-06-19

本文共 1607 字,大约阅读时间需要 5 分钟。

<?php

include("DBDA.class.php");
$db = new DBDA();
$bs = $_SERVER["QUERY_STRING"];  //获取由提交界面传过来的参数
$bss = substr($bs,3);  //截取 = 后面的值
$sql = "select video from shangpin where id='{$bss}'";  //获取视频文件路径
$str = $db->StrQuery($sql);
$wjm = substr($str,13);  //截取文件名
$lj = substr($str,0,13);  //截取文件所在文件夹路径

 

$file_name = $wjm;   //文件名

//用以解决中文不能显示出来的问题  
$file_name=iconv("utf-8","gb2312",$file_name);  
$file_sub_path=$_SERVER['DOCUMENT_ROOT'].$lj;   //获取当前运行脚本所在的文档根目录
$file_path=$file_sub_path.$file_name;   //拼成一个完整的文件所在的路径
// $file = include path
if(file_exists($file_path))  //判断文件是否存在
{
    header('Content-Description: File Transfer');       //header函数是提交给表头的是一些下载的规格
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file_path));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file_path));
    ob_clean();   //ob_clean这个函数的作用就是用来丢弃输出缓冲区中的内容,如果你的网站有许多生成的文件,那么想要访问正确,就要经常清除缓冲区
    flush();   //ob_flush()和flush()的区别。前者是把数据从PHP的缓冲中释放出来,后者是把不在缓冲中的或者说是被释放出来的数据发送到浏览器。所以当缓冲存在的时候,我们必须ob_flush()和flush()同时使用。
    
    $file = fopen($file_path, "r");  //打开指定的文件,r 代表只读,如果找不到,返回false
    while(!feof($file))  //判断是否存在
    {
        // send the current file part to the browser
        print fread($file, round(3000 * 1024));  //先顶下载速度为3MB
        // flush the content to the browser
        flush();  //传给浏览器
        // sleep one second
        sleep(1);  //等待1秒
    }
    fclose($file);  //关闭文件
    
    /*readfile($file_path);  //也可以用这种方法,发送完表头直接输出,不过没有限速
    exit;*/
}

转载于:https://www.cnblogs.com/bilibiliganbei/p/6091249.html

你可能感兴趣的文章
SQL语句的一些基础
查看>>
Eclispe Java代码注释模板
查看>>
设置 SSH 通过密钥登录
查看>>
leadtools
查看>>
仿百度搜索框自动完成提示功能
查看>>
PHP的学习--Traits新特性
查看>>
GnuPG如何安全地分发私钥(5)分发我的私钥(+签名)
查看>>
高性能golang后端处理网络模块包
查看>>
android面试题
查看>>
test
查看>>
郭宇:Airpub - 纯前端博客引擎实践
查看>>
Progress Image View
查看>>
GHGLUtils
查看>>
开源 免费 java CMS - FreeCMS1.5-数据对象-job
查看>>
开源 java CMS - FreeCMS2.3字典管理
查看>>
开源 java CMS - FreeCMS2.4 模板管理
查看>>
理解HTTP session原理及应用
查看>>
JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
查看>>
maven环境快速搭建
查看>>
什么是单链表插入排序?
查看>>