sleepstrim
Участник форума
Joined: 27 Mar 2007
Posts: 20
Карма: 0 поощрить/наказать
|
Posted: Wed Apr 04, 2007 9:11 pm (спустя 14 минут; написано за 4 минуты 32 секунды)
Post subject:
|
|
вы меня пугаете... на С++ еще смогу.... пхп ближе к сердцу.... или это практически невыполнимая задача? в обшем может я уже совсем погряз, вот скрипт может кто что заметит..... Quote: |
function login($string) { if($fp=fopen('log.dat','a')) { $date=getdate(); $string=$date['hours'].':'.$date['minutes'].':'.$date['seconds'].' ---- '.$string."\n"; if(fwrite($fp, $string)) { fclose($fp); return 1; } fclose($fp); return 0; } return 0; } function formatHttp($url, $key=0) { $url=trim($url); $url=trim($url, "\n"); //$url=strtolower($url); if($key) { $last=strrpos($url, '/')+1; $url=substr($url, 0, $last); return $url; } if(strcasecmp($url{0}, "'")==0) { $url=substr($url, 1, strlen($url)-2); } if($l=strpos($url, 'http://', strlen('http://')+1) and strlen($url)<1000)//ссылка переадресована на другую страницу $url=substr($url, $l); if($l=strpos($url, 'HTTP://', strlen('HTTP://')+1) and strlen($url)<1000)//ссылка переадресована на другую страницу $url=substr($url, $l); if(strpos($url, '/', strlen('http://')))///ссылка звершена - нет надобности в ее правки { return $url; } else///не завершена - завершаем { $url.='/'; return $url; } return $url; } function formatHref($url, $workurl) { $url=trim($url); $url=trim($url, "\n"); if(preg_match('/http\:\/\//i', $url)) return 0; //$url=strtolower($url); $warkurl=substr($workurl, 0, strrpos($workurl, '/')+1); if(strcasecmp($url{0},'/')==0) { $end=strpos($workurl, '/',strlen('http://')+1); $len=$end; $workurl=substr($workurl,0, $len).$url; return $workurl; } $cut=substr($workurl, strpos($workurl, '/', strlen('http://'))); $ex=explode('/', $cut); if($i=substr_count($url, '../')) { $end=strpos($workurl, '/',strlen('http://')+1); $len=$end+1; $workurl=substr($workurl,0, $len); $count=count($ex)-1; $url=substr($url, strlen('../')*$i); while($i>=0 and $count) { unset($ex[$count]); $count--; $i--; } foreach($ex as $val) { if($val<>'')$workurl.=$val.'/'; } } $ex2=explode('/', $url); if(preg_match('/[A-za-z0-9]/i', $ex2[0]) and !preg_match('/http\:\/\//i', $url)) { $url=substr($workurl,0, strrpos($workurl, '/')+1).$url; return $url; } if(strcasecmp($ex2[0],'.')==0) { unset($ex2[0]); foreach($ex2 as $pas) { //if(!in_array($val, $ex)) $warkurl.=$pas.'/'; } $warkurl=substr($warkurl, 0, strlen($warkurl)-1); return $warkurl; } if($ex2[0]<>'') { foreach($ex2 as $pas) { //if(!in_array($val, $ex)) $workurl.=$pas.'/'; } } return $workurl; } function chekUrl($url) { $check=0; if(!preg_match( '/\.dtd/i',$url)) {$check=1;} else return 0; if(!preg_match('/\.exe/i', $url)) {$check=1;} else return 0; if(!preg_match('/\.avi/i', $url)) {$check=1;} else return 0; if(!preg_match('/\.jpg/i',$url)) {$check=1;} else return 0; if(!preg_match('/\.gif/i', $url)) {$check=1;} else return 0; if(!preg_match('/\.pdf/i', $url)) {$check=1;} else return 0; if(!preg_match('/\.png/i', $url)) {$check=1;} else return 0; if(!preg_match('/\.wmv/i',$url)) {$check=1;} else return 0; /*if(!preg_match('/\.cgi/i',$url)) {$check=1;} else return 0;*/ if(!preg_match('/\.css/i',$url)) {$check=1;} else return 0; if(!preg_match('/\.ico/i', $url)) {$check=1;} else return 0; if(!preg_match('/mailto/i', $url)) {$check=1;} else return 0; if(!preg_match('/JavaScript/i',$url)) {$check=1;} else return 0; if(!preg_match('/\+/',$url)) {$check=1;} //echo $url; else return 0; return $check; } function cheKBase($url, $pk=0) { global $connect; if($pk) { $query='SELECT * FROM `'.TABLE_NAME.'` WHERE pk='.$pk; $res=mysql_query($query, $connect); if($val=mysql_fetch_assoc($res)) return 1; } $query='SELECT * FROM `'.TABLE_NAME.'` WHERE link="'.$url.'"'; $res=mysql_query($query, $connect); if($val=mysql_fetch_assoc($res)) return 1; return 0; } function takeFromBd($param) { global $connect; $newMas=array(); if(strcasecmp($param[0], 'link')==0) {$query='SELECT * FROM `'.TABLE_NAME.'` WHERE '.$param[0].'="'.$param[1].'"';} else $query='SELECT * FROM `'.TABLE_NAME.'` WHERE '.$param[0].'='.$param[1]; $res=mysql_query($query, $connect); while($val=mysql_fetch_assoc($res)) { $newMas[]=$val; } if(!isset($newMas[0])) return 0; return $newMas; } function addBd($zn) { global $connect; $query='INSERT INTO `'.TABLE_NAME.'` VALUES ('; foreach($zn as $val) { $query.='"'.$val.'",'; } $query=substr($query, 0, strlen($query)-1); $query.=')'; if($res=mysql_query($query, $connect)) {login('ADDED'); return 1;} else return 0; } function dletFromBd($param) { global $connect; if(preg_match('/[0-9]/',$param[1])) {$query='DELETE FROM `'.TABLE_NAME.'` WHERE '.$param[0].'='.$param[1];} else $query='DELETE FROM `'.TABLE_NAME.'` WHERE '.$param[0].'="'.$param[1].'"'; if($res=mysql_query($query, $connect)) {login('deleted'); return 1;} else return 0; } function apdateBd($param, $zn, $where) { global $connect; $query='UPDATE `'.TABLE_NAME.'` SET '; $i=0; foreach($param as $val) { if(preg_match('/[0-9]/',$zn[$i])) {$query.=$val.'='.$zn.', ';} else $query.=$val.'="'.$zn[$i].'",'; $i++; } $query=substr($query, 0, strlen($query)-1); if(preg_match('/[0-9]/',$where[1])) {$query.=' WHERE '.$where[0].'='.$where[1];} else $query.=' WHERE '.$where[0].'="'.$where[1].'"'; if($res=mysql_query($query, $connect)) {return 1;} else return 0; } function takeUrls($url) { $d1=0; $d2=0; $d3=0; $newMas=array(); if(preg_match('/http:/i', $url)) $url=formathttp($url); login("пробуем открыть $url"); if($fp=fopen($url, 'r')) { login("открыли $url"); $page_contents=""; while($next_text=fread($fp, 1024)) $page_contents.=$next_text; //echo $page_contents.'<br>'; if($match_result=preg_match_all('/<\s*A\s*\S*\s*HREF="([^\"]+)"\s*[^>]+>([^>]*)<\/A>/i', $page_contents, $match_array, PREG_SET_ORDER)) { $d1=1; } if($match_result=preg_match_all('/<\s*A\s*\S*\s*HREF=([^\"][^>]+)\s*[^>]*>([^>]*)<\/A>/i', $page_contents, $match_array2, PREG_SET_ORDER)) { $i=0; foreach($match_array2 as $val) { if($match_result=preg_match("/'([^']+)'/i", $val[1], $match)) {$match_array2[$i][1]=$match[1]; $val[1]=$match[1];} if($match_result=preg_match('/(\S+)\s+\S*/i', $val[1], $match_array4)) { $match_array2[$i][1]=$match_array4[1]; } $i++; } $d3=1; } if($match_result=preg_match_all('/\s*HREF="([^\"]+)"/i', $page_contents, $match_array1, PREG_SET_ORDER)) { $d2=1; } $i=0; if($d3) { foreach($match_array2 as $val) { if(!preg_match('/http\:\/\//i', $val[1]) and $pa=formatHref($val[1], $url)) { $val[1]=$pa; } else { $pa=formatHttp($val[1]); $val[1]=$pa; } if(!preg_match('/[A-Za-z0-9а-я\.\,\:\;]/i', $val[2])) $val[2]=$val[1]; $flag=0; foreach($newMas as $pas) { if(in_array($val[1], $pas)) { break; } else $flag++; } if($flag==count($newMas) and chekUrl($val[1])) { $newMas[$i]=array($val[1], $val[2]); $i++; } } } if($d2) { foreach($match_array1 as $val) { if(!preg_match('/http\:\/\//i', $val[1]) and $pa=formatHref($val[1], $url)) { $val[1]=$pa; } else { $pa=formatHttp($val[1]); $val[1]=$pa; } $val[2]=$val[1]; $flag=0; foreach($newMas as $pas) { if(in_array($val[1], $pas)) { break; } else $flag++; } if($flag==count($newMas) and chekUrl($val[1])) { $newMas[$i]=array($val[1], $val[2]); $i++; } } } if($d1) { foreach($match_array as $val) { if(!preg_match('/http\:\/\//i', $val[1]) and $pa=formatHref($val[1], $url)) { $val[1]=$pa; } else { $pa=formatHttp($val[1]); $val[1]=$pa; } if(!preg_match('/[A-Za-z0-9а-я\.\,\:\;]/i', $val[2])) $val[2]=$val[1]; $flag=0; foreach($newMas as $pas) { if(in_array($val[1], $pas)) { break; } else $flag++; } if($flag==count($newMas) and chekUrl($val[1])) { $newMas[$i]=array($val[1], $val[2]); $i++; } } } if(fclose($fp)) {login('закрыл');} else login('ВНИМАНИЕ!!! НЕ ЗАКРЫТ ФАЙЛ!!!'); return $newMas; } else {login("возможно не открыли.... $url");return 0;} } function getIn($url, $key) { global $connect; switch($key) { case '1': $query='SELECT * FROM `links` where link="'.$url.'"'; $res=mysql_query($query, $connect); if($res=mysql_fetch_assoc($res)) { $deep=$res['deep']; $Pk=$res['pk']; } else { $param=array('pk','fk','link','title','status','deep'); $zn=array('',0,$url,'start','NO', 0); if(!addBd($zn)) break; $query='SELECT * FROM `links` where link="'.$url.'"'; $res=mysql_query($query, $connect); if($res=mysql_fetch_assoc($res)) { $deep=$res['deep']; $Pk=$res['pk']; } else return 0; } if($urls=takeUrls($url)) { foreach($urls as $val) { $param=array('link', $val[0]); if(!takeFromBd($param)) { $param=array('pk','fk','link','title','status','deep'); $zn=array('', $Pk, $val[0], $val[1], 'STOP', $deep+1); //if(strlen($val[0])>1000) continue; if(addBd($zn)){$string='<a href="'.$val[0].'">'.$val[1].'</a>'; login($string); $k=1;} } } $param=array('status'); $zn=array('OK'); $where=array('pk',$Pk); $string=count($urls).' Всего ссылок на старнице'; login($string); if(apdateBd($param, $zn, $where)) { $query='SELECT * FROM `links` where deep='.$deep.' and status="NO" LIMIT 0,1'; $res=mysql_query($query, $connect); if($result=mysql_fetch_assoc($res)) {$url=$result['link']; getIn($url, 1);} else return 0; } else return 0; } else { $string=count($urls).' Всего ссылок на старнице'; login($string); $param=array('status'); $zn=array('ERROR'); $where=array('pk',$Pk); if(apdateBd($param, $zn, $where)) { $query='SELECT * FROM `links` where deep='.$deep.' and status="NO" LIMIT 0,1'; $res=mysql_query($query, $connect); if($result=mysql_fetch_assoc($res)) {$url=$result['link']; getIn($url, 1);} else return 0; } else return 0; } break; case '2': $query='SELECT * FROM `links` where status="NO" LIMIT 0,1'; $res=mysql_query($query, $connect); if($result=mysql_fetch_assoc($res)) {$url=$result['link']; getIn($url, 1);} else return 0; break; default: return 0; } } function main() { global $connect; $count=0; $url=$_POST['url']; $lim=$_POST['limit']; $key=$_POST['key']; if($key==1)//ищим заново по новому пути { while($count<$lim) { if($count) { $param=array('status'); $zn=array('NO'); $where=array('status','STOP'); if(apdateBd($param, $zn, $where)) { $query="SELECT * FROM `links` WHERE status='NO' limit 0,1"; $res=mysql_query($query, $connect); $url=mysql_fetch_assoc($res); $url=$url['link']; } else break; } getIn($url,1); login("глюбина вложения $count"); $count++; } } else if($key=2)//продолжаем поиск { while($count<$lim) { $param=array('status'); $zn=array('NO'); $where=array('status','STOP'); if(apdateBd($param, $zn, $where)) { $query="SELECT * FROM `links` WHERE status='NO' limit 0,1"; $res=mysql_query($query, $connect); if($url=mysql_fetch_assoc($res)) { $url=$url['link']; getIn($url, 1); $count++; } else break; } else {login('ERROR'); break;} } } else login('Incorrect enter'); } ignore_user_abort(); set_time_limit(600); // run script forever $today=getdate(); $string=$today['seconds'].':'.$today['minutes'].':'.$today['hours'].'<br>'; login($string); define("TABLE_NAME", "links"); $connect=mysql_pconnect('localhost','root',''); $select=mysql_select_db('link', $connect); main(); $today=getdate(); $string=$today['seconds'].':'.$today['minutes'].':'.$today['hours'].'<br>'; login($string); mysql_close($connect); | извиняйте за небольшую корявость ф-ий делать их более совершенными уже нет сил, по идее должны работать. в общем если что разъясню.... хелп кто в теме.
|
|