PHP 文件上传进度条的两种实现方法的代码


Posted in PHP onNovember 25, 2007

目前我知道的方法有两种,一种是使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc),另外一种方法是使用PECL扩展模块 uploadprogress实现(http://pecl.php.net/package/uploadprogress)我这里举两个分别实现的例子供参考,更灵活的应用根据自己需要来修改。

APC实现方法:

安装APC,参照官方文档安装,可以使用PECL模块安装方法快速简捷,这里不说明
配置php.ini,设置参数 apc.rfc1867=1 ,使APC支持上传进度条功能,在APC源码说明文档里面有说明
代码范例:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {  //上传请求  
    $status = apc_fetch('upload_' . $_POST['APC_UPLOAD_PROGRESS']);  
    $status['done'] = 1;  
    echo json_encode($status);  //输出给用户端页面里的ajax调用,相关文档请自己寻找  
    exit;  
} elseif (isset($_GET['progress_key'])) {   //读取上传进度  
    $status = apc_fetch('upload_'.$_GET['progress_key']);  
    echo json_encode($status);  
    exit;  
} else {  
    //其他代码,比如上传表单等  
} 

uploadprogress 模块实现方法:

使用PECL模块安装方法安装该模块
php.ini里面设置 uploadprogress.file.filename_template = “/tmp/upd_%s.txt”
代码范例:

if($_SERVER['REQUEST_METHOD']=='POST') {  
    if (is_uploaded_file($_FILES['upfile']['tmp_name'])) {  
        $upload_dir = 'your_path/';  
        $ext        = strrchr($_FILES['video']['name'], '.');  
        $sessid     = $_POST['UPLOAD_IDENTIFIER'] ;  
        $tmpfile    = $upload_dir . $sessid;   
        $sessfile   = $upload_dir . $sessid .$ext;  
        if (move_uploaded_file($_FILES['upfile']['tmp_name'],$tmpfile)) {  
            //上传成功  
        } else {  
            //上传失败  
    } else {  
        //上传错误  } elseif (!empty($_GET['sessid'])) {  
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");  
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  
    header("Cache-Control: no-store, no-cache, must-revalidate");  
    header("Cache-Control: post-check=0, pre-check=0", false);  
    header("Pragma: no-cache");  
    header("Content-Type:text/html;charset=UTF-8");  
    $unique_id = $_GET['sessid'];  
    $uploadvalues = uploadprogress_get_info($unique_id);  
    if (is_array($uploadvalues)) {  
        echo json_encode($uploadvalues);  
    } else {  
        //读取进度失败,另外处理逻辑  
    }  
} else {  
    //显示上传表单  
}
PHP 相关文章推荐
全文搜索和替换
Oct 09 PHP
一个捕获函数输出的函数
Feb 14 PHP
PHP 采集心得技巧
May 15 PHP
PHP与MYSQL中UTF8编码的中文排序实例
Oct 21 PHP
php查看当前Session的ID实例
Mar 16 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
PHP面向对象程序设计实例分析
Jan 26 PHP
php遍历解析xml字符串的方法
May 05 PHP
php多线程并发实现方法
Sep 30 PHP
php观察者模式应用场景实例详解
Feb 03 PHP
php实现连接access数据库并转txt写入的方法
Feb 08 PHP
php获取微信基础接口凭证Access_token
Aug 23 PHP
分页详解 从此分页无忧(PHP+mysql)
Nov 23 #PHP
php Mysql日期和时间函数集合
Nov 16 #PHP
PHP编程中字符串处理的5个技巧小结
Nov 13 #PHP
表单复选框向PHP传输数据的代码
Nov 13 #PHP
实用函数10
Nov 08 #PHP
实用函数9
Nov 08 #PHP
实用函数8
Nov 08 #PHP
You might like
如何在PHP中使用Oracle数据库(1)
2006/10/09 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
ThinkPHP之getField详解
2014/06/20 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
jQuery autocomplete插件修改
2009/04/17 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
python的range和linspace使用详解
2019/11/27 Python
python二维键值数组生成转json的例子
2019/12/06 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
自荐信格式
2013/12/01 职场文书
七年级生物教学反思
2014/01/30 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
论文指导教师评语
2014/04/28 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
团委副书记工作总结
2015/08/14 职场文书
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android