PHP 大文件上传进度条实现

  目前我知道的方法有两种,一种是使用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源码说明文档里面有说明
  • 代码范例:
    [coolcode lang=”php”]
    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 {
    //其他代码,比如上传表单等
    }
    [/coolcode]

  uploadprogress 模块实现方法:

  • 使用PECL模块安装方法安装该模块
  • php.ini里面设置 uploadprogress.file.filename_template = “/tmp/upd_%s.txt”
  • 代码范例:
    [coolcode lang=”php”]
    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 {
    //显示上传表单
    }
    [/coolcode]

19 thoughts on “PHP 大文件上传进度条实现”

  1. Love is patient; love is kind; love is not envious pr boastful or arroga nt or rude. It does not insist on its own way; it is not irritable or re sentful; it does not rejoice in wrongdoing, but rejoices in the truth. I t bears all things, hopes all things, endures all things. Love never ends.

  2. I truly love your website.. Excellent colors & theme.

    Did you build this amazing site yourself? Please reply
    back as I’m looking to create my own website and would love to find
    out where you got this from or what the theme is named.
    Kudos!

Leave a Reply

Your email address will not be published. Required fields are marked *

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image