Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

分析x2相册批量上传

[复制链接]
evenzhou 发表于 2011-5-16 09:26:53 | 显示全部楼层 |阅读模式
===================Discuz! x2====================
首先我们进入 相册批量上传 从地址栏可以分析 home.php?mod=spacecp&ac=upload&op=flash&albumid=0
访问的文件是   source\module\home\home_spacecp.php
此文件底部 require_once libfile('spacecp/'.$ac, 'include');
调用source\include\spacecp\spacecp_upload.php
进入这部分

  1. if(!checkperm('allowupload')) {
  2. showmessage('no_privilege_upload', '', array(), array('return' => true));
  3. }
  4. cknewuser();
  5. $config = urlencode($_G['siteroot'].'home.php?mod=misc&ac=swfupload&op=config'.($_GET['op'] == 'cam'? '&cam=1' : ''));
  6. $albums = getalbums($_G['uid']);
  7. $actives = ($_GET['op'] == 'flash' || $_GET['op'] == 'cam')?array($_GET['op']=>' class="a"'):array('js'=>' class="a"');
  8. $maxspacesize = checkperm('maxspacesize');
  9. if(!empty($maxspacesize)) {
  10. space_merge($space, 'count');
  11. space_merge($space, 'field_home');
  12. $maxspacesize = $maxspacesize + $space['addsize'] * 1024 * 1024;
  13. $haveattachsize = ($maxspacesize < $space['attachsize'] ? '-':'').formatsize($maxspacesize - $space['attachsize']);
  14. } else {
  15. $haveattachsize = 0;
  16. }
  17. require_once libfile('function/friend');
  18. $groups = friend_group_list();
  19. loadcache('albumcategory');
  20. $category = $_G['cache']['albumcategory'];
  21. $categoryselect = '';
  22. if($category) {
  23. include_once libfile('function/portalcp');
  24. $categoryselect = category_showselect('album', 'catid', !$_G['setting']['albumcategoryrequired'] ? true : false, $_GET['catid']);
  25. }
  26. }
复制代码
此处的代码中 $config = urlencode($_G['siteroot'].'home.php?mod=misc&ac=swfupload&op=config'.($_GET['op'] == 'cam'? '&cam=1' : ''));
是访问flash 处理文件的入口
include_once template("home/spacecp_upload");
然后调用模版文件,下面我们来查看模版相应的相册批量上传部分的代码
  1. <script type="text/javascript">
  2. document.write(AC_FL_RunContent(
  3.   'width', '100%', 'height', '400',
  4.   'src', '{IMGDIR}/album_upload.swf?config=$config&albumid=$_GET[albumid]',
  5.   'quality', 'high', 'wmode', 'transparent'
  6. ));
  7. </script>
复制代码
代码中的config来自 上面提到的$config 这部分代码,这部分代码用来显示flash,来自于static/js/common.js
接下来,访问将进入flash处理的关键部分
source\include\misc\misc_swfupload.php
首次执行的是

  1. } elseif($op == 'config') {
  2. $hash = md5($_G['uid'].UC_KEY);
  3. $uploadurl = urlencode(getsiteurl().'home.php?mod=misc&ac=swfupload'.($iscamera ? '&op=screen' : ($isdoodle ? '&op=doodle&from=':'')));
  4. .......中间代码省略
  5. $albums = getalbums($_G['uid']);
  6. //系统分类
  7. loadcache('albumcategory');
  8. $categorys = $_G['cache']['albumcategory'];
  9. $categorystat = $_G['setting']['albumcategorystat'] ? intval($_G['setting']['albumcategorystat']) : 0;
  10. $categoryrequired = $_G['setting']['albumcategoryrequired'] ? intval($_G['setting']['albumcategoryrequired']) : 0;
复制代码
代码中$albums = getalbums($_G['uid']);
        //系统分类
        loadcache('albumcategory');
        $categorys = $_G['cache']['albumcategory'];
用于获取用户的相册分类,这也是容易出错的地方(当用户在后台开启了相册分类,但是没有设置分类项,导致$categorys为空)
$categorystat = $_G['setting']['albumcategorystat'] ? intval($_G['setting']['albumcategorystat']) : 0;
用于调用返回给flash的相册分类xml文件(template\default\home\misc_swfupload.htm)
当第一次访问完 misc_swfupload.php文件 将返回xml文件给flash 用于显示,主要处理在文件底部
如果返回的xml文件有错误将导致flash上显示不正确,或者终止继续运行,导致flash停滞。返回正常程序将通过用户提交上传图片将再次访问 该文件 进入
  1. elseif($_FILES && $_POST) {
  2.         if($_FILES["Filedata"]['error']) {
  3.                 $uploadfiles = lang('spacecp', 'file_is_too_big');
  4.         } else {
  5.                 $_FILES["Filedata"]['name'] = addslashes(diconv(urldecode($_FILES["Filedata"]['name']), 'UTF-8'));
  6.                 $_POST['albumid'] = addslashes(diconv(urldecode($_POST['albumid']), 'UTF-8'));
  7.                 $catid = $_POST['catid'] ? intval($_POST['catid']) : 0;
  8.                 $uploadfiles = pic_save($_FILES["Filedata"], $_POST['albumid'], addslashes(diconv(urldecode($_POST['title']), 'UTF-8')), true, $catid);
  9.         }
  10.         $proid = $_POST['proid'];
  11.         $uploadResponse = true;
  12.         $albumid = 0;
  13.         if($uploadfiles && is_array($uploadfiles)) {
  14.                 $status = "success";
  15.                 $albumid = $uploadfiles['albumid'];
  16.         } else {
  17.                 $status = "failure";
  18.         }
  19. }
复制代码
其中$uploadfiles = pic_save($_FILES["Filedata"], $_POST['albumid'], addslashes(diconv(urldecode($_POST['title']), 'UTF-8')), true, $catid); 作用是保存图片(从临时目录移动到服务器端,达到上传文件效果),(函数来自source\function\function_spacecp.php)
到此,相册批量上传图片已基本结束。

otherbank 发表于 2011-8-24 11:54:42 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-4-25 22:21 , Processed in 0.100687 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表