PHP 下载进度条

<?php

    //下载数据
    header(‘Content-Type:text/html;charset=utf-8‘);

?>
<html>
<body>
<table border="1" width="300">
  <tr>
    <td width="100">文件大小</td>
    <td width="200"><div id="filesize">未知长度</div></td>
  </tr>
  <tr>
    <td>已经下载</td>
    <td><div id="downloaded">0</div></td>
  </tr>
  <tr>
    <td>完成进度</td>
    <td><div id="progressbar" style="float:left;width:1px;text-align:center;color:#FFFFFF;background-color:#0066CC"></div>
      <div id="progressText" style=" float:left">0%</div></td>
  </tr>
</table>
<script type="text/JavaScript">
//文件长度
var filesize=0;
function $(obj) {return document.getElementById(obj);}

//设置文件长度
function setFileSize(fsize) {
    filesize=fsize;
    $("filesize").innerHTML=fsize;
}

//设置已经下载的,并计算百分比
function setDownloaded(fsize) {
    $("downloaded").innerHTML=fsize;
    if(filesize>0) {
        var percent=Math.round(fsize*100/filesize);
        $("progressbar").style.width=(percent+"%");
        if(percent>0) {
            $("progressbar").innerHTML=percent+"%";
            $("progressText").innerHTML="";
        } else {
            $("progressText").innerHTML=percent+"%";
        }
    }
}
</script>

<?PHP
ob_start();
@set_time_limit(300);//设置该页面最久执行时间为300秒
$url="http://dl_dir.qq.com/qqfile/qq/QQ2010/QQ2010Beta3.exe";//要下载的文件
$newfname="QQ2010Beta3.exe";//本地存放位置,也可以是E:\Temp\QQ2010Beta3.exe,这样做在Win7下要设置相应权限
$file = fopen ($url, "rb");
if ($file) {
    //获取文件大小
    $filesize = -1;
    $headers = get_headers($url, 1);
    if ((!array_key_exists("Content-Length", $headers))) $filesize=0;
    $filesize = $headers["Content-Length"];

    //不是所有的文件都会先返回大小的,有些动态页面不先返回总大小,这样就无法计算进度了
    if ($filesize != -1) {
        echo "<script>setFileSize($filesize);</script>";//在前台显示文件大小
    }
    $newf = fopen ($newfname, "wb");
    $downlen=0;
    if ($newf) {
        while(!feof($file)) {
            $data=fread($file, 1024 * 8 );//默认获取8K
            $downlen+=strlen($data);//累计已经下载的字节数
            fwrite($newf, $data, 1024 * 8 );
            echo "<script>setDownloaded($downlen);</script>";//在前台显示已经下载文件大小
            ob_flush();
            flush();
        }
    }
    if ($file) {
        fclose($file);
    }
    if ($newf) {
        fclose($newf);
    }
}
?>
</body>
</html>
时间: 2024-12-25 02:27:10

PHP 下载进度条的相关文章

Flex 4.6 下载进度条 IPreLoaderDisplay生命周期

Flex4.6 程序的主类实际上为SystemManager的子类.SystemManager会创建Preloader对象,然后调用PreLoader对象的initialize方法,该方法有如下签名  public function initialize(showDisplay:Boolean,                                 displayClassName:Class,                                backgroundColo

关情纸尾-----Quartz2D绘制下载进度条,饼图

绘制下载进度条 1.搭建界面. 2.拖动滑竿的时候让他里面的能够跟着我的拖动,数字在改变. 数字改变时有一个注意点, 就是要显示%,它是一个特殊的符号,要用两个%%代表一个% 3.拖动滑竿的时候就是在上面画弧. 从最上面,按顺时针画,所以,它的起始角度是-90度.结束角度也是-90度 也是从起始角度开始画, 起始角度-90度, 看你下载进度是多少 假如说你下载进度是100,就是1 * 360度 也就是说这个进度占你360度多少分之一 CGContextRef ctx = UIGraphicsGe

用 CALayer 定制下载进度条控件

// // RPProgressView.h // CALayer定制下载进度条控件 // // Created by RinpeChen on 16/1/2. // Copyright © 2016年 rinpe. All rights reserved. // #import <UIKit/UIKit.h> @interface RPProgressView : UIView @property (nonatomic, assign) CGFloat progressValue; // 进

HTML5 CSS3 诱人的实例 : 网页加载进度条的实现,下载进度条等

今天给大家带来一个比较炫的进度条,进度条在一耗时操作上给用户一个比较好的体验,不会让用户觉得在盲目等待,对于没有进度条的长时间等待,用户会任务死机了,毫不犹豫的关掉应用:一般用于下载任务,删除大量任务,网页加载等:如果有使用html5为手机布局的,也可以用于手机中~ 效果图: 1.html结构: <div id="loadBar01" class="loadBar"> <div> <span class="percent&qu

仿苹果AppStore 下载进度条

以前项目自己写的 ,一个模仿苹果AppStore 下载进度条的winfrom用户控件,GDI绘制.效果如图 1 using System.Drawing; 2 using System.Windows.Forms; 3 using System.ComponentModel; 4 namespace test 5 { 6 public class CircleProgressBar : Control 7 { 8 float _progress = 0F; 9 float _Wpen = 1;

Python HTTP下载文件并显示下载进度条

下面的Python脚本中利用request下载文件并写入到文件系统,利用progressbar模块显示下载进度条. 其中利用request模块下载文件可以直接下载,不需要使用open方法,例如: import urllib import requests.packages.urllib3 requests.packages.urllib3.disable_warnings() url = "https://raw.githubusercontent.com/racaljk/hosts/maste

android异步任务图片下载(进度条提示进度)

一.AsyncTask介绍 Android提供了几种在其他线程中访问UI线程的方法. Activity.runOnUiThread( Runnable ) View.post( Runnable ) View.postDelayed( Runnable, long ) Hanlder 这些类或方法同样会使你的代码很复杂很难理解.然而当你需要实现一些很复杂的操作并需要频繁地更新UI时这会变得更糟糕. 为了解决这个问题,Android 1.5提供了一个工具类:AsyncTask,它使创建需要与用户界

关情纸尾-----Quartz2D绘制圆形下载进度条,饼图

绘制下载进度条 1.搭建界面. 2.拖动滑竿的时候让他里面的能够跟着我的拖动,数字在改变. 数字改变时有一个注意点, 就是要显示%,它是一个特殊的符号,要用两个%%代表一个% 3.拖动滑竿的时候就是在上面画弧. 从最上面,按顺时针画,所以,它的起始角度是-90度.结束角度也是-90度 也是从起始角度开始画, 起始角度-90度, 看你下载进度是多少 假如说你下载进度是100,就是1 * 360度 也就是说这个进度占你360度多少分之一 CGContextRef ctx = UIGraphicsGe

用CALayer实现下载进度条控件

用CALayer实现下载进度条 效果: 源码: // // ViewController.m // ProgressView // // Created by YouXianMing on 14/11/18. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (nonatomic, st

CodePush自定义更新弹框及下载进度条

CodePush 热更新之自定义更新弹框及下载进度 先来几张弹框效果图 非强制更新场景 image 强制更新场景 image 更新包下载进度效果 image 核心代码 这里的热更新Modal框,是封装成一个功能独立的组件来使用的,需不需要更新以及是否为强制更新等逻辑均在组件内实现 image UpdateComp 热更新组件核心代码如下: /** * Created by guangqiang on 2018/3/29. */ import React, {Component} from 're