删除/批量删除文章/新闻内容并删除焦点图和图片文件的方法

  •   
  • 2938
  • PHP
  • 12
  • super_dodo
  • 2014/12/17

在网上找了很久希望使用php删除文章/新闻内容的同时并删除焦点图和图文文件的实现代码。这样可以节省服务器的空间。同时干净网站内容,拒接冗余。尤其是可以最大最快捷的杜绝不健康分图片。防止网站被不健康的图片污染。

其实最核心的代码就是正则表达式。每次学艺不精,都为正则而发愁。下面直接上代码。仅供参考。。欢迎指正。

// 删除&&批量删除(备注:传入id删除单条,传入ids批量删除)
public function actionDel(){
	$request = Yii::app()->request;
	if($request->isAjaxRequest){						//来自ajax的请求
		$delArr = array();								//组装需要删除的id数组
		if($request->getParam('id')) {					//删除单条记录--id
			$delArr[] = intval($request->getParam('id'));
		}else{			 								//批量删除--ids
			$delArr = $request->getParam('ids');
		}
		if(!empty($delArr)){							//如果需要删除的数组不为空
			$transaction = Yii::app()->db->beginTransaction();
			try{
				foreach ($delArr as $id) {
					$info = GoodsList::model()->findByPk($id);
					//删除形象图片
					if(!empty($info->img)){
						$infoImg = '.'.$info->img;
						if(file_exists($infoImg)){ unlink($infoImg); }
					}

					//正则匹配备注里面的图片
					$imgRemark = preg_match_all("/<img.+src=\"(&#91;^\"&#93;+)\"&#91;^>]+>/isU", $info->remark,$imgArr);
					if($imgRemark){		//匹配成功
						if(is_array($imgArr[1])){
							foreach ($imgArr[1] as $img) {	//循环删除图片
								$imgAdd = '.'.$img;
								if (file_exists($imgAdd)) {
									unlink($imgAdd); 
								}		
							}
						}
					}
					$rt = GoodsList::model()->deleteByPk($id);
					if(!$rt) throw new Exception("删除失败??",1);
				}
				$transaction->commit();
				$this->_end(0, '删除成功!!');
			}catch(Exception $e) {
				$transaction->rollback();
				$this->_end($e->getCode(), $e->getMessage());
			}
		}else{
			$this->_end(2,'请选择需要批量删除的条目..');
		}
	}
}

dodobook使用的Yii框架。。ajax删除。。你可以选取其中的部分代码。。相信你自己。。。

再来一个优化后的公共的方法.这个更完善更通用.因为使用了 isset()提前判断是否有该字段。。

//自定义删除的公共方法
public function uBatchDel($modelDel){
	$request = Yii::app()->request;
	$delArr = array();								//组装需要删除的id数组
	if($request->getParam('id')) {					//删除单条记录--id
		$delArr[] = intval($request->getParam('id'));
	}else{			 								//批量删除--ids
		$delArr = $request->getParam('ids');
	}
	if(!empty($delArr)){							//如果需要删除的数组不为空
		$transaction = Yii::app()->db->beginTransaction();
		try{
			foreach ($delArr as $id) {
				$info = $modelDel->findByPk($id);
				if(isset($info->img)){		//删除形象图片
					if(!empty($info->img)){
						$infoImg = '.'.$info->img;
						if(file_exists($infoImg)){ unlink($infoImg); }
					}
				}

				if(isset($info->img_logo)){		//删除LOGO
					if(!empty($info->img_logo)){
						$infoImg = '.'.$info->img_logo;
						if(file_exists($infoImg)){ unlink($infoImg); }
					}
				}

				if(isset($info->remark)){		//正则匹配备注里面的图片
					$imgRemark = preg_match_all("/<img.+src=\"(&#91;^\"&#93;+)\"&#91;^>]+>/isU", $info->remark,$imgArr);
					if($imgRemark){		//匹配成功
						if(is_array($imgArr[1])){
							foreach ($imgArr[1] as $img) {	//循环删除图片
								$imgAdd = '.'.$img;
								if (file_exists($imgAdd)) {
									unlink($imgAdd); 
								}		
							}
						}
					}

				}
				$rt = $modelDel->deleteByPk($id);		//删除记录
				if(!$rt) throw new Exception("删除失败??",1);
			}
			$transaction->commit();
			$this->_end(0, '删除成功!!');
		}catch(Exception $e) {
			$transaction->rollback();
			$this->_end($e->getCode(), $e->getMessage());
		}
	}else{
		$this->_end(2,'请选择需要批量删除的条目..');
	}
}

不要虚无缥缈的好。。。