:::

7-2 上課範例:up_file.php

<?php
//version 1.0
//2012-10-18
//設定模組目錄名稱
define("_MODDIR","contact");


/*
include_once("up_file.php");

表單: enctype='multipart/form-data'

<script src='" . TADTOOLS_URL . "/jquery/jquery.js'></script>
<script src='" . TADTOOLS_URL . "/multiple-file-upload/jquery.MultiFile.js'></script>
<input type='file' name='upfile[]' class='multi' maxlength='1' accept='gif|jpg|png|GIF|JPG|PNG'>".list_del_file("news_sn", $news_sn)."

儲存:upload_file($col_name, $col_sn, $width);

顯示:show_files($col_name, $col_sn,true,false,false,false);  //是否縮圖 , 顯示模式 filename、num , 顯示描述 , 顯示下載次數

單一相片:get_pic_file($col_name="", $col_sn="", $name="" , $sort="", $showkind="images")


刪除:del_files($files_sn, $col_name, $col_sn);

檔案數量:get_file_amount($col_name="", $col_sn="");


種類:img,file
資料表:
CREATE TABLE `files_center` (
  `files_sn` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT '檔案流水號',
  `col_name` varchar(255) NOT NULL COMMENT '欄位名稱',
  `col_sn` smallint(5) unsigned NOT NULL COMMENT '欄位編號',
  `sort` smallint(5) unsigned NOT NULL COMMENT '排序',
  `kind` enum('img' , 'file') NOT NULL COMMENT '檔案種類',
  `file_name` varchar(255) NOT NULL COMMENT '檔案名稱',
  `file_type` varchar(255) NOT NULL COMMENT '檔案類型',
  `file_size` int(10) unsigned NOT NULL COMMENT '檔案大小',
  `description` text NOT NULL COMMENT '檔案說明',
  `counter` mediumint(8) unsigned NOT NULL COMMENT '下載人次',
  PRIMARY KEY (`files_sn`)
) ENGINE=MyISAM COMMENT='檔案資料表';
*/


//檔案中心實體位置
define("_FILES_CENTER_DIR",XOOPS_ROOT_PATH."/uploads/"._MODDIR . "/file");
define("_FILES_CENTER_URL",XOOPS_URL."/uploads/"._MODDIR . "/file");
//檔案中心圖片實體位置
define("_FILES_CENTER_IMAGE_DIR",XOOPS_ROOT_PATH."/uploads/"._MODDIR . "/image");
define("_FILES_CENTER_IMAGE_URL",XOOPS_URL."/uploads/"._MODDIR . "/image");
//檔案中心縮圖實體位置
define("_FILES_CENTER_THUMB_DIR",XOOPS_ROOT_PATH."/uploads/"._MODDIR . "/image/.thumbs");
define("_FILES_CENTER_THUMB_URL",XOOPS_URL."/uploads/"._MODDIR . "/image/.thumbs");

//上傳圖檔,$col_name=對應欄位名稱, $col_sn=對應欄位編號, $種類:img,file, $sort=圖片排序, $files_sn="更新編號"
function upload_file($col_name="", $col_sn="", $main_width="",$upfile='upfile', $sort="", $thumb_width="90", $files_sn=""){
  global $xoopsDB, $xoopsUser, $xoopsModule;

  //引入上傳物件
  include_once TADTOOLS_PATH."/upload/class.upload.php";

  //取消上傳時間限制
  set_time_limit(0);
  //設置上傳大小
  ini_set('memory_limit', '80M');


  //刪除勾選檔案
  if(!empty($_POST['del_file'])){
  foreach($_POST['del_file'] as $del_files_sn){
      del_files($del_files_sn);
    }
  }

  $files = array();
  foreach ($_FILES[$upfile] as $k => $l) {
    foreach ($l as $i => $v) {
      if (!array_key_exists($i, $files)){
      $files[$i] = array();
        }
      $files[$i][$k] = $v;
    }
  }

  foreach ($files as $file) {
    //先刪除舊檔
    if(!empty($files_sn)){
      del_files($files_sn);
    }

    //自動排序
    if(empty($sort)){
      $sort=auto_sort($col_name, $col_sn);
    }

    //取得檔案
    $file_handle = new upload($file,"zh_TW");

    if ($file_handle->uploaded) {
      //取得副檔名
      $ext=strtolower($file_handle->file_src_name_ext);
      //判斷檔案種類
      if($ext=="jpg" or $ext=="jpeg" or $ext=="png" or $ext=="gif"){
        $kind="img";
      }else{
        $kind="file";
      }

      $file_handle->file_safe_name = false;
      $file_handle->file_overwrite = true;
      $file_handle->file_new_name_body   = "{$col_name}_{$col_sn}_{$sort}";
      //若是圖片才縮圖
      if($kind=="img"){
        if($file_handle->image_src_x > $main_width){
          $file_handle->image_resize     = true;
          $file_handle->image_x        = $main_width;
          $file_handle->image_ratio_y     = true;
        }
      }
      $path=($kind=="img")?_FILES_CENTER_IMAGE_DIR:_FILES_CENTER_DIR;
      $file_handle->process($path);
      $file_handle->auto_create_dir = true;


      //若是圖片才製作小縮圖
      if($kind=="img"){
        $file_handle->file_safe_name = false;
        $file_handle->file_overwrite = true;
        $file_handle->file_new_name_body   = "{$col_name}_{$col_sn}_{$sort}";
        if($file_handle->image_src_x > $thumb_width){
          $file_handle->image_resize     = true;
          $file_handle->image_x        = $thumb_width;
          $file_handle->image_ratio_y     = true;
        }
        $file_handle->process(_FILES_CENTER_THUMB_DIR);
        $file_handle->auto_create_dir = true;
      }


      //上傳檔案
      if ($file_handle->processed) {
        $file_handle->clean();
        $file_name="{$col_name}_{$col_sn}_{$sort}.{$ext}";

        if(empty($files_sn)){
          $sql = "insert into ".$xoopsDB->prefix(_MODDIR . "_files_center")." (`col_name` , `col_sn` , `sort` , `kind` , `file_name` , `file_type` , `file_size` , `description`) values('$col_name' , '$col_sn' , '$sort' , '{$kind}' , '{$file_name}' , '{$file['type']}' , '{$file['size']}' , '{$file['name']}')";
          $xoopsDB->queryF($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
        }else{
          $sql = "replace into ".$xoopsDB->prefix(_MODDIR . "_files_center")." (`files_sn` , `col_name` , `col_sn` , `sort` , `kind` , `file_name` , `file_type` , `file_size` , `description`) values('{$files_sn}' , '$col_name' , '$col_sn' , '$sort' , '{$kind}' , '{$file_name}' , '{$file['type']}' , '{$file['size']}' , '{$file['name']}')";
          $xoopsDB->queryF($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
        }
      } else {
        redirect_header($_SERVER['PHP_SELF'],3, "Error:".$file_handle->error);
      }
    }
    $sort="";
  }
}


//刪除實體檔案
function del_files($files_sn="", $col_name="", $col_sn="", $sort=""){
  global $xoopsDB, $xoopsUser;

  if(!empty($files_sn)){
    $del_what="`files_sn`='{$files_sn}'";
  }elseif(!empty($col_name) and !empty($col_sn)){
    $and_sort=(empty($sort))?"":"and `sort`='{$sort}'";
    $del_what="`col_name`='{$col_name}' and `col_sn`='{$col_sn}' $and_sort";
  }

  $sql = "select * from ".$xoopsDB->prefix(_MODDIR . "_files_center")." where $del_what";
  $result=$xoopsDB->query($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error()."<br>".$sql);

  while(list($files_sn, $col_name, $col_sn, $sort, $kind, $file_name, $file_type, $file_size, $description)=$xoopsDB->fetchRow($result)){
    $del_sql = "delete  from ".$xoopsDB->prefix(_MODDIR . "_files_center")." where files_sn='{$files_sn}'";
    $xoopsDB->queryF($del_sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());

    if($kind=="img"){
      unlink(_FILES_CENTER_IMAGE_DIR . "/$file_name");
      unlink(_FILES_CENTER_THUMB_DIR . "/$file_name");
    }else{
      unlink(_FILES_CENTER_DIR . "/$file_name");
    }
  }
}


//取得檔案 $kind=images(大圖),thumb(小圖),$mode=link(完整連結)or array(路徑陣列)
function get_file($col_name="", $col_sn="", $sort=""){
  global $xoopsDB, $xoopsUser, $xoopsModule;

  $and_sort=(!empty($sort))?" and `sort`='{$sort}'":"";

  $sql = "select * from ".$xoopsDB->prefix(_MODDIR . "_files_center")." where `col_name`='{$col_name}' and `col_sn`='{$col_sn}' $and_sort order by sort";

  $result=$xoopsDB->queryF($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
  while($all=$xoopsDB->fetchArray($result)){
    //以下會產生這些變數: $files_sn, $col_name, $col_sn, $sort, $kind, $file_name, $file_type, $file_size, $description
    foreach($all as $k=>$v){
      $$k=$v;
    }

    $files[$files_sn]['kind']=$kind;
    $files[$files_sn]['sort']=$sort;
    $files[$files_sn]['file_name']=$file_name;
    $files[$files_sn]['file_type']=$file_type;
    $files[$files_sn]['file_size']=$file_size;
    $files[$files_sn]['counter']=$counter;
    $files[$files_sn]['description']=$description;

    if($kind=="img"){
      $pic_name=(file_exists(_FILES_CENTER_IMAGE_DIR . "/{$file_name}"))?_FILES_CENTER_IMAGE_URL."/{$file_name}":TADTOOLS_URL."/multiple-file-upload/no_thumb.gif";
      $thumb_pic=(file_exists(_FILES_CENTER_THUMB_DIR . "/{$file_name}"))?_FILES_CENTER_THUMB_URL."/{$file_name}":TADTOOLS_URL."/multiple-file-upload/no_thumb.gif";
      $files[$files_sn]['link']="<a href='{$_SERVER['PHP_SELF']}?fop=dl&files_sn=$files_sn' title='{$description}' rel='lytebox'><img src='{$pic_name}' alt='{$description}' title='{$description}' rel='lytebox'></a>";
      $files[$files_sn]['path']=$pic_name;
      $files[$files_sn]['url']="<a href='{$_SERVER['PHP_SELF']}?fop=dl&files_sn=$files_sn' title='{$description}' target='_blank'>{$description}</a>";
      $files[$files_sn]['tb_link']="<a href='{$_SERVER['PHP_SELF']}?fop=dl&files_sn=$files_sn' title='{$description}' rel='lytebox'><img src='$thumb_pic' alt='{$description}' title='{$description}'></a>";
      $files[$files_sn]['tb_path']=$thumb_pic;
      $files[$files_sn]['tb_url']="<a href='{$_SERVER['PHP_SELF']}?fop=dl&files_sn=$files_sn' title='{$description}' rel='lytebox'>{$description}</a>";
    }else{
      $files[$files_sn]['link']="<a href='{$_SERVER['PHP_SELF']}?fop=dl&files_sn=$files_sn'>{$description}</a>";
      $files[$files_sn]['path']="{$_SERVER['PHP_SELF']}?fop=dl&files_sn=$files_sn";
    }
  }
  return $files;
}


//取得單一圖片 $kind=images(大圖),thumb(小圖)
function get_pic_file($col_name="", $col_sn="", $sort="", $showkind="images"){
  global $xoopsDB, $xoopsUser, $xoopsModule;

  $and_sort=(!empty($sort))?" and `sort`='{$sort}'":"";

  $sql = "select * from ".$xoopsDB->prefix(_MODDIR . "_files_center")." where `col_name`='{$col_name}' and `col_sn`='{$col_sn}' $and_sort order by sort limit 0,1";

  $result=$xoopsDB->queryF($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
  while($all=$xoopsDB->fetchArray($result)){
    //以下會產生這些變數: $files_sn, $col_name, $col_sn, $sort, $kind, $file_name, $file_type, $file_size, $description
    foreach($all as $k=>$v){
      $$k=$v;
    }

    if($showkind=="thumb"){
      $files=(file_exists(_FILES_CENTER_THUMB_DIR . "/{$file_name}"))?_FILES_CENTER_THUMB_URL."/{$file_name}":"";
    }else{
      $files=(file_exists(_FILES_CENTER_IMAGE_DIR . "/{$file_name}"))?_FILES_CENTER_IMAGE_URL."/{$file_name}":"";
    }
  }
  return $files;
}


//取得檔案數
function get_file_amount($col_name="", $col_sn=""){
  global $xoopsDB, $xoopsUser, $xoopsModule;

  $sql = "select count(*) from ".$xoopsDB->prefix(_MODDIR . "_files_center")." where `col_name`='{$col_name}' and `col_sn`='{$col_sn}'";

  $result=$xoopsDB->queryF($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
  list($amount)=$xoopsDB->fetchRow($result);
  return $amount;
}


//列出可刪除檔案
function list_del_file($col_name="", $col_sn=""){
  global $xoopsDB, $xoopsUser, $xoopsModule;

  $all_file="";
  $sql = "select * from ".$xoopsDB->prefix(_MODDIR . "_files_center")." where `col_name`='{$col_name}' and `col_sn`='{$col_sn}' order by sort";

  $result=$xoopsDB->queryF($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
  while($all=$xoopsDB->fetchArray($result)){
    //以下會產生這些變數: $files_sn, $col_name, $col_sn, $sort, $kind, $file_name, $file_type, $file_size, $description
    foreach($all as $k=>$v){
      $$k=$v;
    }
    $all_file.="<input type='checkbox' name='del_file[]' value='{$files_sn}'> $description<br>";
  }

  if(empty($all_file))return;

  $files.="<div>選取欲刪除檔案<br>$all_file</div>";
  return $files;
}


//取得附檔或附圖 $show_mode=filename、num
function show_files($col_name="" , $col_sn="" , $thumb=true , $show_mode="" , $show_description=false , $show_dl=false){
  if($show_mode==""){
    $all_files="<script type='text/javascript' language='javascript' src='" . TADTOOLS_URL . "/lytebox/lytebox.js'></script>
    <link rel='stylesheet' href='" . TADTOOLS_URL . "/lytebox/lytebox.css' type='text/css' media='screen' />";
  }else{
    $all_files="";
  }
  $file_arr="";
  $file_arr=get_file($col_name, $col_sn);
  if(empty($file_arr))return;

  if($file_arr){
    $i=1;
    foreach($file_arr as $files_sn => $file_info){
      if($show_mode=="filename"){
        if($file_info['kind']=="file"){
          $all_files.="<div>({$i}) {$file_info['link']}</div>";
        }else{
          $all_files.="<div>({$i}) {$file_info['url']}</div>";
        }
      }else{
        if($file_info['kind']=="file"){
          $linkto=$file_info['path'];
          $description=$file_info['description'];
          $thumb_pic=TADTOOLS_URL."/multiple-file-upload/downloads.png";
          $rel="";
        }else{
          $linkto=$file_info['path'];
          $description=$file_info['description'];
          $thumb_pic=($thumb)?$file_info['tb_path']:$file_info['path'];
          $rel="rel='lyteshow[{$col_name}_{$course_sn}]' title='{$description}'";
        }

        //描述顯示
        $show_description_txt=($show_description)?"<div style='height:40px;font-size:9pt;font-weight:normal;overflow:hidden;text-align:center;'><a href='{$linkto}' $rel style='font-size:9pt;font-weight:normal;'>{$description}</a></div>":"";

        //下載次數顯示
        $show_dl_txt=($show_dl)?"<img src='" . TADTOOLS_URL . "/multiple-file-upload/dl_times.gif' alt='download counter' title='download counter' align='absmiddle' hspace=4>: {$file_info['counter']}":"";

        $width=($thumb)?110:400;
        $pic_height=($thumb)?90:300;
        $height=($thumb)?100:320;
        $height+=($show_description)?30:0;

        $all_files.="
        <div style='border:0px solid gray;width:{$width}px;height:{$height}px;float:left;display:inline;margin:2px;'>
          <a href='{$linkto}' $rel>
          <div align='center' style=\"border:1px solid #CFCFCF;width:{$width}px;height:{$pic_height}px;overflow:hidden;margin:2px auto;background-image:url('{$thumb_pic}');background-repeat: no-repeat;background-position: center center;cursor:pointer;\">
          $show_dl_txt
          </div>
        </a>
        $show_description_txt
        </div>";
      }

    $i++;
    }
  }else{
    $all_files="";
  }
  $all_files.="<div style='clear:both;'></div>";
  return $all_files;
}


//取得單一檔案資料
function get_one_file($files_sn=""){
  global $xoopsDB, $xoopsUser, $xoopsModule;

  $sql = "select * from ".$xoopsDB->prefix(_MODDIR . "_files_center")." where `files_sn`='{$files_sn}'";
  $result=$xoopsDB->queryF($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
  $all=$xoopsDB->fetchArray($result);
  return $all;
}


//自動編號
function auto_sort($col_name="", $col_sn=""){
  global $xoopsDB, $xoopsUser;

  $sql = "select max(sort) from ".$xoopsDB->prefix(_MODDIR . "_files_center")." where `col_name`='{$col_name}' and `col_sn`='{$col_sn}'";
  $result=$xoopsDB->queryF($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());
  list($max)=$xoopsDB->fetchRow($result);
  return ++$max;
}


//下載並新增計數器
function add_file_counter($files_sn=""){
  global $xoopsDB;

  $file=get_one_file($files_sn);
  $sql = "update ".$xoopsDB->prefix(_MODDIR . "_files_center")." set `counter`=`counter`+1 where `files_sn`='{$files_sn}'";
  $xoopsDB->queryF($sql) or redirect_header($_SERVER['PHP_SELF'],3, mysql_error());

  if($file['kind']=="img"){
    header("location:"._FILES_CENTER_IMAGE_URL."/{$file['file_name']}");
  }else{
    header("location:"._FILES_CENTER_URL."/{$file['file_name']}");
  }
}


if($_GET['fop']=="dl"){
  add_file_counter($_GET['files_sn']);
}
?>

:::

搜尋

QR Code 區塊

https%3A%2F%2Fwww.tad0616.net%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D26%26tbdsn%3D768

書籍目錄

展開 | 闔起

線上使用者

35人線上 (6人在瀏覽線上書籍)

會員: 0

訪客: 35

更多…