文本編輯器上傳圖片分類管理方法

有些時候,編輯文章裏添加了一些圖片,當把這篇文章刪除的時候,若是圖片分類不作處理就沒法刪除掉文章裏的圖片,這樣長時間會佔用沒必要要的空間。因此這裏提出一個管理圖片的方法,僅供參考:php

主題思路就是,當接文章提交過來的POST數組的時候把文本編輯器裏的內容先過濾掉,把其餘信息先insert到數據庫,而後再把編輯器的中上傳的圖片存入到編碼好的路徑裏,再把編輯器裏的信息update到剛纔的那條裏。數據庫

下面來具體說說這些步驟:數組

<!--lang:php-->
//獲取編輯器裏的內容,並賦給一個變量
$content = $_POST['content'];
unset($_POST['content']);//這樣入庫的時候就不包含編輯器中的內容
//下面執行插入語句:
eg:$lastId = $article->insert(); // 先插入其餘信息,並獲取最後插入的ID
 
// 判斷插入是否成功(這裏引入處理編輯器內容的函數)
if($lastId && $article->aimage($content,$lastId)) {
  echo "文章添加成功!";
}
 

// aimage 函數 
// 由於除了文章上傳外 可能不少地方也須要處理圖片保存的地方,因此這個最好設置爲單獨的model 共其餘共享
/**
* @params $content 文本信息
* @params $lastId  最後插入的ID
* @params $prefix  文件前綴(用於區分不一樣功能模塊中的圖片)
**/
                         
function aimage($content, $lastId, $prefix="") {
  if(rtrim($content)=="") {
    $this->setMsg("內容不能爲空");
    return false;
  }                         
                     
//爲了入庫,先把轉義符去掉,再把特殊字符換成實體
$content = str_replace(array("\"", "'"), array("&quot;", "&#039;"), stripslashes($content));
                         
// 這裏的SESSION數組,是上傳圖片的文件名組成的數組 下面再說怎麼來的。
if(!empty($_SESSION["article"])){
  // 找到上傳文件的路徑
  $srcpath = PROJECT_PATH."public/uploads/";
  // 生成本身方便管理的新路徑
  $path = $srcpath.$prefix.$lastId.'/'; //這樣就細分了圖片的歸屬,而不是大雜燴了
  // 下面遍歷存在SESSION裏的圖片名
  foreach($_SESSION['article'] as $filename) {
                           
  // 把將要出入數據庫的文本編輯器裏的內容中的圖片路徑換成新的 
    $content = str_replace($filename, $prefix.$lastId."/".$filename, $content);
                           
  // 若是新目錄不存在,則新建一個
    if(!file_exists($path)) {
      mkdir($path);
    }
  // 把上傳圖片轉移到新目錄中
  rename($srcpath.$filename, $path.$filename);
  }
  $_SESSION["article"] = array(); // 清空數組,下次再用
}
  // 把編輯器裏的文本信息 update 到剛插入的數據裏
return $this->where($lastId)->update("content='{$content}'"); 
}
 


// 刪除文章的時候,也要刪除文章裏對應的圖片 這裏文章前綴默認爲空
function delres($id, $prefix="") {
  // 若是是刪除文章,則也要刪除文章對應全部評論,以及用戶對這個文章的操做
  if($prefix=="") {
    D("content")->where(array('aid'=>$id))->delete();
    D("dynamic")->where(array("otype"=>array(1,2,3,4), "cid"=>$id))->delete();
  }
  $directory = PROJECT_PATH."public/uploads/".$prefix.$id.'/';
             
  if(file_exists($directory)) {
    if($dir_handle = @opendir($directory)) {
      while(false!==($filename=readdir($dir_handle))) {
        if($filename!="." && $filename!="..") {
          unlink($directory."/".$filename);
        }
      }
      closedir($dir_handle);
    }
    rmdir($directory);
  }
}

這裏補充一下上面的SESSION數組是怎麼來的。他是在編輯器自己裏的上傳文件處理函數裏,若是上傳成功,則把當前上傳的圖片名塞入$_SESSION['article'] 這個數組裏。編輯器

相關文章
相關標籤/搜索