zoukankan      html  css  js  c++  java
  • php 大文件上传的实现

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc
    APC实现方法:

    • 安装APC,参照官方文档安装,可以使用PECL模块安装方法快速简捷,这里不说明

    • 配置php.ini,设置参数 apc.rfc1867=1 ,使APC支持上传进度条功能,在APC源码说明文档里面有说明

    • 代码范例:

    [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
    {
    //其他代码,比如上传表单等
    }[/php]


    2.使用PECL扩展模块uploadprogress实现(http://pecl.php.net/package/uploadprogress
    uploadprogress 模块实现方法:

    • 使用PECL模块安装方法安装该模块

    • php.ini里面设置 uploadprogress.file.filename_template = “/tmp/upd_%s.txt”

    • 代码范例:


    [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

    {

    //显示上传表单

    }

    [/php]

    3.up6
    可以参考这篇文章:http://blog.ncmem.com/wordpress/2019/08/12/php-%e5%a4%a7%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e7%9a%84%e5%ae%9e%e7%8e%b0/

    理论上可以上传无限大的文件实时显示上传状态、进度支持多文件上传以及与表单混合上传方便的用户调用接口上传进度提供两种显示模式:新窗口或者内嵌式(0.3)多语言支持(0.21)兼容各种浏览器(经过测试的浏览器:IE5.0、IE6.0、Mozilla、Firefox、Opera)支持Mac、Linux。


  • 相关阅读:
    进程空间与系统空间(一)
    内核之最
    Linux 内核3.10.5 专场
    device_create与device_register
    重写与重载的含义
    抽象类和接口的区别
    Spring知识点
    mybatis学习
    知识点
    Mybatis面试题
  • 原文地址:https://www.cnblogs.com/xproer/p/11345511.html
Copyright © 2011-2022 走看看