php discuz chhome 圖片上傳swfupload功能

來源:互聯網
上載者:User

php discuz chhome 圖片上傳swfupload功能
這上傳與discuz來比, 還相差太遠. 功能也欠缺.
  除了部分內建的url引向,我們改不了之外, 其它的資料都是可以修改的.
<?php
/*
 [UCenter Home] (C) 2007-2008 Comsenz Inc.
 $Id: do_swfupload.php 12830 2009-07-22 06:42:32Z zhengqingpeng $
*/

if(!defined('IN_UCHOME')) {  //入門牌.
 exit('Access Denied');
}

include_once(S_ROOT.'./source/function_cp.php');

$op = empty($_GET['op'])?'':$_GET['op'];  // uchome比較喜歡用的方法變數.
$isupload = empty($_GET['cam']) && empty($_GET['doodle']) ? true : false;  //是否上傳.還有種可能是頭像上傳.
$iscamera = isset($_GET['cam']) ? true : false;  //判斷一下是頭像上傳.
$isdoodle = isset($_GET['doodle']) ? true : false;  //判斷一下是大頭貼背景是否隨機.
$fileurl = ''; // 預設賦值.
if(!empty($_POST['uid'])) {  //如果有uid傳過來, 表示在上傳頭像, 就取得uid值.
 $_SGLOBAL['supe_uid'] = intval($_POST['uid']);    //強制轉化.
 if(empty($_SGLOBAL['supe_uid']) || $_POST['hash'] != md5($_SGLOBAL['supe_uid'].UC_KEY)) {  // 既然傳遞了uid值是過來, 假如使用者沒有登入,及hash碼不對應,就中斷.
  exit();
 }
} elseif (empty($_SGLOBAL['supe_uid'])) {  //否則再判斷, 如果沒有登入, 禁止使用上傳功能.
 showmessage('to_login', 'do.php?ac='.$_SCONFIG['login_action']);
}

if($op == "finish") {  //上傳結束時.
 /* 它會傳入如下GET
 array (
           'ac' => 'swfupload',
           'op' => 'finish',
           'albumid' => '2',
   )*/
 $albumid = intval($_GET['albumid']);  //取得分類id.
 $space = getspace($_SGLOBAL['supe_uid']); //更新使用者部分記錄, 比較圖片總數, 容量計算.
 if(ckprivacy('upload', 1)) {  //判斷一下是否已經寫了推送.
  include_once(S_ROOT.'./source/function_feed.php');
  feed_publish($albumid, 'albumid');  //否則就再寫一次.
 }
 //強行中斷.
 exit();
} elseif($op == 'config') {  //swf上傳的配置.
 /* 根據抓取所得 GET傳過來:
         array (
           'ac' => 'swfupload',
           'op' => 'config',
 )
 */
 $hash = md5($_SGLOBAL['supe_uid'].UC_KEY); //產生一個hash碼.
 
 if($isupload && !checkperm('allowupload')) {  //是上傳圖片,並且許可權足夠.對於配置來說, $isupload永遠為假.
  $hash = '';
 } else {
  $filearr = $dirstr = array();  //初始化數組.  檔案數組/及目錄資料.

  if($iscamera) {  //進入頭像上傳工作.
   /*
    根據抓取, GET資料如下:
    array (
             'ac' => 'swfupload',
             'op' => 'config',
             'cam' => '1',
    )
   */
   $directory = sreaddir(S_ROOT.'./image/foreground'); //大頭貼背景的目錄. sreaddir讀取裡面的目錄資料.
   foreach($directory as $key => $value) {   //每一個背景都是獨立的一個目錄, 所以迴圈一下.
    $dirstr = S_ROOT.'./image/foreground/'.$value;  //合成新的路徑.
    if(is_dir($dirstr)) { //判斷一下是否是目錄.
     $filearr = sreaddir($dirstr, array('jpg','jpeg','gif','png')); //讀取目錄裡面的圖片檔案.
     if(!empty($filearr)) {   // 如果圖片數組不為空白.
      if(is_file($dirstr.'/categories.txt')) {  // 如果categories.txt檔案存在.
       $catfile = @file($dirstr.'/categories.txt');   //開啟此檔案.
       $dirarr[$key][0] = trim($catfile[0]);  //就將裡面的檔案讀取來. 當然, 很無謂的方法, 裡面的內容與目錄名是一樣的.
      } else {   //如果txt檔案不存在, 就取得目錄名.
       $dirarr[$key][0] = trim($value);  //準確取得值, trim多用.
      }
      $dirarr[$key][1] = trim('image/foreground/'.$value.'/');  //將指標1設定為當前大頭貼背景目錄.
      $dirarr[$key][2] = $filearr;  // //將指標2設定為當前大頭貼背景目錄裡面的圖片.
     }
    }
   }
  } elseif($isdoodle) { //如果是頭像隨機背景, 就讀取./image/doodle/big裡面的圖片檔案.
   $filearr = sreaddir(S_ROOT.'./image/doodle/big', array('jpg','jpeg','gif','png'));
  }
 }
 //接著就到了圖片上傳配置工作.
 $max = @ini_get(upload_max_filesize); //取得php.ini最大上傳值.
 $unit = strtolower(substr($max, -1, 1));  //$max結尾有kb字樣吧, 要截取一下,並且轉成小寫.
 
 //下面是針對不同的計算單元作換算.
 if($unit == 'k') {
  $max = intval($max)*1024;   //看樣子是全部轉成byt位元組單位. KB X 1024 = 多少位元組.
 } elseif($unit == 'm') {
  $max = intval($max)*1024*1024; // MB X 1024 X 1024 = 多少位元組.
 } elseif($unit == 'g') {
  $max = intval($max)*1024*1024*1024;  // GB X 1024 X 1024 X 1024 = 多少位元組.
 }
 //取得使用者所建立的分類數組.
 $albums = getalbums($_SGLOBAL['supe_uid']);
 
} elseif($op == "screen" || $op == "doodle") {  // screen 不理解什麼時候出來 || 隨機大頭貼背景,由於沒有網路攝影機, 這裡面略過.
 
 if(empty($GLOBALS['HTTP_RAW_POST_DATA'])) { 
  $GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents("php://input");
 }
 $status = "failure";
 $dosave = true;
 
 if($op == "doodle") { 
  $query = $_SGLOBAL['db']->query('SELECT * FROM '.tname('usermagic')." WHERE uid = '$_SGLOBAL[supe_uid]' AND mid = 'doodle'");
  $value = $_SGLOBAL['db']->fetch_array($query);
  if(empty($value) || $value['count'] < 1) {//&ucirc;��Ϳѻ��
   $uploadfiles = -8;
   $dosave = false;
  }
 }
 

 if($dosave && !empty($GLOBALS['HTTP_RAW_POST_DATA'])) {
  $_SERVER['HTTP_ALBUMID'] = addslashes(siconv(urldecode($_SERVER['HTTP_ALBUMID']), $_SC['charset'], "UTF-8"));
  $from = false;
  if($op == 'screen') {
   $from = 'camera';
  } elseif($_GET['from'] == 'album') {
   $from = 'uploadimage';
  }
  $_SCONFIG['allowwatermark'] = 0; 
  $uploadfiles = stream_save($GLOBALS['HTTP_RAW_POST_DATA'], $_SERVER['HTTP_ALBUMID'], 'jpg', '', '', 0, $from);
 }
 
 $uploadResponse = true;
 $picid = $proid = $albumid = 0;
 if($uploadfiles && is_array($uploadfiles)) {
  $status = "success";
  $albumid = $uploadfiles['albumid'];
  $picid =  $uploadfiles['picid'];   
  if($op == "doodle") {   
   $fileurl = pic_get($uploadfiles['filepath'], $uploadfiles['thumb'], $uploadfiles['remote'], 0);
   include_once(S_ROOT.'./source/function_magic.php');
   magic_use('doodle', array(), 1);
  }
 } else {
  switch ($uploadfiles) {
   case -1:
    $uploadfiles = cplang('inadequate_capacity_space');
    break;
   case -2:
    $uploadfiles = cplang('only_allows_upload_file_types');
    break;
   case -4:
    $uploadfiles = cplang('ftp_upload_file_size');
    break;
   case -8:
    $uploadfiles = cplang('has_not_more_doodle');
    break;
   default:
    $uploadfiles = cplang('mobile_picture_temporary_failure');
    break;
  }
 }

} elseif($_FILES && $_POST) {   // 圖片上傳時,
 /* 根據抓取, POST GET資料值為:
 POST = array (
           'Filename' => 'MJP45+R3001.jpg',
           'proid' => '1',
           'albumid' => '2',
           'uid' => '1',
           'title' => 'MJP45+R3001',
           'hash' => '11ed07fe235ca5b9e509043e85419785',
           'Upload' => 'Submit Query',
 )
 
 GET = array (
          'ac' => 'swfupload',
 )
 
 */
 if($_FILES["Filedata"]['error']) { //如果有上傳錯誤
  $uploadfiles = cplang('file_is_too_big'); // 就提示檔案過大.
 } else {
  //考慮到編碼及大小寫問題, 還有轉義. 取得上傳檔案名稱.
  $_FILES["Filedata"]['name'] = addslashes(siconv(urldecode($_FILES["Filedata"]['name']), $_SC['charset'], "UTF-8"));
  //考慮到編碼及大小寫問題, 還有轉義. 取得上傳分類id.
  $_POST['albumid'] = addslashes(siconv(urldecode($_POST['albumid']), $_SC['charset'], "UTF-8"));
  //考慮到編碼及大小寫問題, 還有轉義. 取得上傳檔案後的一個詳解路徑.
  $uploadfiles = pic_save($_FILES["Filedata"], $_POST['albumid'], addslashes(siconv(urldecode($_POST['title']), $_SC['charset'], "UTF-8")));
 }
 
 //根據我的分析, 以下內容在圖片上傳時沒用, 不知頭像上傳會否用到.
 $proid = $_POST['proid'];
 $uploadResponse = true;
 $albumid = 0;
 //判斷一下上傳檔案, 及上傳檔案數組.
 if($uploadfiles && is_array($uploadfiles)) {
  $status = "success";  //上傳完成
  $albumid = $uploadfiles['albumid'];  // 上傳的分類id
 } else {
  $status = "failure"; //這就是上傳失敗了.
 }
 
 //這是我自己加上去的, 估計uchome也會感激我.
 exit();
}
// 時間
$newalbumname = sgmdate('Ymd');

//引入模板
include template("do_swfupload");

//輸出xml, swf配置需要.
$outxml = "<?xml version="1.0" encoding="UTF-8"?>n";
$outxml .= siconv(ob_get_contents(), 'UTF-8');
obclean();
@header("Expires: -1");
@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
@header("Pragma: no-cache");
@header("Content-type: application/xml; charset=utf-8");
echo $outxml;

// 設定檔具體匯出什麼內容呢? 請訪問這個網址.
//http://u.discuz.net/home/do.php?ac=swfupload&op=config
?>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.