php+ajax进度条实时显示文件处理进度

结合网上高手的图片色调检查程序,做了这个小东西。可以将文件夹中颜色大面积接近人体肤色的图片检查出来。

这是我学习中做的,也是发布的第一个程序,肯定有很多问题,大家不要丢砖啊

先上几张截图

半天没找到哪里发附件,源码没发上了,有

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<title>图片检查</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<script type="text/javascript" src="ajax_min.js"></script>
<style>
body{font-size:13px;}
.a{color:#666}
.red{color:#F00}
#status{ 590px; height:30px; overflow:hidden; line-height:30px; padding-left:10px; margin:5px 0px; border:1px #333 solid; background-color:#F7F7F7; color:#000; text-align:left}
.info { height:25px;font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-align:left}
#now{1%; height:20px;background-color:#099; text-align:left}
#time{position:absolute; z-index:400; margin-top:-20px;600px; height:20px; line-height:20px; color:#C30; border:0px; text-align:center}
#info{600px; height:20px; line-height:20px; background-color:#FFF; color:#C30; border:1px #666 solid; margin-bottom:5px; text-align:left}
#scrolldIV{overflow-y:auto;overflow-x:hidden; height: 200px;  590px; border: 1px solid #999; text-align:left; padding:5px 5px 30px 5px}
</style>
<script type="text/javascript">
function $(id){
return 	document.getElementById(id);
}
function result(text){
var msg=text.split("|");
$("status").innerHTML=msg[0];	
$("scrolldIV").innerHTML+=msg[1];
$('scrolldIV').scrollTop =$('scrolldIV').scrollHeight;
}
function callBack_result(text){//回调函数
//alert(text);
var msg=text.split("|");
var txt=msg[1].split(",");
  if (txt[0]==1){
    $("scrolldIV").innerHTML+=txt[1];
   }
if (msg[0]==0){//
$("show").style.display='none';
$("scrolldIV").style.display='';
$("scrolldIV").innerHTML=msg[1];
}else{
$("status").innerHTML="("+msg[4]+"/"+msg[3]+") "+msg[6];
var n=msg[7];
var div = $('scrolldIV');
$('time').innerHTML=(n*100).toFixed(0)+'%';
$('time').style.color=(n*100).toFixed(1)>=50?'#FFF':'#C30';
$('now').style.width=(n*100)+'%';
div.scrollTop = div.scrollHeight;
if (msg[8]==0){	
ajax.get("check.php?act=ok&do=c&f="+msg[2]+"&total="+msg[3]+"&now="+msg[4]+"&err="+msg[5]+"&now_f="+msg[6],callBack_result);
}else if(msg[8]==1) {
$("status").innerHTML='正在进行扫尾工作……';
ajax.get("check.php?act=ok&do=d&f="+msg[2]+"&err="+msg[5],result);
}
}
}
function check(){
$("show").style.display='';
$("scrolldIV").style.display='';
$("scrolldIV").innerHTML='';
$("status").innerHTML='数据初始化中,请稍后……';
$('time').innerHTML='0%';
$('time').style.color='#C30';
$('now').style.width='0%';
var mulu=$("mulu").value;
ajax.get("check.php?act=ok&mulu="+mulu+"&Rnd="+ new Date().getTime(),callBack_result);
}  
</script>

</head>
<body>
<div style="margin:30px auto" align="center">
<form id="form1" name="form1" method="post" action="?act=mulu">
 <p> 输入目录:
  <input name="mulu" type="text" id="mulu" size="50" />
  <input type="button" name="button" id="button" value="搜索" onclick="check();" /> 
  (默认为当前目录)</p>
</form>
<div id="show" style="display:none">
<div id="status"></div>
<div id="info">
   <div id="now"></div><div id="time"></div></div>
</div>
<div id="scrolldIV" style="display:none"></div>
</div>
</body>
</html>

<?php
header("content-Type: text/html; charset=gb2312");
error_reporting(0);
ini_set('display_errors',0) ;
set_time_limit(0);
date_default_timezone_set("PRC");
$infotime=date('YmdHis');

//函数开始————————
//列出所有文件
function get_all_files($path){
    $list = array();
    foreach( glob( $path . '/*') as $item ){
        if( is_dir( $item ) ){
         $list = array_merge( $list , get_all_files( $item ) );
        }
        else{
         if(eregi(".jpg",$item)||eregi(".gif",$item)){
			 $list[] = $item;
			 }//这里可以增加判断文件名或其他。changed by:edlongren
         //$list[] = $item;
        }
    }
    return $list;
}

function openImageFile($file_name){   
    list($width, $height, $type, $attr) = getimagesize($file_name);   
    switch ($type){   
	        case 1 :   
            $ext = "gif";   
            break;   
        case 2 :   
            $ext = "jpeg";   
            break;   
        case 3 :   
            $ext = "png";   
            break;   
    }
	$image_handle='imagecreatefrom'.$ext;
    $image_handle=$image_handle($file_name); 
    return array('image_handle'=>$image_handle,'width'=>$width,'height'=>$height);   
}   
function testSkin($image_handle,$width,$height){   
    $skin_pix = 0;   
    for($w=0;$w<$width;$w++){   
        for ($h=0;$h<$height;$h++){   
            //验证图片   
            $rgb = imagecolorat($image_handle,$w,$h);   
            $r = ($rgb >> 16) & 0xFF;   
            $g = ($rgb >> 8) & 0xFF;   
            $b = $rgb & 0xFF;   
            $Y=0.299*$r+0.587*$g+0.114*$b;   
            $Cb=0.564*($b-$Y)+128;   
            $Cr=0.713*($r-$Y)+128;   
            if($Cb >= 86 && $Cb <= 117 && $Cr >= 140 && $Cr <= 168){   
                $skin_pix ++;   
            }   
        }   
    }   
    $skin_rate =  $skin_pix/($width*$height);   
    return $skin_rate;   
}
//函数结束————————
	//echo $list;
	//echo $path;
if (isset($_GET['act'])){
	$do=isset($_GET['do'])?$_GET['do']:'f';
	$path=!empty($_GET['mulu'])?trim($_GET['mulu']):'.';
	$list=!empty($_GET['list'])?nl2br($_GET['list']):'';
if(($path||!empty($list))&&$do=='f'){   //读取要检查的对象
	if (!empty($list)){
	$img_list=explode('<br />',$list);//统计页面总数
	if (count($img_list)==0) $img_list[]=$list;
	}else{
$img_list=get_all_files($path);
	}
	$img_list=array_unique($img_list);
$count=count($img_list);
if ($count>0){
	//写入检查文件列表
$f_w="array(";
	foreach ($img_list as $e_img){
	$f_w.="'".$e_img."', \n";	
	}
$f_w=rtrim($f_w,",").")";
	$user_now_list="<?php \n";
	$user_now_list.="\$f_list=".$f_w." \n";
    $user_now_list.="?>";
		$fp = @fopen('temp/'.$infotime.'_temp.php', "w"); 
fwrite($fp,$user_now_list); 
fclose($fp);

die ("1|1,当前搜索目录为: <font class=red>".$path."</font><br/>共搜索到 <font class=red>".$count."</font> 张图片,开始检测……<br/>|".$infotime."|".$count."|0|0|初始化完毕!|0|0");
	}else{
die ("0|<p>当前搜索目录为: <font class=red>".$path."</font></p><p>共搜索到 <font class=red>0</font> 张图片</p>");
	}
}
  if ($do=='c'){//检查图片
	  $f_name=$_GET['f'];
	 $f_total=intval($_GET['total']);
	 $f_now=intval($_GET['now']);
     $err=intval($_GET['err']);
include "temp/{$f_name}_temp.php";
	$file_name =$f_list[$f_now];
	$f_now+=1;
	$go=($f_total==$f_now)?1:0;
    if(is_file($file_name)){
        //文件存在  
        $image = openImageFile($file_name);   
        $rate = testSkin($image['image_handle'],$image['width'],$image['height']);   
        if($rate > 0.3){
			$err+=1;
die("1|1,<font class=red>警告:<a href=\"$file_name\" target=\"_blank\">".$file_name."</a> 特征明显!肤色比例:".$rate." </font><br/>|".$f_name."|".$f_total."|".$f_now."|".$err."|正在扫描:".$file_name."|".($f_now/$f_total)."|".$go);		
        }else {   
die("1|0,0|".$f_name."|".$f_total."|".$f_now."|".$err."|正在扫描:".$file_name."|".($f_now/$f_total)."|".$go);
        }   
    }else {   
die("1|1,系统找不到 ".$file_name." 文件! <br/>|".$f_name."|".$f_total."|".$f_now."|".$err."|正在扫描:".$file_name."|".($f_now/$f_total)."|".$go);
    }
  }
if ($do=='d'){//扫尾工作,删除临时文件
	$f_name=$_GET['f'];
	 $err=intval($_GET['err']);
	if (unlink("temp/{$f_name}_temp.php")){
	die("扫描完成!|<p>共找到 <font class=red>".$err."</font> 个可疑文件</p>");
	}else{
		die("扫描完成!|共找到 <font class=red>".$err."</font> 个可疑文件<br/><p>临时文件<font class=red> ".$f_name."</font> 删除失败,请手动删除!</p>");	
	}
  }
  
}
?> 

原文地址:https://www.cnblogs.com/jkll/p/1885353.html