Здравствуйте. Помогите оптимизировать данный код, чтоб брал меньше ресурсов и работал быстрее. Заранее спасибо. Код (Text): <?php if( isset($_GET['rid']) and intval($_GET['rid'])>0 ) { include ("../kernel/connect.ker.php"); function Ip2Country( $ip ) { $sock = fsockopen ("whois.ripe.net",43,$errno,$errstr); if (!$sock) { echo("$errno($errstr)"); return; } else { fputs ($sock, $ip."\r\n"); while (!feof($sock)) { $text = fgets ($sock,128); if( substr($text,0,8)=="country:" ) { $return = substr($text, -3, 2); } } } fclose ($sock); unset($sock, $errno, $errstr, $text); return $return; } $user['rid'] = intval($_GET['rid']); $user['ip'] = $_SERVER['REMOTE_ADDR']; $user['referer'] = $_SERVER['HTTP_REFERER']; if( strlen($user['referer'])>10 ) { if( Ip2Country( $user['ip'] )=="RU" ) { $q = mysql_query("SELECT COUNT(*) as count FROM `qop_iframepay` WHERE `ip` = '".$user['ip']."'"); if( $q['count']==0 ) { mysql_query("INSERT INTO `qop_iframepay` ( `rid` , `date` , `ip` , `referer` , `status` ) VALUES ('".$user['rid']."', NOW(), '".$user['ip']."', '".$user['referer']."', 'NEW');"); } } } $all_vars = get_defined_vars(); foreach ($all_vars as $key => $var) { unset($$key); } unset($all_vars, $key, $var); } ?>
PHP: <?php // (int) работает в среднем на 35% быстрее, чем intval() if(isset($_GET['rid']) && (int)$_GET['rid'] > 0) { // Не надо привязок. А если скрипт переложить в другое место? include($_SERVER["DOCUMENT_ROOT"] . "/kernel/connect.ker.php"); function Ip2Country( $ip ) { $sock = fsockopen ("whois.ripe.net", 43, $errno, $errstr); if(!$sock) { echo $errno . '(' . $errstr . ')'; // Ретурны ведь не для красоты. Ошибка - значит возвращаем, что положено. return false; } else { fputs($sock, $ip . "\r\n"); while(!feof($sock))if(substr(fgets($sock, 128), 0, 8) == 'country:')$return = substr($text, -3, 2); } fclose($sock); unset($sock, $errno, $errstr, $text); return $return; } // Иногда отсекать числа меньше нуля - полезно. А заодно автоматом приводить к int'у $user['rid'] = abs($_GET['rid']); $user['ip'] = $_SERVER['REMOTE_ADDR']; $user['referer'] = $_SERVER['HTTP_REFERER']; // Зачем городить кучу ифов, если можно сделать один? if(strlen($user['referer']) > 10 && Ip2Country($user['ip']) == 'RU') { $q = mysql_query("SELECT COUNT(*) AS count FROM `qop_iframepay` WHERE `ip` = '".$user['ip']."'"); // Тоже вариант :) if(!$q['count']) { mysql_query("INSERT INTO `qop_iframepay` ( `rid` , `date` , `ip` , `referer` , `status` ) VALUES ('".$user['rid']."', NOW(), '".$user['ip']."', '".$user['referer']."', 'NEW');"); } } $all_vars = get_defined_vars(); // Обычно придерживаюсь скобок ВСЕГДА, но в итоговом можно кое-где и пренебречь foreach($all_vars as $key => $var)unset($$key); unset($all_vars, $key, $var); } ?> На скорую руку, не тестировал. Да и переписывать не пытался что-то по другому быстрее.