zoukankan      html  css  js  c++  java
  • PHP做文件限速下载

    <?php
    include("DBDA.class.php");
    $db = new DBDA();
    $bs = $_SERVER["QUERY_STRING"];  //直接获取由提交界面传过来的参数,注意要用<a>标签、<form>表单或者window.location.href="chuli.php?id="+id+""传值,而不能用ajax传值。
    $bss = substr($bs,3);  //截取 = 后面的值,依据传过来的值进行截取,视具体情况而定。
    
    $sql = "select video from shangpin where id='{$bss}'";  //获取视频文件路径,视具体情况写sql语句。
    $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 
    //var_dump(file_exists($file_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;*/ }

    注意的几点:

    1.传过来的值根据实际情况截取;

    2.文件名和文件路径也根据实际情况截取;

    3.文件路径中不能存在汉字,存在汉字的话判断文件是否存在会一直返回flase;

    4.if里面的代码不需要修改;

    5.$bs = $_SERVER["QUERY_STRING"];可以直接接受传过来的值;

  • 相关阅读:
    SAP MM模块教程(1)— 概述
    CodeSmith Generator
    EasyUI 左侧 tree 右侧 DataGrid模板
    C# 数据库访问公共类
    Easyui datagrid toolbar 模板
    EasyUI combogrid 更新查询参数 queryParams 重新加载
    Jenkins的搭建与使用
    Idea2020激活,全网最新教程(各版本通用),亲测2089!!!
    阿里云盘开启“个人云种子用户报名
    尚硅谷Java互联网大厂面试题第三季,1024干货
  • 原文地址:https://www.cnblogs.com/Strive-count/p/6105177.html
Copyright © 2011-2022 走看看