有些時候,編輯文章裏添加了一些圖片,當把這篇文章刪除的時候,若是圖片分類不作處理就沒法刪除掉文章裏的圖片,這樣長時間會佔用沒必要要的空間。因此這裏提出一個管理圖片的方法,僅供參考: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(""", "'"), 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'] 這個數組裏。編輯器