后台删除商品,详细描述里面的上传图片能够删除掉吗?

2016-07-07 15:13 来源:www.chinab4c.com 作者:ecshop专家



如题 后台删除商品,详细描述里面的上传图片能够删除掉吗?
如不能 请问如何检测UPLOAD文件夹下图片是否被网站引用,如不引用则删除,不然日积月累 肯定有很多作废的商品图片了~
后来测试了下,删除掉商品(回收站里也删除了),商品描述上传的图片不能删除,只能重新找到该图片进行删除。
现在想请教下有什么办法能避免么? 我用下面的办法修改了下admin/goods.php,可是还是删除不了,能帮忙看看么?
  1. /**
  2. * 删除代码中的图片
  3. * @parammix $good_desc 删除商品介绍中的图片
  4. * @returnvoid
  5. */
  6. function delete_goods_img($good_desc)
  7. {
  8. $match = "<img[^>]*?src=[\"'\s]*?([^>\"']*?)[\"'>]*?[^>]*?>";

  9. preg_match_all("@$match@isU", $good_desc, $img);
  10. $imgurls = array_unique($img[1]);

  11. $siteurl = dirname($GLOBALS['admin_path']);

  12. foreach ($imgurls as $img)
  13. {
  14. $img = trim($img);
  15. if( preg_match("@^http://@is", $img) )
  16. {
  17. if( preg_match("@^$siteurl@is", $img) )
  18. {
  19. $img = preg_replace("@^$siteurl@is", '', $img);
  20. }else{
  21. continue;
  22. }
  23. }

  24. if(is_file(ROOT_PATH .'/'. $img))
  25. {
  26. unlink(ROOT_PATH .'/'. $img);
  27. }elseif(is_file('../'. $img))
  28. {
  29. unlink('../'. $img);
  30. }

  31. }
  32. }
复制代码

  1. /*------------------------------------------------------ */
  2. //-- 彻底删除商品
  3. /*------------------------------------------------------ */
  4. elseif ($_REQUEST['act'] == 'drop_goods')
  5. {
  6. // 检查权限
  7. check_authz_json('remove_back');

  8. // 取得参数
  9. $goods_id = intval($_REQUEST['id']);
  10. if ($goods_id <= 0)
  11. {
  12. make_json_error('invalid params');
  13. }

  14. /* 删除商品图片和轮播图片文件 */
  15. $sql = "SELECT goods_thumb, goods_img, original_img, goods_desc " .
  16. "FROM " . $GLOBALS['ecs']->table('goods') .
  17. " WHERE goods_id " . db_create_in($goods_id);
  18. $res = $GLOBALS['db']->query($sql);
  19. while ($goods = $GLOBALS['db']->fetchRow($res))
  20. {
  21. /* 删除内容中的图片 */
  22. delete_goods_img($goods['goods_desc']);
  23. if (!empty($goods['goods_thumb']))
  24. {
  25. @unlink('../' . $goods['goods_thumb']);
  26. }
  27. if (!empty($goods['goods_img']))
  28. {
  29. @unlink('../' . $goods['goods_img']);
  30. }
  31. if (!empty($goods['original_img']))
  32. {
  33. @unlink('../' . $goods['original_img']);
  34. }
  35. }
  36. /* 删除商品 */
  37. $exc->drop($goods_id);
复制代码

回答:
ECMALL的有这个删除的关联,你可以看一下他是怎么实现的,你只要删除产品的时候执行一个删除图片的SQl语句就可以了吧

ECMALL的有这个删除的关联,你可以看一下他是怎么实现的,你只要删除产品的时候执行一个删除图片的SQl语句就 ...
guyjones 发表于 2012-9-20 07:02

图片是没办法用sql语句删除的,需要做程序,根据数据库存储的图片路径用程序进行删除,应该不是很难。




能帮忙看看上述代码么?



应该有附件吧,里面可以删除






福寿源 第一科技


回复lj19870908


能帮忙看看上述代码么?
dengxiaozi 发表于 2012-9-20 19:54

代码中删除图片的路径有问题
if(is_file(ROOT_PATH .'/'. $img))
{
// @unlink(ROOT_PATH .'/'. $img);

}elseif(is_file('../'. $img))
{
// @unlink('../'. $img);
}这里的路径都不对 你自己拦截看下if(is_file(ROOT_PATH .$img))