[ GMarco24 @ 12.07.2012. 11:02 ] @
Zbog ove skripte mi je blokiran nalog na hostingu i svi sajtovi na njemu. Moze li neko da mi kaze "od oka" sta ovde najvise sludjuje server ili kako da ja to isproveravam. Pretpostavka je da preg_match_all ili sql4 upit pravi probleme, evo kratkog opisa: - preg_match_all se izvrsava na html stranici koja je izmedju 500 i 5000 linija i u niz se smesti izmedju 100 i 1000 promenjljivih - sql4 upit ima implode koji sklopi svih tih 100-1000 promenjljivih u jedan upit, pa je upit stvarno predugacak - qq() je obican mysql_query sa nekim dodacima, ne obracajte paznju Problem je sto momci nece ni da pricaju o problemu. Odmah banuju nalog i ne daju ni uvid u to sta je problem. Da li je moguce da ova skripta toliko pravi probleme? Code: <?php require_once $_SERVER['DOCUMENT_ROOT'].'/config.php'; // ###################### KESIRANJE START ########################## //$duzina_kesiranja=0; if(empty($error))$error=false;// koristimo je da ne kesiramo stranicu ako je slucajno doslo do greske if(isset($_GET['user'])){ $_POST=array( 'submit'=>1, 'pname'=>$_GET['user'] ); } if(isset($_POST['submit'])){ $name=strtolower($_POST['pname']); $title="Rating for $name - Name"; $meta_desc="Site: Rating for $name"; if(file_exists("cache/xxx-$name-xxx.htm")){ $last_modified=time()-filemtime("cache/xxx-$name-xxx.htm"); if($last_modified < $duzina_kesiranja ){ echo file_get_contents("cache/xxx-$name-xxx.htm"); die(); } } // ob_start(); } // ###################### KESIRANJE END ########################## require_once(ROOT.'header.php'); ?> <?php $j=0; $norating =0; $investigation = 0; $players_withdata = array(); $players_nodata = array(); function mptoimp($mp){ $imp = 0.125*$mp-6.25; return $imp; } function total_score($imp_no_hands, $mp_no_hands, $imp_avg, $mp_avg, $correction = 0){ $total_hands = $imp_no_hands + $mp_no_hands; $total_hands = ($total_hands==0)?1:($imp_no_hands + $mp_no_hands); $total_score = (($imp_no_hands*$imp_avg+$mp_no_hands*mptoimp($mp_avg))/($total_hands))+$correction; $total_score = number_format($total_score, 2); return $total_score; } if (isset($_POST['submit'])){ $player = strtolower($_POST['pname']); if(trim($player)==''){ echo "<p class='centertext'>Please write valid player name</p>"; }else{ $username= str_replace(' ', '+', $player); $player= str_replace('+', ' ', $username); $end_time=time(); $start_time=time()-30*24*60*60; $link="http://www.bridgebase.com/myha...nds.php?offset=0&username=$username&start_time=$start_time&end_time=$end_time"; $file = strtolower(file_get_contents('hands.html')); preg_match_all('|"north">(?P<north>.*)</td>(.*)"south">(?P<south>.*)</td>(.*)"east">(?P<east>.*)</td>(.*)"west">(?P<west>.*)</td>|Umxis', $file, $all_players); foreach($all_players as $k=>$v){if(is_int($k))unset($all_players[$k]);} preg_match_all('|<td\sclass="numhands">(?P<imp_hands>.*)</td>(.*)IMPs\sAverage(.*)<td\sclass="(neg)?score">(?P<average>.*)</td>|Umxis',$file,$results_imp); preg_match_all('|>MPs\sAverage(.*)<td\sclass="(neg)?score">(?P<mps>.*)</td>\s*<td\sclass="numhands">(?P<mp_hands>.*)</td>|Umxis',$file,$results_mp); if(!isset($results_imp['average'][0])) $results_imp['average'][0]='No data found'; if(!isset($results_mp['mps'][0])) $results_mp['mps'][0]='No data found'; if(!isset($results_imp['imp_hands'][0])) $results_imp['imp_hands'][0]=0; if(!isset($results_mp['mp_hands'][0])) $results_mp['mp_hands'][0]=0; $name_list = $all_players['north']+ $all_players['south']+ $all_players['east']+ $all_players['west']; echo count($name_list); $sql4 = "SELECT * FROM players WHERE nickname IN ('".implode("','",$name_list)."')"; if($res = qq($sql4)){ while($r = mysql_fetch_assoc($res)){ $tmp = total_score($r['imp_no_hands'], $r['mp_no_hands'], $r['imp_avg'], $r['mp_avg']); $tmp1= $r['nickname']; array_push($players_withdata, $tmp1); $kvarray[$tmp1] = $tmp; } }else{ error_log("Puko u prvom bloku\n sql $sql4\nError: ".mysql_error()); $error=true; } $sql5 = "SELECT * FROM players,protected WHERE nickname IN ('".implode("','",$name_list)."') AND players.id=protected.id"; if($res5 = qq($sql5)){ while($r5 = mysql_fetch_assoc($res5)){ // echo $r5['nickname'].' -------------- '.$r5['level'].'<br />'; $tmp1= $r5['nickname']; switch ($r5['level']){ case '11': $kvarray[$tmp1] = ($kvarray[$tmp1]>2)?$kvarray[$tmp1]:2; break; case '10': $kvarray[$tmp1] = ($kvarray[$tmp1]>3)?$kvarray[$tmp1]:3; break; case '9': $kvarray[$tmp1] = ($kvarray[$tmp1]>1)?$kvarray[$tmp1]:1; break; case '8': $kvarray[$tmp1] = ($kvarray[$tmp1]>0.5)?$kvarray[$tmp1]:0.5; break; } } }else{ error_log("Puko u drugom bloku\n sql $sql5\nError: ".mysql_error()); $error=true; } $imp_no_hands = $results_imp['imp_hands'][0]; $mp_no_hands = $results_mp['mp_hands'][0]; $total_hands = (($imp_no_hands + $mp_no_hands)==0)?1:($imp_no_hands + $mp_no_hands); $imp_avg = $results_imp['average'][0]; $mp_avg = $results_mp['mps'][0]; if($imp_avg=='No data found') { $imp_avg_fordb = 1288; }else{ $imp_avg_fordb = $imp_avg; } if($mp_avg=='No data found') { $mp_avg_fordb = 1288; }else{ $mp_avg_fordb = $mp_avg; } $cum_correction = 0; for ($k= 0; $k<= $total_hands-1; $k++) { if (isset($all_players['north'][$k]) && strtolower($all_players['north'][$k])==$player){ $me = $all_players['north'][$k]; $partner = $all_players['south'][$k]; $opp1 = $all_players['east'][$k]; $opp2 = $all_players['west'][$k]; }elseif (isset($all_players['south'][$k]) && strtolower($all_players['south'][$k])==$player){ $me = $all_players['south'][$k]; $partner = $all_players['north'][$k]; $opp1 = $all_players['east'][$k]; $opp2 = $all_players['west'][$k]; }elseif (isset($all_players['east'][$k]) && strtolower($all_players['east'][$k])==$player){ $me = $all_players['east'][$k]; $partner = $all_players['west'][$k]; $opp1 = $all_players['north'][$k]; $opp2 = $all_players['south'][$k]; }elseif (isset($all_players['west'][$k]) && strtolower($all_players['west'][$k])==$player){ $me = $all_players['west'][$k]; $partner = $all_players['east'][$k]; $opp1 = $all_players['north'][$k]; $opp2 = $all_players['south'][$k]; }else{ $partner = 'und'; } if($partner!=='und'){ if (!isset($kvarray[$opp1])){ $kvarray[$opp1]=0; } if (!isset($kvarray[$opp2])){ $kvarray[$opp2]=0; } if (!isset($kvarray[$partner])){ $kvarray[$partner]=0; } if($kvarray[$opp1]==0){$j++;} if($kvarray[$opp2]==0){$j++;} if($kvarray[$partner]==0){$j++;} $correction = ($kvarray[$opp1]+$kvarray[$opp2]-$kvarray[$partner]); $cum_correction += $correction; } } $jj = $total_hands*3-$j; $total_correction = number_format(($cum_correction/$jj),2); $total_score = total_score($imp_no_hands, $mp_no_hands, $imp_avg, $mp_avg, $total_correction); $pure_score = $total_score - $total_correction; if($total_score<=-5.00){ $level = 0; }elseif($total_score<=-4.20){ $level = 1; }elseif($total_score<=-3.40){ $level = 2; }elseif($total_score<=-2.50){ $level = 3; }elseif($total_score<=-1.39){ $level = 4; }elseif($total_score<=-1.10){ $level = 51; }elseif($total_score<=-0.85){ $level = 5; }elseif($total_score<=-0.61){ $level = 52; }elseif($total_score<=-0.35){ $level = 61; }elseif($total_score<=-0.15){ $level = 6; }elseif($total_score<=0.00){ $level = 62; }elseif($total_score<=0.20){ $level = 71; }elseif($total_score<=0.40){ $level = 7; }elseif($total_score<=0.61){ $level = 72; }elseif($total_score<=0.85){ $level = 81; }elseif($total_score<=1.15){ $level = 8; }elseif($total_score<=1.40){ $level = 82; }elseif($total_score>1.40){ $level = 9; } $sql_protected = "SELECT protected.level FROM players, protected WHERE players.nickname='{$player}' AND players.id=protected.id LIMIT 1"; if($res = qq($sql_protected)){ if(mysql_num_rows($res)>0){ while($r = mysql_fetch_assoc($res)){ if ($level < $r['level']){ $norating = 1; $level = $r['level']; } } } }else{ error_log("Puko u trecem bloku\n sql $sql_protected\nError: ".mysql_error()); $error=true; } $rating = intval(1300*tanh(2*$total_score/3)+1600); if(($imp_no_hands==0)&&($mp_no_hands==0)){ echo '<p class="centertext">No data found for player '.str_replace(' ',' ',$player).'</p>'; }else{ if($total_hands<200){ echo '<p class="centertext">Not enough hands played last month.<br />This rating is provisional.</p>'; } if($investigation==1){ echo '<p class="centertext">This player is under investigation...</p>'; } if($investigation==2){ echo '<p class="centertext">We strongly believe this player is a</p>'; } echo '<table id="skill_level">'; echo '<tr><td id="skill" '; switch ($level) { case '0': echo 'class="skill_lost">Lost</td></tr>'; break; case '1': echo 'class="skill_lost">Novice--</td></tr>'; break; case '2': echo 'class="skill_lost">Novice-</td></tr>'; break; case '3': echo 'class="skill_novice">Novice</td></tr>'; break; case '4': echo 'class="skill_nov">Novice+</td></tr>'; break; case '5': echo 'class="skill_beg">Beginner</td></tr>'; break; case '51': echo 'class="skill_beg">Beginner-</td></tr>'; break; case '52': echo 'class="skill_beg">Beginner+</td></tr>'; break; case '6': echo 'class="skill_int long">Intermediate</td></tr>'; break; case '61': echo 'class="skill_int long">Intermediate-</td></tr>'; break; case '62': echo 'class="skill_int long">Intermediate+</td></tr>'; break; case '7': echo 'class="skill_adv">Advanced</td></tr>'; break; case '71': echo 'class="skill_adv">Advanced-</td></tr>'; break; case '72': echo 'class="skill_adv">Advanced+</td></tr>'; break; case '8': echo 'class="skill_exp">Expert</td></tr>'; break; case '81': echo 'class="skill_exp">Expert-</td></tr>'; break; case '82': echo 'class="skill_exp">Expert+</td></tr>'; break; case '9': echo 'class="skill_world">World Class</td></tr>'; break; case '10': echo 'class="skill_cheater">♣ Cheater ♣</td></tr>'; $norating=1; break; case '11': echo 'class="skill_pro long">♦ Professional ♦</td></tr>'; $norating=1; break; default: break; } echo '</table> <table id="player_stat"> <tr><th>Nickname:</th><td>'.str_replace(' ',' ',$player).'</td></tr> <tr><th>IMP Average:</th><td>'.$imp_avg.'</td></tr> <tr><th>MP Average:</th><td>'.$mp_avg.'</td></tr> <tr><th>Number of IMP hands:</th><td>'.$imp_no_hands.'</td></tr> <tr><th>Number of MP hands:</th><td>'.$mp_no_hands.'</td></tr> <tr><th>Total hands:</th><td>'.$total_hands.'</td></tr> <tr><th>Score without adjustment:</th><td>'.$pure_score.'</td></tr> <tr><th>Adjustment:</th><td>'.$total_correction.'</td></tr> <tr><th>Total score:</th><td>'.$total_score.'</td></tr>'; if ($norating==0){ echo '<tr><th>Rating:</th><td>'.$rating.'</td></tr>'; } if ($level==10){ echo '<tr class="topborder"><td colspan="2">Yes, we know who is cheating on BBO...</td></tr> <tr><td colspan="2">Please don\'t do that anymore.</td></tr>'; } echo '</table>'; ##Upisuje u bazu ako nema nijedan rezultat $sql_new = "SELECT * FROM players WHERE players.nickname='{$player}'"; $sql_new1 = "INSERT INTO players VALUES ('NULL','{$player}','{$imp_avg_fordb}','{$mp_avg_fordb}','{$imp_no_hands}','{$mp_no_hands}')"; if($res7 = qq($sql_new)){ if(mysql_num_rows($res7)==0){ qq($sql_new1); } } } $sql_all_entries = "INSERT INTO all_entries VALUES ('NULL','{$player}','{$imp_avg_fordb}','{$mp_avg_fordb}','{$imp_no_hands}','{$mp_no_hands}','{$pure_score}','{$total_correction}','{$total_score}','{$rating}',NOW())"; qq($sql_all_entries); } } ?> </div> </div> </article> <footer> </footer> </body> </html> <?php if(isset($_POST['submit'])){ // $tmp=ob_get_contents(); // ob_end_clean(); // echo $tmp; // if(!$error)file_put_contents("cache/xxx-$name-xxx.htm",$tmp); } |