За последние 24 часа нас посетили 17400 программистов и 1605 роботов. Сейчас ищут 955 программистов ...

Помогите оптимизировать данный код

Тема в разделе "Решения, алгоритмы", создана пользователем pavluxa09, 17 июл 2009.

  1. pavluxa09

    pavluxa09 Активный пользователь

    С нами с:
    17 июл 2009
    Сообщения:
    9
    Симпатии:
    0
    Здравствуйте. Помогите оптимизировать данный код, чтоб брал меньше ресурсов и работал быстрее. Заранее спасибо.
    Код (Text):
    1.  
    2. <?php
    3. if( isset($_GET['rid']) and intval($_GET['rid'])>0 )
    4. {
    5.     include ("../kernel/connect.ker.php");
    6.     function Ip2Country( $ip )
    7.     {
    8.         $sock = fsockopen ("whois.ripe.net",43,$errno,$errstr);
    9.         if (!$sock)
    10.         {
    11.           echo("$errno($errstr)");
    12.           return;
    13.         }
    14.         else
    15.         {
    16.           fputs ($sock, $ip."\r\n");
    17.           while (!feof($sock))
    18.           {
    19.             $text = fgets ($sock,128);
    20.             if( substr($text,0,8)=="country:" )
    21.             {
    22.                 $return = substr($text, -3, 2);
    23.             }
    24.           }
    25.         }
    26.         fclose ($sock);
    27.         unset($sock, $errno, $errstr, $text);
    28.         return $return;
    29.     }
    30.     $user['rid'] = intval($_GET['rid']);
    31.     $user['ip'] = $_SERVER['REMOTE_ADDR'];
    32.     $user['referer'] = $_SERVER['HTTP_REFERER'];
    33.     if( strlen($user['referer'])>10 )
    34.     {
    35.         if( Ip2Country( $user['ip'] )=="RU" )
    36.         {
    37.             $q = mysql_query("SELECT COUNT(*) as count FROM `qop_iframepay` WHERE `ip` = '".$user['ip']."'");
    38.             if( $q['count']==0 )
    39.             {
    40.                 mysql_query("INSERT INTO `qop_iframepay` ( `rid` , `date` , `ip` , `referer` , `status` ) VALUES ('".$user['rid']."', NOW(), '".$user['ip']."', '".$user['referer']."', 'NEW');");
    41.             }
    42.         }
    43.     }
    44.     $all_vars = get_defined_vars();
    45.     foreach ($all_vars as $key => $var)
    46.     {
    47.         unset($$key);
    48.     }
    49.     unset($all_vars, $key, $var);
    50. }
    51. ?>
     
  2. kas1e

    kas1e Активный пользователь

    С нами с:
    6 апр 2009
    Сообщения:
    280
    Симпатии:
    0
    PHP:
    1. <?php
    2. // (int) работает в среднем на 35% быстрее, чем intval()
    3. if(isset($_GET['rid']) && (int)$_GET['rid'] > 0)
    4. {
    5.     // Не надо привязок. А если скрипт переложить в другое место?
    6.     include($_SERVER["DOCUMENT_ROOT"] . "/kernel/connect.ker.php");  
    7.     function Ip2Country( $ip )
    8.     {
    9.         $sock = fsockopen ("whois.ripe.net", 43, $errno, $errstr);
    10.         if(!$sock)
    11.         {
    12.           echo $errno . '(' . $errstr . ')';
    13.           // Ретурны ведь не для красоты. Ошибка - значит возвращаем, что положено.
    14.           return false;
    15.         }
    16.         else
    17.         {
    18.             fputs($sock, $ip . "\r\n");
    19.             while(!feof($sock))if(substr(fgets($sock, 128), 0, 8) == 'country:')$return = substr($text, -3, 2);
    20.         }
    21.         fclose($sock);
    22.         unset($sock, $errno, $errstr, $text);
    23.         return $return;
    24.     }  
    25.     // Иногда отсекать числа меньше нуля - полезно. А заодно автоматом приводить к int'у
    26.     $user['rid']     = abs($_GET['rid']);
    27.     $user['ip']      = $_SERVER['REMOTE_ADDR'];
    28.     $user['referer'] = $_SERVER['HTTP_REFERER'];
    29.     // Зачем городить кучу ифов, если можно сделать один?
    30.     if(strlen($user['referer']) > 10 && Ip2Country($user['ip']) == 'RU')
    31.     {
    32.         $q = mysql_query("SELECT COUNT(*) AS count FROM `qop_iframepay` WHERE `ip` = '".$user['ip']."'");
    33.         // Тоже вариант :)
    34.         if(!$q['count'])
    35.         {
    36.             mysql_query("INSERT INTO `qop_iframepay` ( `rid` , `date` , `ip` , `referer` , `status` )
    37.                          VALUES ('".$user['rid']."', NOW(), '".$user['ip']."', '".$user['referer']."', 'NEW');");
    38.         }
    39.     }
    40.     $all_vars = get_defined_vars();
    41.     // Обычно придерживаюсь скобок ВСЕГДА, но в итоговом можно кое-где и пренебречь
    42.     foreach($all_vars as $key => $var)unset($$key);
    43.     unset($all_vars, $key, $var);
    44. }
    45. ?>
    На скорую руку, не тестировал. Да и переписывать не пытался что-то по другому быстрее.