用dz搞了个论坛,写了个采集,是那种发帖回帖都采集的效果,个人感觉很完美了。美中不足是采集器自动注册用户的时候除了会发帖回帖 其他信息全是空的 比如个人资料和头像研究了下头像部分 发现其实采集需要大中小三个图都采集过来 以下是dz官网的头像链接
http://uc.discuz.net/data/avatar/001/47/69/83_avatar_big.jpg
http://uc.discuz.net/data/avatar/001/47/69/83_avatar_middle.jpg
http://uc.discuz.net/data/avatar/001/47/69/83_avatar_small.jpg/001/47/69/83这是头像的所在目录 其实是用户的ID号1476983也就是说一个ID是123的话会自动换算成/000/00/01/23的格式来保存并且被采集的论坛上头像也不是所有用户都有 所以采集的序列并不是从1-999999999但是保存到自己的站上要从1开始排序 这样才能保证所有用户都有头像把ID转换成9位数再变成路径的代码$i = 1;
do{
$pwd = $i;
$pwd = str_pad($pwd,9,"0",STR_PAD_LEFT);
$pwd = trim(preg_replace('/^\d{1,3}|\d{2}/', '$0/', $pwd), '/');
echo $pwd . "<br/>";
$i++;
}
while($i < 1000);
再来发保存远程图片的代码
    function get_file($url,$folder,$pic_name){ 
        set_time_limit(24*60*60); //限制最大的执行时间
        $destination_folder=$folder?$folder.'/':''; //文件下载保存目录
        $newfname=$destination_folder.$pic_name;//文件PATH
        $file=fopen($url,'rb');
        if($file){         
            $newf=fopen($newfname,'wb');
            if($newf){             
                while(!feof($file)){                   
                    fwrite($newf,fread($file,1024*8),1024*8);
                }
            }
            if($file){             
                fclose($file);
            }
            if($newf){             
                fclose($newf);
            }
        }      
    }  
    get_file("http://uc.discuz.net/data/avatar/000/00/08/59_avatar_middle.jpg","./file","baidu.jpg");
但是怎么合成到一起呢?
还有呃 如何做每1000自我刷新一次?不然就卡死啦!

解决方案 »

  1.   

    没     1000次sleep(5) 就可以了 防止卡
    $i = 1;
    do{
        $pwd = $i;
        $pwd = str_pad($pwd,9,"0",STR_PAD_LEFT);
        $pwd = trim(preg_replace('/^\d{1,3}|\d{2}/', '$0/', $pwd), '/');    
        echo $pwd . "<br/>";
        $i++;
    get_file("http://uc.discuz.net/data/avatar/".$pwd."_avatar_middle.jpg","./file","baidu.jpg");
    if($i mod 1000 == 0)
      sleep(5);
    }
    while($i < 1000);
      

  2.   

    从网上找了一份,但是速度真心慢如蜗牛啊!有没有其他方式写的案例?<?
    $url=$_GET['url'];
    $dir=$_GET['dir'];
    $uid=$_GET['uid'];
    $time=$_GET['time'];
    if(empty($time)){$time=0.1;}
    $mixuid=$_GET['mixuid'];$my404=file_get_contents("http://uc.discuz.net/data/avatar/1");
    function createdir($dir){//创建文件夹
      $edir = explode('/',$dir);
      for($i=0;$i<count($edir);$i++){
        $edirm = $edir[0];
        for($ii=1;$ii<=$i;$ii++){
          $edirm = $edirm.'/'.$edir[$ii];
        }
        if(file_exists($edirm) && is_dir($edirm)){
        }else{
           @mkdir ($edirm,0777);
        }
      }
    }
    $uids=$uid+1;
    if(empty($mixuid)){
      echo <<<ETO
    <html>
    <body><form name="search_form">
    UC地址:<input size="24" name="url" value="http://uc.discuz.net">末尾不要带/<br />
    头像保存目录:<input size="24" name="dir" value="touxiang/">末尾要带/<br />
    开始UID:<input size="14" name="uid" value="1"><br />
    结束UID:<input size="14" name="mixuid" value="100"><br />
    采集间隔:<input size="14" name="time" value="1"><br />
    <input type="submit" value="开始采集" ><br />
    </from>
    </body>
    </html>
    ETO;
      echo file_get_contents('touxiang_log.txt');
    }else{
      if($uid<=$mixuid){
        echo <<<ETO
    <html>
    <body>
    <meta http-equiv="refresh" content="$time;url=?url=$url&dir=$dir&time=$time&uid=$uids&mixuid=$mixuid">
    ETO;    //使用正则转换头像ID规则
        $Uid=substr('00000000'.$uid,-9,9);
        $img_id=preg_replace("/(\d{3})(\d{2})(\d{2})(\d{2})/i","$1/$2/$3/$4",$Uid);    //头像地址规则
        $img_small=$img_id.'_avatar_small.jpg';
        $img_middle=$img_id.'_avatar_middle.jpg';
        $img_big=$img_id.'_avatar_big.jpg';    //设置头像绝对地址
        $img_url_small=$url.'/data/avatar/'.$img_small;
        $img_url_middle=$url.'/data/avatar/'.$img_middle;
        $img_url_big=$url.'/data/avatar/'.$img_big;    //采集头像
        $img_file_small=file_get_contents($img_url_small);
        $img_file_middle=file_get_contents($img_url_middle);
        $img_file_big=file_get_contents($img_url_big);    createdir(dirname($dir.$img_small));//创建头像目录,反之无权限写入    //保存头像
        if($img_file_small==$my404){
          echo $img_url_small.'采集失败<br />';
        }else{
         file_put_contents($dir.$img_small, $img_file_small);
      echo $img_url_small.'采集成功<br /><img src="'.$dir.$img_small.'"><br /><br /><br />';
        }
        if($img_file_middle==$my404){
         echo $img_url_middle.'采集失败<br />';
        }else{
      file_put_contents($dir.$img_middle, $img_file_middle);
      echo $img_url_middle.'采集成功<br /><img src="'.$dir.$img_middle.'"><br /><br /><br />';
        }
        if($img_file_big==$my404){
         echo $img_url_big.'采集失败<br />';
        }else{
      file_put_contents($dir.$img_big, $img_file_big);
      echo $img_url_big.'采集成功<br /><img src="'.$dir.$img_big.'"><br /><br /><br />';
        }    file_put_contents('touxiang_log.txt', '最后采集头像UID:'.$uid);//记录最后采集ID
        echo <<<ETO</body>
    </html>
    ETO;
      }else{
        header("Location: ".$_SERVER['SCRIPT_NAME']);
      }
    }
    ?>