有些时候,编辑文章里添加了一些图片,当把这篇文章删除的时候,若是图片分类不作处理就没法删除掉文章里的图片,这样长时间会占用没必要要的空间。因此这里提出一个管理图片的方法,仅供参考: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'] 这个数组里。编辑器