请大佬帮忙看看删除网站冗余图片的代码

代码实现的功能是查询上传目录下的图片在数据库中如果没有就删除,我写的代码如下,在本地测试时图片比较少可以正常执行,上传到服务器上,因为服务器的图片比较多,数据库也比较大,执行时一直显示“正在等待www.abc.com响应”。请问各位老大怎样修改代码能用在多图片大数据库中?

<?php
set_time_limit (0);
header("Content-type: text/html; charset=utf-8");
$_config = array();//
// ----------------------------  CONFIG DB  ----------------------------- //
$_config['dbhost'] = '127.0.0.1';
$_config['dbuser'] = 'root';
$_config['dbpw'] = 'root';
$_config['dbname'] = 'dbname';
$_config['table'] = 'pic';//表名
$_config['url'] = 'pic_url';//字段名

$link = mysqli_connect($_config['dbhost'], $_config['dbuser'], $_config['dbpw']);
if (!$link){
    exit('数据库链接失败!');
}
mysqli_set_charset($link, 'utf8');
mysqli_select_db($link, $_config['dbname']);

//批量删除冗余图片
$arr=glob('upload/pic/*/*.{jpg,png,gif,jpeg}',GLOB_BRACE);//此处需修改图片存放路径,*为任意目录名或文件名
if(count($arr)>0){
$j=count($arr);
$ndel=0;
for($i=0;$i<$j;$i++){
$sql="select ".$_config['url']." from ".$_config['table']." where ".$_config['url']." like '%$arr[$i]%'";
$myrun = mysqli_query($link, $sql);
echo ($sql."<br>");
if(!mysqli_num_rows($myrun)){
echo "$arr[$i]此图片不存在于数据库中,正在删除中......<br><br>";
unlink ($arr[$i]);
$ndel++;
}
$n=count($arr)-$ndel;
echo "<center><div style='margin-top:50px; line-height:25px; font-size:15px; color:#3399FF;'>";
if($ndel>0){echo "已删除<font color='#ff0000'> ".$ndel." </font>张冗余图片,";}
echo "当前目录中共有<font color='#ff0000'> ".$n." </font>张图片!</div></center>";
}

if(count($arr)==0){
echo ("对不起,此目录下没有图片!");
}
mysqli_close($link);
?>
阅读 1.8k
2 个回答

你这一张图就要做一次数据库的查询,不慢才怪。。不知道你这个功能是只执行一次还是会需要多次执行,只执行一次的话个人觉得可以这样做一些优化:

  • 获取mysql表中存储图片路径的字段,组成一个大的数组$picPathArr
  • $picPathArr与你的$arr对比得到的差集就是需要删除的目标$picDelArr
  • 遍历$picDelArr,依次删除。。

如果执行多次的话:

  • 这种数据在生成的时候就要考虑它的使用场景,所以要保持数据库中存储的字段的准确性,就可以避免使用likelike的性能不高。。
  • 可以的话这种数据在Redis之类的缓存中冗余一份,避免查询数据库;真的遍历$arr的时候改从缓存查询图片是否存在也会快得多。。
  • 会被删除的图片在生成的时候就带上_del_之类的的这种标签或放到特定的目录下,以便以后删除

总的来说可以优化的地方很多,还是需要根据实际的业务来做调整。。

新手上路,请多包涵

谢谢您的回答,我做这程序的目的就是删除数据库中不存在的图片文档,我再照你的方法优化一下试试。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题