PHP文件可限速下载代码

<?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;*/
}
<?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;*/
}
时间: 2024-10-14 05:35:32

PHP文件可限速下载代码的相关文章

php 文件限速下载代码

<?phpinclude("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($

【daily】文件分割限速下载,及合并分割文件

说明 主要功能: 1) 分割文件, 生成下载任务; 2) 定时任务: 检索需要下载的任务, 利用多线程下载并限制下载速度; 3) 定时任务: 检索可合并的文件, 把n个文件合并为完整的文件. GitHub: https://github.com/vergilyn/SpringBootDemo 代码结构: 一.获取远程资源ContentLength.FileName 本来以为很容易, 但如果想较好的得到contentLength.fileName其实很麻烦,主要要看download-url是怎么样

文件上传下载中的安全问题(上传漏洞与目录遍历攻击)

前言 文件上传与下载是项目中经常需要提供的功能,不管是哪个web应用几乎都可以找到.那本屌今天就来说一说我们在开发中的疏忽可能导致的问题. 先建立一个web工程,目录结构如下 文件上传漏洞 我们来看看下面这段文件上传代码,使用的是common-fileupload.jar 和common-io.jar UploadServlet.java 访问路径/UploadServlet /** * 文件上传 */ protected void doPost(HttpServletRequest reque

C#限速下载网络文件

代码: using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Text.

300行python代码的轻量级HTTPServer实现文件上传下载

最近,利用一下空余的时间对以前的Python知识进行了巩固和复习,便闲来无事写了一个轻量级的HTTPServer来实现文件上传下载,不废话,直接上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- __version__ = "0.1" __all__ = ["SimpleHTTPRequestHandler"] __author__ = "kumikoda" __home_page__ = &qu

采用struts2+hibernate实现保存文件到Oracle数据库&amp;&amp;并附下载代码【导入即可用】;数据库中保存blob类型的二进制文件

原文:采用struts2+hibernate实现保存文件到Oracle数据库&&并附下载代码[导入即可用]:数据库中保存blob类型的二进制文件 源代码下载地址:http://www.zuidaima.com/share/1550463402478592.htm

利用Node 搭配uglify-js压缩js文件,批量下载图片到本地

Node的便民技巧-- 压缩代码 下载图片 压缩代码 相信很多前端的同学都会在上线前压缩JS代码,现在的Gulp Webpack Grunt......都能轻松实现.但问题来了,这些都不会,难道就要面对几十个JS文件一遍遍来回“复制-压缩-创建-粘贴”,这样太不人性化了. 于是可以借助Node + uglify-js 轻松实现.(前提你会点node操作) 1.首先看一下目录: |--uglifyJS |--js |--test1.js |--test2.js |--uglify.js   //这

python之模块ftplib(实现ftp上传下载代码)

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块ftplib(实现ftp上传下载代码) #需求:实现ftp上传下载代码(不含错误处理) from ftplib import FTP def ftpconnect(): ftp_server='ftp.python.org' ftp=FTP() ftp.set_debuglevel(2)#打开调式级别2 ftp.connect(ftp_server,21) ftp.login('',''

文件上传下载

1.文件上传 文件上传下载本质是通过Socket的字节流来传输数据的.所以,对于文件上传,我们可以从HttpRequest对象获取输入流,进而获取上传文件的内容.但是采用ServletAPI并不能获取获取对应文件的字节流,而是获取整个Socket的字节流,里面包括提交的参数.上传文件内容以及其他附加信息. Servlet API上传文件,代码如下 protected void doPost(HttpServletRequest request, HttpServletResponse respo