PHP实例:使用SWFUpload实现PHP上传进度条

2018-03-24编程教程
215

文件上传是WEB应用必备功能,尤其是在处理大文件上传的时候,十分需要上传时候实时显示上传进度。PHP实现上传进度条比较麻烦,一种是PHP创始人写的那个APC扩展,另外一种则需要使用PECL扩展模块uploadprogress实现。但是他们各有不足:
 
1、他们都需要额外安装(我们并没有打算把APC加入PHP5.2.6中);
 
2、它们都使用本地机制来存储这些信息, APC使用共享内存, 而uploadprogress使用文件系统(不考虑NFS), 这在多台前端机的时候会造成麻烦。
 
鉴于此,本文介绍一个最方便,也最简单的实现上传进度条的方法:使用swfload实现PHP上传进度条。可以实现多文件一起上传哦。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" >  
<head>  
<title>SWFUpload上传例子- SWFObject上传例子</title>  
<link href="../css/default.css" rel="stylesheet" type="text/css" />  
<script type="text/javascript" src="../swfupload/swfupload.js"></script>  
<script type="text/javascript" src="js/swfupload.swfobject.js"></script>  
<script type="text/javascript" src="js/swfupload.queue.js"></script>  
<script type="text/javascript" src="js/fileprogress.js"></script>  
<script type="text/javascript" src="js/handlers.js"></script>  
<script type="text/javascript">  
var swfu;   
  
SWFUpload.onload = function () {   
    var settings = {   
        flash_url : "../swfupload/swfupload.swf",   
        upload_url: "upload.php",   
        post_params: {   
            "PHPSESSID" : "NONE",   
            "HELLO-WORLD" : "Here I Am",   
            ".what" : "OKAY"   
        },   
        file_size_limit : "100 MB",//文件大小限制   
        //file_types : "*.jpg;*.gif;*.png;*.jpeg;*.flv;*.mp4;*.avi;*wmv",   
        file_types : "*.*",   
        file_types_description : "All Files",//文件类型   
        file_upload_limit : 100,   
        file_queue_limit : 0,   
        custom_settings : {   
            progressTarget : "fsUploadProgress",   
            cancelButtonId : "btnCancel"   
        },   
        debug: false,   
  
        // Button Settings   
        //button_image_url : "XPButtonUploadText_61x22.png",   
        button_image_url: "TestImageNoText_65x29.png",//按钮图片   
        button_placeholder_id : "spanButtonPlaceholder",//按钮id   
        button_text: '<span class="theFont">浏览</span>',//按钮文字   
        button_text_style: ".theFont { font-size: 16; }",//按钮文字字号   
        button_text_left_padding: 12,//按钮左边距   
        button_text_top_padding: 3,//按钮上边距   
        button_width: "65",//按钮宽   
        button_height: "29",//按钮高   
        //button_width: 61,   
        //button_height: 22,   
  
        // The event handler functions are defined in handlers.js   
        swfupload_loaded_handler : swfUploadLoaded,   
        file_queued_handler : fileQueued,   
        file_queue_error_handler : fileQueueError,   
        file_dialog_complete_handler : fileDialogComplete,   
        upload_start_handler : uploadStart,   
        upload_progress_handler : uploadProgress,   
        upload_error_handler : uploadError,   
        upload_success_handler : uploadSuccess,   
        upload_complete_handler : uploadComplete,   
        queue_complete_handler : queueComplete, // Queue plugin event   
           
        // SWFObject settings   
        minimum_flash_version : "9.0.28",   
        swfupload_pre_load_handler : swfUploadPreLoad,   
        swfupload_load_failed_handler : swfUploadLoadFailed   
    };   
  
    swfu = new SWFUpload(settings);   
}   
  
</script>  
</head>  
<body>  
<div id="content">  
  
    <h2>SWFObject上传例子</h2>  
    <form id="form1" action="index.php" method="post" enctype="multipart/form-data">  
        <p>点击“浏览”按钮,选择您要上传的文档文件后,系统将自动上传并在完成后提示您。</p>  
            <div id="divSWFUploadUI">  
            <div class="fieldset  flash" id="fsUploadProgress"><span class="legend">快速上传</span></div>  
            <p id="divStatus">0 个文件已上传</p>  
            <p>  
                <span id="spanButtonPlaceholder"></span>  
                <input id="btnCancel" type="button" value="取消所有上传" disabled="disabled" style="margin-left: 2px; height: 29px; font-size: 8pt;" />  
                <br />  
            </p>  
        </div>  
        <noscript>  
            <div style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px;">  
                对不起,您的浏览器不支持javascript。   
            </div>  
        </noscript>  
        <div id="divLoadingContent" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">  
            SWFUpload上传组件正在载入,请稍后   
        </div>  
        <div id="divLongLoading" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">  
            SWFUpload上传组件载入超时。  请确保Flash插件安装正确,并且版本支持本上传组件。   
        </div>  
        <div id="divAlternateContent" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">  
            SWFUpload不能载入.  请安装或升级Flash Player.   
            点击这里 <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Adobe website</a> 获得Flash Player.   
        </div>  
    </form>  
</div>  
</body>  
</html>  

upload.php部分:

if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) {   
    $upload_file = $_FILES['Filedata'];   
    $file_info   = pathinfo($upload_file['name']);   
    $file_type   = $file_info['extension'];   
    $save        = 'upload/' . md5(uniqid($_FILES["Filedata"]['name'])) . '.' . $file_info['extension'];   
    $name        = $_FILES['Filedata']['tmp_name'];   
       
    if (!move_uploaded_file($name, $save)) {   
        exit;   
    }   
       
    //将数组的输出存起来以供查看   
    $fileName = 'test.txt';   
    $postData = var_export($file_info, true);   
    $file     = fopen('' . $fileName, "w");   
    fwrite($file,$postData);   
    fclose($file);   
}  


demo实例下载:点击我
The End

相关推荐

layui根据百度地图经纬度在弹出层中显示位置
首先你需要引入百度地图的js script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0ak=你的ak"/script ak ,注意是要浏览器端的ak,这个直接到百度开发者平台申请。 引入layui,这个大家可以到layui官网看看怎么引入layer, 注意:这里要提...
2025-01-09 编程教程
240

百度UEditor编辑器如何禁止过滤div等网页html标签
将设计排版好的页面html代码上传到数据库,再读取出来的时候发现所有的div都被替换成了p标签。 解决方法: 首先在ueditor.all.js文件内搜索allowDivTransToP,找到如下的代码,将true设置为false me.setOpt({ 'allowDivTransToP':false, 'disabledTableInTable'...
2022-11-23 编程教程
495

Ajax中文传值出现乱码的解决办法
Ajax技术的核心为Javascript,而javascript使用的是UTF-8编码,因此在页面采用GBK或者其他编码,同时没有进行编码转换时,就会出现中文乱码的问题。 以下是分别使用GET和POST方式传值,并且页面采用GBK和UTF-8编码在IE和FF下的不同测试结果和出现乱码时的解...
2022-11-19 编程教程
364

layui Table 设置title 字体加粗
在layui.css中加样式 : .layui-table th{font-weight: bold;} ,或者直接加在网页中即可。 style .layui-table th{ font-weight: bold;} /stylebodytable id="demo" lay-filter="demo" class="layui-hide"/table/body...
2022-10-17 编程教程
200

PHP错误Warning: Cannot modify header information - headers alr
今天在用php进行图片保存输出时候,图片一直显示错误,后面用调试模式下提示:Warning: Cannot modify header information - headers already sent by... 看了一些网上的方法也没解决,最后在php.ini配置output_buffering默认为4096就没有遇到这个错误了: o...
2022-05-18 编程教程
69

Parse error: syntax error, unexpected '&'解决办法
在使用PHP5.4及以上版本时,在调用函数时,使用引用符号时,会出现Parse error: syntax error, unexpected 或PHP Fatal error: Call-time pass-by-reference has been removed者,这是由于在函数调用时通过引用传递参数已被弃用,因为它影响了代码的整洁,如...
2022-05-11 编程教程
295