За последние 24 часа нас посетили 55498 программистов и 1793 робота. Сейчас ищут 847 программистов ...

Оптимизация кода php+mysql

Тема в разделе "PHP для новичков", создана пользователем lxxnutsxxl, 9 янв 2014.

  1. lxxnutsxxl

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

    С нами с:
    9 янв 2014
    Сообщения:
    5
    Симпатии:
    1
    Здрасте!
    Проблема вот в чем - хостинг пишет что потребляю много ресурсов!
    На Cron повесил с десяток php скриптов заходящих в базу и обновляющих строки!
    Вопрос вот в чем можно ли как то оптимизировать код либо заменить альтернативным, заранее спасибо!
    Вот сам код:
    Код (Text):
    1. <?php
    2.     $dbhost='dbhost';
    3.     $database='database';
    4.     $dbuser='dbuser';
    5.     $dbpswd='dbpswd';
    6.  
    7.     $dbh = mysql_connect($dbhost, $dbuser, $dbpswd) or die("Не могу соединиться с MySQL.");
    8.     mysql_select_db($database) or die("Не могу подключиться к базе.");  
    9.    
    10.     function checkOnline($stream)
    11.     {
    12.     $ident = $stream['code'];
    13.     $service = $stream['service'];
    14.     $link = "http://api.justin.tv/api/stream/list.json?channel=".$ident;
    15.     $json = file_get_contents($link);
    16.     $exist = strpos($json, 'name');
    17.     $json_file = @file_get_contents("http://api.justin.tv/api/stream/list.json?channel=".$ident, 0, null, null);
    18.     $json_array = json_decode($json_file, true);
    19.     $obs        = $json_array[0]['channel_count'];      
    20.     if ($exist)
    21.     {
    22.         $query = "UPDATE streams_new SET state = 'ONLINE', obs = '$obs' WHERE id = '".$stream['id']."'";
    23.         mysql_query($query);
    24.         echo ($stream['PLAYER']."ONLINE: $link | $obs <br>");
    25.     }
    26.     else
    27.     {
    28.         $query = "UPDATE streams_new SET state = 'OFFLINE', obs = '0' WHERE id = '".$stream['id']."'";
    29.         mysql_query($query);
    30.         echo ($stream['player']."OFFLINE: $link<br>");      
    31.     }      
    32.     }
    33.     $query = "SELECT * FROM streams_new WHERE (game = 'CSGO') ORDER BY id ASC";
    34.     $result = mysql_query($query);
    35.      
    36.     while  ( ($stream = mysql_fetch_array($result)))
    37.         {
    38.             checkOnline($stream);
    39.         }
    40.     mysql_close($dbh);
    41. ?>
    З.Ы.: Так же прошу глянуть код, работающий с той-же базой - может его стоит подправить!

    Код (Text):
    1. <?php
    2. function generatePreviewPicture($ident, $service)
    3. {
    4.     $link = "http://static-cdn.jtvnw.net/previews/live_user_".$ident."-300x150.jpg";
    5.     return $link;    
    6. }
    7. function FullStreamLayout($stream, $counter)
    8. {
    9.     if ($stream['featured'] == 1)
    10.     {
    11.         $streamer = "<font color='#ed1b24'>".$stream['player']."</font>";  
    12.     }
    13.     else
    14.     {
    15.         $streamer = $stream['player'];
    16.     }  
    17.     $service = $stream['service'];
    18.     $game = $stream['game'];
    19.     $image = generatePreviewPicture($stream['code'],$service);
    20.     $sid = $stream['id'];
    21.     $code = $stream['code'];
    22.     $obs = $stream['obs'];
    23.     $des = $stream['description'];
    24.    
    25.     $layout = "
    26.                 <td style=\"padding: 5px 5px 15px 5px ;\">
    27.                 <div class=\"t3-module module black  masonry-brick\">  
    28.                 <div class=\"module-inner\">
    29.                
    30.                 <div class=\"content-slidenews\">
    31.                 <a class=\"ja-title\" href='".$_SERVER['REQUEST_URI']."?streamer=$code'><h3 style=\"color: #fff; font-family: 'novecento_wide_lightbold',sans-serif; font-size: 15px;\"><center>$streamer</center></span></h3></a>
    32.                 <a class=\"ja-title\" href='".$_SERVER['REQUEST_URI']."?streamer=$code'>
    33.                
    34.                 <img src=\"$image\" alt=\"\" ></a><br>
    35.                 <a class=\"readon\" href='".$_SERVER['REQUEST_URI']."?streamer=$code'><center><h4 class=\"module-title \"><span>Смотреть стрим</span> </h4></center></a>
    36.                 </div></div></div></td>";
    37.    
    38.     echo ($layout);
    39.    
    40.      
    41. }
    42. $dbhost='localhost';
    43. $database='stream';
    44. $dbuser='stream';
    45. $dbpswd='stream';
    46. $postto = $_SERVER['REQUEST_URI'];
    47. $ssilka = $_SERVER['PHP_SELF'];
    48. mysql_connect($dbhost,$dbuser,$dbpswd) OR DIE("Не могу создать соединение ");
    49. mysql_select_db($database) or die(mysql_error());
    50. if(isset($_GET['streamer']))
    51. {
    52.     $id = $_GET['streamer'];
    53.    
    54.     $query = "SELECT * FROM streams_new where code = '$id'";
    55.     $res = mysql_query($query) or die(mysql_error());
    56.     $number = mysql_num_rows($res);
    57.    
    58.     if ($number == 0)
    59.     {
    60.       echo "<p>Стрмеров нет</p>";
    61.     }
    62.     else
    63.     {
    64.       while ($row=mysql_fetch_array($res))
    65.       {
    66.     $service = $row['service'];
    67.     $ident = $row['code'];
    68.     $name = $row['player'];
    69.     $desc = $row['description'];
    70.    
    71.     $vk_id = $row['vk'];
    72.     $steam_id = $row['steam'];
    73.     $facebook_id = $row['facebook'];
    74.     $twitter_id = $row['twitter'];
    75.     $youtube_id = $row['youtube'];
    76.     $reclama = "<p style=\"padding-top:100px;\"><center><p style=\"border: 1px solid #0B1216;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>
    77. <!-- dota2.gamestreamtv.ru - на странице стримеров -->
    78. <ins class=\"adsbygoogle\"
    79.      style=\"display:inline-block;width:468px;height:60px\"
    80.      data-ad-client=\"ca-pub-9974938238086471\"
    81.      data-ad-slot=\"2553155631\"></ins>
    82. <script>
    83. (adsbygoogle = window.adsbygoogle || []).push({});
    84. </script></p></center></p>";
    85.    
    86.     if (empty($vk_id)){
    87.     echo  "";
    88.     }
    89.     else {
    90.     $vk = "<li><a href=\"http://vk.com/$vk_id\"><i>1</i>Вконтакте</a></li>";
    91.    
    92.     }
    93.    
    94.         if (empty($vk_id)){
    95.     echo  "";
    96.     }
    97.     else {
    98.     $vk = "<li><a href=\"http://vk.com/$vk_id\" target=\"_blank\"><i><img src=\"/images/icon_stream/vk.png\"></i>Вконтакте</a></li>";
    99.    
    100.     }
    101.    
    102.         if (empty($steam_id)){
    103.     echo  "";
    104.     }
    105.     else {
    106.     $steam = "<li><a href=\"http://steamcommunity.com/id/$steam_id\" target=\"_blank\"><i><img src=\"/images/icon_stream/steam.png\"></i>Steam</a></li>";
    107.    
    108.     }
    109.         if (empty($facebook_id)){
    110.     echo  "";
    111.     }
    112.     else {
    113.     $facebook = "<li><a href=\"https://www.facebook.com/$facebook_id\" target=\"_blank\"><i><img src=\"/images/icon_stream/facebook.png\"></i>Facebook</a></li>";
    114.    
    115.     }
    116.         if (empty($twitter_id)){
    117.     echo  "";
    118.     }
    119.     else {
    120.     $twitter = "<li><a href=\"https://twitter.com/$twitter_id\" target=\"_blank\"><i><img src=\"/images/icon_stream/twitter.png\"></i>Twitter</a></li>";
    121.    
    122.     }
    123.         if (empty($youtube_id)){
    124.     echo  "";
    125.     }
    126.     else {
    127.     $youtube = "<li><a href=\"http://www.youtube.com/user/$youtube_id\" target=\"_blank\"><i><img src=\"/images/icon_stream/youtube.png\"></i>YouTube</a></li>";
    128.    
    129.     }
    130.    
    131.     if ($service == "twitch")
    132.     {
    133.         $player = "<object type=\"application/x-shockwave-flash\" height=\"399\" width=\"500\" id=\"live_embed_player_flash\" data=\"http://ru.twitch.tv/widgets/live_embed_player.swf?channel=$ident\" bgcolor=\"#000000\"><param name=\"allowFullScreen\" value=\"true\" /><param name=\"allowScriptAccess\" value=\"always\" /><param name=\"allowNetworking\" value=\"all\" /><param name=\"movie\" value=\"http://ru.twitch.tv/widgets/live_embed_player.swf\" /><param name=\"flashvars\" value=\"hostname=ru.twitch.tv&channel=$ident&auto_play=true&start_volume=25\" /></object>";
    134.         $chat = "<iframe frameborder=\"0\" scrolling=\"no\" id=\"chat_embed\" src=\"http://twitch.tv/chat/embed?channel=$ident&amp;popout_chat=true\" height=\"350\" width=\"300\"></iframe>";
    135.     }
    136.     echo ("<h3 id=\"stream_name\"><span><center>Стрим от $name</center></span></h3>");
    137.     echo("<center><table style=\"width: 852px; morgin: 0 auto; \">
    138. <tr>
    139. <td style=\"width: 500px; height:40px; float: left; border-bottom: 1px solid #ddd;\"><center>
    140.  
    141. <div class=\"share42init\"></div>
    142. <script type=\"text/javascript\" src=\"/share42/share42.js\"></script>
    143. </center></td>
    144. <td style=\"width: 300px; height:40px; float: right; border-bottom: 1px solid #ddd;\"><center><a href=\"/dobavit-svoj-strim\" target=\"_blank\" class=\"myButton\">Добавить свой стрим на сайт</a></center></td>
    145. </tr>
    146. </table></center> ");
    147.     echo("<div class=\"wrapper\"><div class=\"player\">$player</div>");
    148.     echo("<div class=\"chat\">
    149.  <div class=\"section\">
    150.     <ul class=\"tabs\">
    151.         <li class=\"current\">Steam</li>
    152.         <li>Vkontakte</li>
    153.         <!-- <li>3 tabs</li>  -->
    154.     </ul>
    155.     <div class=\"box visible\">
    156.         <p>$chat</p>
    157.     </div>
    158.     <div class=\"box\">
    159.         <p><div id=\"vk_comments\"></div></p>
    160.     </div>
    161.    
    162.  <!-- <div class=\"box\">
    163.         <p>3 tabs</p>
    164.     </div> -->
    165. </div></div>");
    166.    
    167.     echo ("<div class=\"wrapper\"><p></p>");
    168.     echo("<p><a href=\"/translyatsii?streamer=$ident\"><h4>Onlie stream by $name</h4></a></p><div class=\"desc_stream\"><p>$desc</p></p>$reclama</div>");
    169.     echo("<div class=\"desc_info\"><h3>Контакты Стримера:</h3>
    170.      
    171.      
    172.     <ul class=\"dropdown\">
    173.         $vk
    174.         $steam
    175.         $faceBook
    176.         $twitter
    177.         $youtube
    178.     </ul>
    179.  
    180. </div></div>");
    181.       }  
    182.     }
    183. }
    184.  
    185. else
    186. {  
    187.     $result = mysql_query('SELECT COUNT(id) FROM streams_new');
    188.     $count = mysql_result($result,0);
    189.     if ($count == NULL)
    190.     {
    191.         echo ("Стримы не найдены");
    192.     }
    193.    
    194.     $counter = 0;
    195.     echo ("<table align = \"center\"  border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr>");
    196.    
    197.     $query2 = "SELECT * FROM streams_new WHERE (state = 'ONLINE' and game = 'Dota 2') ORDER BY OBS DESC, featured DESC";
    198.     $result2 = mysql_query($query2);
    199.     while  ($stream = mysql_fetch_array($result2))
    200.     {
    201.         $counter++;
    202.         FullStreamLayout($stream, $counter);
    203.         if ($counter % 4 == 0)
    204.         {
    205.             echo ("</tr><tr>");
    206.         }
    207.     }
    208.     echo ("</tr></table>");
    209. }
    210.  
    211. ?>
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Каких именно? Может у вас просто дисковое пространство заканчивается ;) И какую цель вы преследуете, запуская те самые десяток скриптов через Cron? Неужели отслеживаете каждую секунду активность юзера на сайте? Нагружающих функций не вижу, сложность ваших запросов - из разряда "Учимся выводить Hello, world!"... Остается одно - запускать эти скрипты с бешенной периодичностью. Если все-таки в этом есть потребность, то почему бы не взять себе VPS/VDS, а не пользоваться шаред-хостингом и не исключаю, что шаровым, аля hostinger.ru
     
  3. lxxnutsxxl

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

    С нами с:
    9 янв 2014
    Сообщения:
    5
    Симпатии:
    1
    Дисковое пространство в порядке!
    Пишут что использую больше 10% ЦПУ
    Крон проверяет каждые 5 минут онлайн трансляция у пользователя или нет, хостинг платный и нормальный!
    Был бы рад помощи в виде "красивого кода" =) заранее спасибо))
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Я думаю, что тут не в оптимизации или красоте кода дело, а в неправильной организации действий для конкретных задач. И если мои подозрения оправданы, то вот тут надо копать глубоко и не только в той части кода, которую вы показали, а всё в целом.
     
  5. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Скрипт конечно <матное слово>, похоже там весь сайт такой ;(
    Пишите новый, что сказать или закажите, чтобы за вас написали.
    Проблема скорее в целом "в неправильной организации и концепции скриптов".
    Проверьте скорость соединения, запросов и сколько они жрут памяти.
    Уберите весь сайт, сделайте один файл и напишите в нем скрипт, и произведите замеры еще раз, по запускайте, потестите...
    Только чательные тесты, дадут очевидный результат и помогут найти причину.
     
  6. lxxnutsxxl

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

    С нами с:
    9 янв 2014
    Сообщения:
    5
    Симпатии:
    1
    Я как бы у Вас помощи и прошу!
    Смысл работы - есть файл - добавления данных в базу, потом файл - проверяющий данные на онлайн (1 скрипт в теме), и третий - который выводит данные - это 2 в теме код!
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    А вы попробуйте другой написать скрипт и на крон повесить, чтобы он допустим записывал строчку в файл.
    Просто добавляя в конец.
    И посмотрите будет ли нагрузка.