ECSHOP删除文章或从回收站删除商品,文章内容和商品描述中的图片(位于/images/upload/Image目录)无法删除,时间长了会占用相当大的空间,尤其是使用虚拟主机的用户,对空间造成很大的开销和浪费。
实际上,我们可以写一个删除图片的函数,然后在删除文章和商品的页面,如/admin/goods.php、/admin/includes/lib_goods.php、/admin/article.php相关位置调用此函数即可的时候,调用该函数即可。函数如下:
找到admin/goods.php
搜索 $sql = “SELECT goods_id, goods_name, is_delete, is_real, goods_thumb
后增加:(约1760行)
,goods_desc,
继续搜索 /* 删除商品的货品记录 */
前增加:@deletePic($goods[‘goods_desc’]);
最后在页面最底部?>前增加函数:
/** * 删除描述中的图片 * @access public * @params string $desc */ function deletePic($desc) { preg_match_all("/<img([^>]*)\s*src=('|\")([^'\"]+)('|\")/", $desc, $matches); $arr = array_unique($matches[0]); //去除数组中重复的图片路径 foreach($arr as $value) { $str = strrchr($value, '/'); //结果示例:/1.png" $fileName = substr($str, 0, strlen($str)-1); //结果示例:/1.png @unlink('../images/upload/Image' . $fileName); //删除图片 } }
方法二:
找到admin/goods.php
elseif ($_REQUEST[‘act’] == ‘drop_goods’)
在这里面添加
$sql = "select goods_desc from ".$ecs->table('goods')." where goods_id = ".$goods_id; $des = $db->getOne($sql); $arr = explode("<img",$des); for($i=0;$i<count($arr);$i++){ if(strpos($arr[$i],'src=')>-1){ $tmp = explode("\"",$arr[$i]); for($k=0;$k<count($tmp);$k++){ if(strpos($tmp[$k],'.jpg')>-1||strpos($tmp[$k],'.jpeg')>-1||strpos($tmp[$k],'.png')>-1||strpos($tmp[$k],'.gif')>-1||strpos($tmp[$k],'.bmp')>-1){ @unlink('../' .$tmp[$k]); $imgs[] = $tmp[$k]; } } } }