Здрасте! Проблема вот в чем - хостинг пишет что потребляю много ресурсов! На Cron повесил с десяток php скриптов заходящих в базу и обновляющих строки! Вопрос вот в чем можно ли как то оптимизировать код либо заменить альтернативным, заранее спасибо! Вот сам код: Код (Text): <?php $dbhost='dbhost'; $database='database'; $dbuser='dbuser'; $dbpswd='dbpswd'; $dbh = mysql_connect($dbhost, $dbuser, $dbpswd) or die("Не могу соединиться с MySQL."); mysql_select_db($database) or die("Не могу подключиться к базе."); function checkOnline($stream) { $ident = $stream['code']; $service = $stream['service']; $link = "http://api.justin.tv/api/stream/list.json?channel=".$ident; $json = file_get_contents($link); $exist = strpos($json, 'name'); $json_file = @file_get_contents("http://api.justin.tv/api/stream/list.json?channel=".$ident, 0, null, null); $json_array = json_decode($json_file, true); $obs = $json_array[0]['channel_count']; if ($exist) { $query = "UPDATE streams_new SET state = 'ONLINE', obs = '$obs' WHERE id = '".$stream['id']."'"; mysql_query($query); echo ($stream['PLAYER']."ONLINE: $link | $obs <br>"); } else { $query = "UPDATE streams_new SET state = 'OFFLINE', obs = '0' WHERE id = '".$stream['id']."'"; mysql_query($query); echo ($stream['player']."OFFLINE: $link<br>"); } } $query = "SELECT * FROM streams_new WHERE (game = 'CSGO') ORDER BY id ASC"; $result = mysql_query($query); while ( ($stream = mysql_fetch_array($result))) { checkOnline($stream); } mysql_close($dbh); ?> З.Ы.: Так же прошу глянуть код, работающий с той-же базой - может его стоит подправить! Код (Text): <?php function generatePreviewPicture($ident, $service) { $link = "http://static-cdn.jtvnw.net/previews/live_user_".$ident."-300x150.jpg"; return $link; } function FullStreamLayout($stream, $counter) { if ($stream['featured'] == 1) { $streamer = "<font color='#ed1b24'>".$stream['player']."</font>"; } else { $streamer = $stream['player']; } $service = $stream['service']; $game = $stream['game']; $image = generatePreviewPicture($stream['code'],$service); $sid = $stream['id']; $code = $stream['code']; $obs = $stream['obs']; $des = $stream['description']; $layout = " <td style=\"padding: 5px 5px 15px 5px ;\"> <div class=\"t3-module module black masonry-brick\"> <div class=\"module-inner\"> <div class=\"content-slidenews\"> <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> <a class=\"ja-title\" href='".$_SERVER['REQUEST_URI']."?streamer=$code'> <img src=\"$image\" alt=\"\" ></a><br> <a class=\"readon\" href='".$_SERVER['REQUEST_URI']."?streamer=$code'><center><h4 class=\"module-title \"><span>Смотреть стрим</span> </h4></center></a> </div></div></div></td>"; echo ($layout); } $dbhost='localhost'; $database='stream'; $dbuser='stream'; $dbpswd='stream'; $postto = $_SERVER['REQUEST_URI']; $ssilka = $_SERVER['PHP_SELF']; mysql_connect($dbhost,$dbuser,$dbpswd) OR DIE("Не могу создать соединение "); mysql_select_db($database) or die(mysql_error()); if(isset($_GET['streamer'])) { $id = $_GET['streamer']; $query = "SELECT * FROM streams_new where code = '$id'"; $res = mysql_query($query) or die(mysql_error()); $number = mysql_num_rows($res); if ($number == 0) { echo "<p>Стрмеров нет</p>"; } else { while ($row=mysql_fetch_array($res)) { $service = $row['service']; $ident = $row['code']; $name = $row['player']; $desc = $row['description']; $vk_id = $row['vk']; $steam_id = $row['steam']; $facebook_id = $row['facebook']; $twitter_id = $row['twitter']; $youtube_id = $row['youtube']; $reclama = "<p style=\"padding-top:100px;\"><center><p style=\"border: 1px solid #0B1216;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script> <!-- dota2.gamestreamtv.ru - на странице стримеров --> <ins class=\"adsbygoogle\" style=\"display:inline-block;width:468px;height:60px\" data-ad-client=\"ca-pub-9974938238086471\" data-ad-slot=\"2553155631\"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></p></center></p>"; if (empty($vk_id)){ echo ""; } else { $vk = "<li><a href=\"http://vk.com/$vk_id\"><i>1</i>Вконтакте</a></li>"; } if (empty($vk_id)){ echo ""; } else { $vk = "<li><a href=\"http://vk.com/$vk_id\" target=\"_blank\"><i><img src=\"/images/icon_stream/vk.png\"></i>Вконтакте</a></li>"; } if (empty($steam_id)){ echo ""; } else { $steam = "<li><a href=\"http://steamcommunity.com/id/$steam_id\" target=\"_blank\"><i><img src=\"/images/icon_stream/steam.png\"></i>Steam</a></li>"; } if (empty($facebook_id)){ echo ""; } else { $facebook = "<li><a href=\"https://www.facebook.com/$facebook_id\" target=\"_blank\"><i><img src=\"/images/icon_stream/facebook.png\"></i>Facebook</a></li>"; } if (empty($twitter_id)){ echo ""; } else { $twitter = "<li><a href=\"https://twitter.com/$twitter_id\" target=\"_blank\"><i><img src=\"/images/icon_stream/twitter.png\"></i>Twitter</a></li>"; } if (empty($youtube_id)){ echo ""; } else { $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>"; } if ($service == "twitch") { $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>"; $chat = "<iframe frameborder=\"0\" scrolling=\"no\" id=\"chat_embed\" src=\"http://twitch.tv/chat/embed?channel=$ident&popout_chat=true\" height=\"350\" width=\"300\"></iframe>"; } echo ("<h3 id=\"stream_name\"><span><center>Стрим от $name</center></span></h3>"); echo("<center><table style=\"width: 852px; morgin: 0 auto; \"> <tr> <td style=\"width: 500px; height:40px; float: left; border-bottom: 1px solid #ddd;\"><center> <div class=\"share42init\"></div> <script type=\"text/javascript\" src=\"/share42/share42.js\"></script> </center></td> <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> </tr> </table></center> "); echo("<div class=\"wrapper\"><div class=\"player\">$player</div>"); echo("<div class=\"chat\"> <div class=\"section\"> <ul class=\"tabs\"> <li class=\"current\">Steam</li> <li>Vkontakte</li> <!-- <li>3 tabs</li> --> </ul> <div class=\"box visible\"> <p>$chat</p> </div> <div class=\"box\"> <p><div id=\"vk_comments\"></div></p> </div> <!-- <div class=\"box\"> <p>3 tabs</p> </div> --> </div></div>"); echo ("<div class=\"wrapper\"><p></p>"); 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>"); echo("<div class=\"desc_info\"><h3>Контакты Стримера:</h3> <ul class=\"dropdown\"> $vk $steam $faceBook $twitter $youtube </ul> </div></div>"); } } } else { $result = mysql_query('SELECT COUNT(id) FROM streams_new'); $count = mysql_result($result,0); if ($count == NULL) { echo ("Стримы не найдены"); } $counter = 0; echo ("<table align = \"center\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr>"); $query2 = "SELECT * FROM streams_new WHERE (state = 'ONLINE' and game = 'Dota 2') ORDER BY OBS DESC, featured DESC"; $result2 = mysql_query($query2); while ($stream = mysql_fetch_array($result2)) { $counter++; FullStreamLayout($stream, $counter); if ($counter % 4 == 0) { echo ("</tr><tr>"); } } echo ("</tr></table>"); } ?>
Каких именно? Может у вас просто дисковое пространство заканчивается И какую цель вы преследуете, запуская те самые десяток скриптов через Cron? Неужели отслеживаете каждую секунду активность юзера на сайте? Нагружающих функций не вижу, сложность ваших запросов - из разряда "Учимся выводить Hello, world!"... Остается одно - запускать эти скрипты с бешенной периодичностью. Если все-таки в этом есть потребность, то почему бы не взять себе VPS/VDS, а не пользоваться шаред-хостингом и не исключаю, что шаровым, аля hostinger.ru
Дисковое пространство в порядке! Пишут что использую больше 10% ЦПУ Крон проверяет каждые 5 минут онлайн трансляция у пользователя или нет, хостинг платный и нормальный! Был бы рад помощи в виде "красивого кода" =) заранее спасибо))
Я думаю, что тут не в оптимизации или красоте кода дело, а в неправильной организации действий для конкретных задач. И если мои подозрения оправданы, то вот тут надо копать глубоко и не только в той части кода, которую вы показали, а всё в целом.
Скрипт конечно <матное слово>, похоже там весь сайт такой ;( Пишите новый, что сказать или закажите, чтобы за вас написали. Проблема скорее в целом "в неправильной организации и концепции скриптов". Проверьте скорость соединения, запросов и сколько они жрут памяти. Уберите весь сайт, сделайте один файл и напишите в нем скрипт, и произведите замеры еще раз, по запускайте, потестите... Только чательные тесты, дадут очевидный результат и помогут найти причину.
Я как бы у Вас помощи и прошу! Смысл работы - есть файл - добавления данных в базу, потом файл - проверяющий данные на онлайн (1 скрипт в теме), и третий - который выводит данные - это 2 в теме код!
А вы попробуйте другой написать скрипт и на крон повесить, чтобы он допустим записывал строчку в файл. Просто добавляя в конец. И посмотрите будет ли нагрузка.