代码实现的功能是查询上传目录下的图片在数据库中如果没有就删除,我写的代码如下,在本地测试时图片比较少可以正常执行,上传到服务器上,因为服务器的图片比较多,数据库也比较大,执行时一直显示“正在等待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);
?>
你这一张图就要做一次数据库的查询,不慢才怪。。不知道你这个功能是只执行一次还是会需要多次执行,只执行一次的话个人觉得可以这样做一些优化:
如果执行多次的话:
总的来说可以优化的地方很多,还是需要根据实际的业务来做调整。。