集思以广益 發表於 2023-5-23 00:00:00

phpcms模块开发之swfupload的使用介绍

<p>
正式接触phpcms模块开发后.开发了几个功能模块.其中遇到了需要批量上传图片的问题.于是开始挖掘phpcms里面的swfupload的用法.</p>
<p>
在phpcms里面自带的内容类型里面能够直接指定图片组.不过这样的图片组功能并不是我想用的.我需要上传一整个静态的html文件.需要</p>
<p>
能够找到一个方法上传整个文件夹.并且能够保留原来的文件名称.</p>
<p>
<strong>目的总结如下:</strong></p>
<p>
<strong>1,不改变系统的文件和目录结构.</strong></p>
<p>
<strong>2,实现多附件上传功能.</strong></p>
<p>
<strong>3,能够得到上传后的文件夹名称.</strong></p>
<p>
在phpcms中自带了附件上传的功能.我想去用swfupload功能,而这个功能被phpcms的附件上传功能集成进去了.那我要做的就是抽出来并加以修改.</p>
<p>
<strong>第一步,我来研究研究这个是怎么调用的.</strong></p>
<p>
首先,打开firefox浏览器的firebug   打开网络面板.找到phpcm中swfupload呗调出的那个按钮.看看系统是请求的什么连接.</p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code11793">
<br>
?m=attachment&amp;c=attachments&amp;a=swfupload&amp;args=10,,1&amp;module=&amp;catid=&amp;authkey=b756a93dea2e627293e88fa9d62af709&amp;pc_hash=iXFbo1</div>
<p>
<br>
我们捕捉到一串这样的请求.调用了attachment模块的attachements控制器里面的swfupload方法.</p>
<p>
 </p>
<p>
我们去找到这个模块中的这个控制器里面的这个方法.</p>
<p>
在phpcms/modoules/attachemet/attachemts.php里面</p>
<p>
<strong>打开看看,代码如下</strong></p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code3507">
<br>
public function swfupload(){<br>
        $grouplist = getcache('grouplist','member');<br>
        if(isset($_POST['dosubmit'])){<br>
      //if里面的内容我们暂时不看.因为这是上传之后的处理.我们要先找到是如何引入swfupload的.<br>
        } else {<br>
            if($this-&gt;isadmin==0 &amp;&amp; !$grouplist[$this-&gt;groupid]['allowattachment']) showmessage(L('att_no_permission'));<br>
            $args = $_GET['args'];//得到参数<br>
            $authkey = $_GET['authkey'];//得到密匙<br>
            if(upload_key($args) != $authkey) showmessage(L('attachment_parameter_error'));//验证密匙<br>
            extract(getswfinit($_GET['args']));//拆分参数<br>
            $siteid = $this-&gt;get_siteid();//得到网站id<br>
            $site_setting = get_site_setting($siteid);//得到网站设置<br>
            $file_size_limit = sizecount($site_setting['upload_maxsize']*1024);//允许上传大小<br>
            $att_not_used = param::get_cookie('att_json');//得到未处理的文件列表<br>
            if(empty($att_not_used) || !isset($att_not_used)) $tab_status = '';//如果有未处理的设置标签样式为on<br>
            if(!empty($att_not_used)) $div_status = ' hidden';//否则隐藏标签           <br>
            $att = $this-&gt;att_not_used();//获取临时未处理文件列表<br>
            include $this-&gt;admin_tpl('swfupload');//这个地方才是关键.加载了这个模板.<br>
        }<br>
    }</div>
<p>
<br>
前面的我们就先不管了 ,那是处理上传的东西.我从else开始看.首先验证了是否允许附件上传</p>
<p>
 </p>
<p>
然后从$_GET里面得到swfupload的参数args,然后去验证了密匙,密匙通过了去解析args.得到网站的id,得到网站的设置,得到允许上传附件的大小.从cookie里面得到未使用的附件列表.</p>
<p>
设置模板里面的各种显示.最后也是最关键的.它使用了swfupload模板.也就是说我要找到这个模板.看看swfupload是怎么引过来的.</p>
<p>
模板在这里:phpcms/modules/attachment/templates/swfupload.tpl.php</p>
<p>
打开模板文件.模板文件上面引入了一堆文件:</p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code81480">
<br>
&lt;?php $show_header = $show_validator = $show_scroll = 1; include $this-&gt;admin_tpl('header', 'attachment');?&gt;<br>
&lt;link href="&lt;?php echo JS_PATH?&gt;swfupload/swfupload.css" rel="stylesheet" type="text/css" /&gt;<br>
&lt;script language="JavaScript" type="text/javascript" src="&lt;?php echo JS_PATH?&gt;swfupload/swfupload.js"&gt;&lt;/script&gt;<br>
&lt;script language="JavaScript" type="text/javascript" src="&lt;?php echo JS_PATH?&gt;swfupload/fileprogress.js"&gt;&lt;/script&gt;<br>
&lt;script language="JavaScript" type="text/javascript" src="&lt;?php echo JS_PATH?&gt;swfupload/handlers2.js"&gt;&lt;/script&gt;<br>
&lt;script type="text/javascript"&gt;<br>
&lt;?php echo initupload($_GET['module'],$_GET['catid'],$args,$this-&gt;userid,$this-&gt;groupid,$this-&gt;isadmin)?&gt;<br>
&lt;/script&gt;</div>
<p>
<br>
首先是引入了头文件.我大概看里一下.里面有jquery什么的.是必要文件.所以一会我们要用的时候也要引入这个头.</p>
<p>
 </p>
<p>
之后是swfupload的样式文件和必要的JS.这里调用了一个系统函数initupload,这个函数到底是干嘛的.</p>
<p>
千万别小觑这行.整个swfupload的配置都在这里了.</p>
<p>
我们去找找看这个函数.</p>
<p>
在phpcms/modules/attachment/functions/golable.func.php里面找到了它的踪迹.代码如下,这个函数的主要作用就是配置swfupload这个插件.</p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code21001">
<p>
<br>
/* flash上传初始化<br>
     * 初始化swfupload上传中需要的参数<br>
     * @param $module 模块名称<br>
     * @param $catid 栏目id<br>
     * @param $args 传递参数<br>
     * @param $userid 用户id<br>
     * @param $groupid 用户组id<br>
     * @param $isadmin 是否为管理员模式<br>
     */<br>
    function initupload($module, $catid,$args, $userid, $groupid = '8', $isadmin = '0'){<br>
        $grouplist = getcache('grouplist','member');<br>
        if($isadmin==0 &amp;&amp; !$grouplist[$groupid]['allowattachment']) return false;<br>
        extract(getswfinit($args));<br>
        $siteid = param::get_cookie('siteid');<br>
        $site_setting = get_site_setting($siteid);<br>
        $file_size_limit = $site_setting['upload_maxsize'];<br>
        $sess_id = SYS_TIME;<br>
        $swf_auth_key = md5(pc_base::load_config('system','auth_key').$sess_id);<br>
        $init =  'var swfu = \'\';<br>
        $(document).ready(function(){<br>
        swfu = new SWFUpload({<br>
            flash_url:"'.JS_PATH.'swfupload/swfupload.swf?"+Math.random(),<br>
            upload_url:"'.APP_PATH.'index.php?m=attachment&amp;c=attachments&amp;a=swfupload&amp;dosubmit=1",<br>
            file_post_name : "Filedata",<br>
            post_params:{"SWFUPLOADSESSID":"'.$sess_id.'","module":"'.$module.'","catid":"'.$_GET['catid'].'","userid":"'.$userid.'","siteid":"'.$siteid.'","dosubmit":"1","thumb_width":"'.$thumb_width.'","thumb_height":"'.$thumb_height.'","watermark_enable":"'.$watermark_enable.'","filetype_post":"'.$file_types_post.'","swf_auth_key":"'.$swf_auth_key.'","isadmin":"'.$isadmin.'","groupid":"'.$groupid.'"},<br>
            file_size_limit:"'.$file_size_limit.'",<br>
            file_types:"'.$file_types.'",<br>
            file_types_description:"All Files",<br>
            file_upload_limit:"'.$file_upload_limit.'",<br>
            custom_settings : {progressTarget : "fsUploadProgress",cancelButtonId : "btnCancel"},</p>
<p>
 </p>
<p>
            button_image_url: "",<br>
            button_width: 75,<br>
            button_height: 28,<br>
            button_placeholder_id: "buttonPlaceHolder",<br>
            button_text_style: "",<br>
            button_text_top_padding: 3,<br>
            button_text_left_padding: 12,<br>
            button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,<br>
            button_cursor: SWFUpload.CURSOR.HAND,</p>
<p>
            file_dialog_start_handler : fileDialogStart,<br>
            file_queued_handler : fileQueued,<br>
            file_queue_error_handler:fileQueueError,<br>
            file_dialog_complete_handler:fileDialogComplete,<br>
            upload_progress_handler:uploadProgress,<br>
            upload_error_handler:uploadError,<br>
            upload_success_handler:uploadSuccess,<br>
            upload_complete_handler:uploadComplete<br>
            });<br>
        })';<br>
        return $init;<br>
    }</p>
</div>
<p>
<br>
回到正题.我们来看模板swfupload.tpl.php</p>
<p>
 </p>
<p>
这个模板使用了一个js来控制&lt;li&gt;以页签的形式显示.我们可以用firebug去找到带有我们要找到的swfupload按钮的那个页签的id</p>
<p>
那个id是tab_swf_1</p>
<p>
<strong>这个是一个div 代码如下.</strong></p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code2439">
<p>
<br>
&lt;div id="div_swf_1"&gt;<br>
            &lt;div&gt;<br>
                &lt;div id="addnew"&gt;<br>
                    &lt;span id="buttonPlaceHolder"&gt;&lt;/span&gt;<br>
                &lt;/div&gt;<br>
                &lt;input type="button" id="btupload" value="&lt;?php echo L('start_upload')?&gt;" onClick="swfu.startUpload();" /&gt;<br>
                &lt;div id="nameTip"&gt;&lt;?php echo L('upload_up_to')?&gt;&lt;font color="red"&gt; &lt;?php echo $file_upload_limit?&gt;&lt;/font&gt; &lt;?php echo L('attachments')?&gt;,&lt;?php echo L('largest')?&gt; &lt;font color="red"&gt;&lt;?php echo $file_size_limit?&gt;&lt;/font&gt;&lt;/div&gt;<br>
                &lt;div&gt;&lt;/div&gt;</p>
<p>
 </p>
<p>
                &lt;div&gt;&lt;?php echo L('supported')?&gt; &lt;font&gt;&lt;?php echo str_replace(array('*.',';'),array('','、'),$file_types)?&gt;&lt;/font&gt; &lt;?php echo L('formats')?&gt;&lt;/div&gt;&lt;input type="checkbox" id="watermark_enable" value="1" &lt;?php if(isset($watermark_enable) &amp;&amp;$watermark_enable == 1) echo 'checked'?&gt; onclick="change_params()"&gt; &lt;?php echo L('watermark_enable')?&gt;<br>
            &lt;/div&gt;<br>
            &lt;div&gt;&lt;/div&gt;<br>
            &lt;fieldset id="swfupload"&gt;<br>
            &lt;legend&gt;&lt;?php echo L('lists')?&gt;&lt;/legend&gt;<br>
            &lt;ul  id="fsUploadProgress"&gt;<br>
            &lt;/ul&gt;<br>
            &lt;/fieldset&gt;<br>
        &lt;/div&gt;</p>
</div>
<p>
<br>
在这里我们看到有一个span   id是buttonPlaceHolder  而在配置文件中有这么一行button_placeholder_id: "buttonPlaceHolder",很明显.当页面被加载的时候 id为buttonPlaceHolder的元素会被JS替换成swfupload的上传控件.</p>
<p>
 </p>
<p>
之后一步我们要在点选完文件之后触发swf的上传方法</p>
<p>
会在代码中找到如下代码.这里面调用了swfu.startUpload()方法.这个方法定义的地方在swfupload.js里面.我们无需理会.</p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code84685">
<br>
&lt;input type="button" id="btupload" value="&lt;?php echo L('start_upload')?&gt;" onClick="swfu.startUpload();" /&gt;</div>
<p>
<br><strong>至此.我们已经找到了swfupload的上传控件使用方法</strong></p>
<p>
 </p>
<p>
怎么在我的程序里面调用这个东东呢 </p>
<p>
首先一点 我们需要在这个控件出现的模板里面引入这些必要的文件</p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code11388">
<br>
&lt;link href="&lt;?php echo JS_PATH?&gt;swfupload/swfupload.css" rel="stylesheet" type="text/css" /&gt;<br>
&lt;script language="JavaScript" type="text/javascript" src="&lt;?php echo JS_PATH?&gt;swfupload/swfupload.js"&gt;&lt;/script&gt;<br>
&lt;script language="JavaScript" type="text/javascript" src="&lt;?php echo JS_PATH?&gt;swfupload/fileprogress.js"&gt;&lt;/script&gt;<br>
&lt;script language="JavaScript" type="text/javascript" src="&lt;?php echo JS_PATH?&gt;swfupload/handlers2.js"&gt;&lt;/script&gt;<br>
&lt;script type="text/javascript"&gt;<br>
&lt;?php echo initupload($_GET['module'],$_GET['catid'],$args,$this-&gt;userid,$this-&gt;groupid,$this-&gt;isadmin)?&gt;<br>
&lt;/script&gt;</div>
<p>
<br><strong>代码如上所示.</strong></p>
<p>
 </p>
<p>
然后在我们的模板里面想要放置swfupload的地方写上这样的标签</p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code31278">
<br>
&lt;span id="buttonPlaceHolder"&gt;&lt;/span&gt;<br>
&lt;input type="button" id="btupload" value="&lt;?php echo L('start_upload')?&gt;" onClick="swfu.startUpload();</div>
<p>
<br>
这样我们就已经把swfupload引入到我们需要的地方了.接着就是能够正常执行上传等功能.</p>
<p>
 </p>
<p>
但是这样还不能达到我们的需求.而且有一个问题.我们把文件上传到神马地方去了.那我们就来找找我们把文件上传到神马地方去了</p>
<p>
在配置文件(用initupload函数输出的)里面有这样一行</p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code98166">
<br>
upload_url:"'.APP_PATH.'index.php?m=attachment&amp;c=attachments&amp;a=swfupload&amp;dosubmit=1",</div>
<p>
<br>
这个很明显就透露出了我们把文件上传到了attachment模块中attachments控制器里面的swfupload方法去处理了</p>
<p>
 </p>
<p>
这个地方也就是我之前没有关注的if里面的东西.</p>
<p>
拿出来看看</p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code97502">
<br>
if( $_POST['swf_auth_key'] != md5(pc_base::load_config('system','auth_key').$_POST['SWFUPLOADSESSID']) || ($_POST['isadmin']==0 &amp;&amp; !$grouplist[$_POST['groupid']]['allowattachment'])) exit();<br>
            pc_base::load_sys_class('attachment','',0);<br>
            $attachment = new attachment($_POST['module'],$_POST['catid'],$_POST['siteid']);<br>
            $attachment-&gt;set_userid($_POST['userid']);<br>
            $aids = $attachment-&gt;upload('Filedata',$_POST['filetype_post'],'','',array($_POST['thumb_width'],$_POST['thumb_height']),$_POST['watermark_enable']);<br>
            if($aids) {<br>
                $filename= (strtolower(CHARSET) != 'utf-8') ? iconv('gbk', 'utf-8', $attachment-&gt;uploadedfiles['filename']) : $attachment-&gt;uploadedfiles['filename'];<br>
                if($attachment-&gt;uploadedfiles['isimage']) {<br>
                    echo $aids.','.$this-&gt;upload_url.$attachment-&gt;uploadedfiles['filepath'].','.$attachment-&gt;uploadedfiles['isimage'].','.$filename;<br>
                } else {<br>
                    $fileext = $attachment-&gt;uploadedfiles['fileext'];<br>
                    if($fileext == 'zip' || $fileext == 'rar') $fileext = 'rar';<br>
                    elseif($fileext == 'doc' || $fileext == 'docx') $fileext = 'doc';<br>
                    elseif($fileext == 'xls' || $fileext == 'xlsx') $fileext = 'xls';<br>
                    elseif($fileext == 'ppt' || $fileext == 'pptx') $fileext = 'ppt';<br>
                    elseif ($fileext == 'flv' || $fileext == 'swf' || $fileext == 'rm' || $fileext == 'rmvb') $fileext = 'flv';<br>
                    else $fileext = 'do';<br>
                    echo $aids.','.$this-&gt;upload_url.$attachment-&gt;uploadedfiles['filepath'].','.$fileext.','.$filename;<br>
                }<br>
                exit;<br>
            } else {<br>
                echo '0,'.$attachment-&gt;error();<br>
                exit;</div>
<p>
<br><strong>这个里面有几行是比较重要的.</strong></p>
<p>
 </p>
<p>
首先它载入了系统的attachment类.并且用到了里面的方法.</p>
<p>
程序对上传成功做了echo操作.返回的东西是   返回了编号,上传后的地址,拓展名,文件名.</p>
<p>
这些东西是给谁用的啊   我们还得回去看配置文件.</p>
<p>
配置文件里面有一段是上传过程中各个事件将触发的方法.  有开始上传的.有上传成功的,有上传失败的.等等.</p>
<p>
我们可以看见有一个方法是file_dialog_complete_handler:fileDialogComplete,</p>
<p>
其实这些已经升级到swfupload的范畴了.有兴趣可以去研究研究</p>
<p>
然后我们在phpcms/static/swfupload/handler.js里面找到这个方法.</p>
<p>
看见上传成功后echo出来的数据被解析了.</p>
<p>
<strong>解析的方法如下</strong></p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code72935">
<br>
function att_show(serverData,file)<br>
{<br>
    var serverData = serverData.replace(/&lt;div.*?&lt;\/div&gt;/g,'');<br>
    var data = serverData.split(',');<br>
    var id = data;<br>
    var src = data;<br>
    var ext = data;<br>
    var filename = data;<br>
    if(id == 0) {<br>
        alert(src)<br>
        return false;<br>
    }<br>
    if(ext == 1) {<br>
        var img = '&lt;a href="javascript:;" onclick="javascript:att_cancel(this,'+id+',\'upload\')"&gt;&lt;div&gt;&lt;/div&gt;&lt;img src="'+src+'" width="80" imgid="'+id+'" path="'+src+'" id="code46637"&gt;
<br>
$this-&gt;savepath = $this-&gt;upload_root.$this-&gt;upload_dir.date('Y/md/');</div>
<p>
<br>
这个自然就是指定了上传到的目录.文件名是通过getname方法来获取的.</p>
<p>
 </p>
<p>
<strong>到这里我们就理清思路了.</strong></p>
<p>
<strong>系统是这么运行的 </strong></p>
<p>
首先在模板里面引用swfupload(配置文件是用函数生成的)-&gt;上传文件-&gt;attachment模块里的swfupload方法处理(使用系统的attachment类里面的upload方法循环上传附件.并返回结果给swfupload方法)-&gt;处理结果通过swfupload的方法(fileDialogComplete)返回给页面.</p>
<p>
在上面我们已经实现了在模板里面引入swfupload.但是我们使用的配置文件和上传附件的方法等都是系统原来自带的.并不能实现我想要的目录结构和文件命名方法.怎么办..</p>
<p>
改.</p>
<p>
怎么改,首先们要把配置文件改掉. 在自己的模块里面的functions文件夹里面建立自己的函数.我们用自己的函数名称 文件命名为global.func.php这样系统会通过auto_load把我们的函数加载</p>
<p>
进去我们把系统中attachment模块functions文件夹下面的global.func.php里面的initupload函数全盘拷贝进来.只修改其中的一行</p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code98975">
<br>
upload_url:"'.APP_PATH.'index.php?m=你的模块名称&amp;c=你的控制器名称&amp;a=你的方法名称&amp;dosubmit=1",</div>
<p>
<br>
这样文件就会提交到我们的控制器下面.并且调用我们自己写的方法</p>
<p>
 </p>
<p>
然后我们去改系统的attachment类  我们在自己的模块下的classes文件夹下面建立一个myattachment.class.php</p>
<p>
写一个我们自己的类.去集成系统的attachment类.(记得吧里面的私有方法copy过来.)我们需要修改几行.首先一点是吧upload方法里面的上传目录改掉.然后是改掉文件名的命名方法.</p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code41959">
<p>
<br>
function upload($field, $alowexts = '', $maxsize = 0, $overwrite = 0,$thumb_setting = array(), $watermark_enable = 1) {<br>
        if(!isset($_FILES[$field])) {<br>
            $this-&gt;error = UPLOAD_ERR_OK;<br>
            return false;<br>
        }<br>
        if(empty($alowexts) || $alowexts == '') {<br>
            $site_setting = $this-&gt;_get_site_setting($this-&gt;siteid);<br>
            $alowexts = $site_setting['upload_allowext'];<br>
        }<br>
        $fn = $_GET['CKEditorFuncNum'] ? $_GET['CKEditorFuncNum'] : '1';</p>
<p>
 </p>
<p>
        $this-&gt;field = $field;<br>
        $this-&gt;savepath = $this-&gt;upload_root.$this-&gt;upload_dir.date('Ymd');//这里我们需要修改下.也可以不修改.在我们实例化这个类的时候再来指定目录.<br>
        $this-&gt;alowexts = $alowexts;<br>
        $this-&gt;maxsize = $maxsize;<br>
        $this-&gt;overwrite = $overwrite;<br>
        $uploadfiles = array();<br>
        $description = isset($GLOBALS[$field.'_description']) ? $GLOBALS[$field.'_description'] : array();<br>
        if(is_array($_FILES[$field]['error'])) {<br>
            $this-&gt;uploads = count($_FILES[$field]['error']);<br>
            foreach($_FILES[$field]['error'] as $key =&gt; $error) {<br>
                if($error === UPLOAD_ERR_NO_FILE) continue;<br>
                if($error !== UPLOAD_ERR_OK) {<br>
                    $this-&gt;error = $error;<br>
                    return false;<br>
                }<br>
                $uploadfiles[$key] = array('tmp_name' =&gt; $_FILES[$field]['tmp_name'][$key], 'name' =&gt; $_FILES[$field]['name'][$key], 'type' =&gt; $_FILES[$field]['type'][$key], 'size' =&gt; $_FILES[$field]['size'][$key], 'error' =&gt; $_FILES[$field]['error'][$key], 'description'=&gt;$description[$key],'fn'=&gt;$fn);<br>
            }<br>
        } else {<br>
            $this-&gt;uploads = 1;<br>
            if(!$description) $description = '';<br>
            $uploadfiles = array('tmp_name' =&gt; $_FILES[$field]['tmp_name'], 'name' =&gt; $_FILES[$field]['name'], 'type' =&gt; $_FILES[$field]['type'], 'size' =&gt; $_FILES[$field]['size'], 'error' =&gt; $_FILES[$field]['error'], 'description'=&gt;$description,'fn'=&gt;$fn);<br>
        }</p>
<p>
        if(!dir_create($this-&gt;savepath)) {<br>
            $this-&gt;error = '8';<br>
            return false;<br>
        }<br>
        if(!is_dir($this-&gt;savepath)) {<br>
            $this-&gt;error = '8';<br>
            return false;<br>
        }<br>
        @chmod($this-&gt;savepath, 0777);</p>
<p>
        if(!is_writeable($this-&gt;savepath)) {<br>
            $this-&gt;error = '9';<br>
            return false;<br>
        }<br>
        if(!$this-&gt;is_allow_upload()) {<br>
            $this-&gt;error = '13';<br>
            return false;<br>
        }<br>
        $aids = array();<br>
        foreach($uploadfiles as $k=&gt;$file) {<br>
            $fileext = fileext($file['name']);<br>
            if($file['error'] != 0) {<br>
                $this-&gt;error = $file['error'];<br>
                return false;<br>
            }<br>
            if(!preg_match("/^(".$this-&gt;alowexts.")$/", $fileext)) {<br>
                $this-&gt;error = '10';<br>
                return false;<br>
            }<br>
            if($this-&gt;maxsize &amp;&amp; $file['size'] &gt; $this-&gt;maxsize) {<br>
                $this-&gt;error = '11';<br>
                return false;<br>
            }<br>
            if(!$this-&gt;isuploadedfile($file['tmp_name'])) {<br>
                $this-&gt;error = '12';<br>
                return false;<br>
            }<br>
            //$temp_filename = $this-&gt;getname($fileext);//名称在这里.我们需要修改下<br>
       $temp_filename = $file['tmp_name'].$fileext; //修改成原来的系统文件名称.<br>
       $savefile = $this-&gt;savepath.$temp_filename; $savefile = preg_replace("/(php|phtml|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm|aspx|asax|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2", $savefile); $filepath = preg_replace(new_addslashes("|^".$this-&gt;upload_root."|"), "", $savefile); if(!$this-&gt;overwrite &amp;&amp; file_exists($savefile)) continue; $upload_func = $this-&gt;upload_func; if(@$upload_func($file['tmp_name'], $savefile)) { $this-&gt;uploadeds++; @chmod($savefile, 0644); @unlink($file['tmp_name']); $file['name'] = iconv("utf-8",CHARSET,$file['name']); $uploadedfile = array('filename'=&gt;$file['name'], 'filepath'=&gt;$filepath, 'filesize'=&gt;$file['size'], 'fileext'=&gt;$fileext, 'fn'=&gt;$file['fn']); $thumb_enable = is_array($thumb_setting) &amp;&amp; ($thumb_setting &gt; 0 || $thumb_setting &gt; 0 ) ? 1 : 0; $image = new image($thumb_enable,$this-&gt;siteid); if($thumb_enable) { $image-&gt;thumb($savefile,'',$thumb_setting,$thumb_setting); } if($watermark_enable) { $image-&gt;watermark($savefile, $savefile); } $aids[] = $this-&gt;add($uploadedfile); } } return $aids; }</p>
</div>
<p>
<br>
注:这里我们可以再系统的attachment模块下建立MY_attachment.php  但是这样会影响系统的附件上传功能.</p>
<p>
 </p>
<p>
<strong>在我们自己的控制器里面.我们这个时候就需要加载自己写的类了.</strong></p>
<div>
<span><u>复制代码</u></span> 代码如下:</div>
<div id="code66122">
<br>
pc_base::load_app_class('你的模块名','',0);</div>
<p>
<br>
其余的操作可以参照系统的attachment模块下的attachments控制器里面的swfupload方法来修改.</p>
<p>
 </p>
<p>
至此.我便完成了我的目的.在不改变系统文件目录的基础上.完成我自己想要的文件上传功能.</p>
頁: [1]
查看完整版本: phpcms模块开发之swfupload的使用介绍