Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как ускорить/оптимизировать код?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
event
Отправлено: 02 Февраля, 2015 - 15:43:17
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Привет.
Ребят, как можно ускорить/оптимизировать этот код?

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.  
  4. $start = microtime(true);
  5.  
  6. require_once("system.php");
  7.  
  8. error_reporting( E_ERROR );
  9.  
  10. $f = fopen("1.txt", "r");
  11.  
  12. $cat = fgets($f);
  13.  
  14. fclose($f);
  15.  
  16. if($cat == 65) {
  17.         die("END!");
  18. }
  19.  
  20. $ccc = get_row_count("links WHERE categoryid = '" . $cat . "'");
  21.  
  22. if($ccc == 0) {
  23.        
  24. $ff= fopen("1.txt",'w');
  25. fputs($ff, $cat + 1);
  26. fclose($ff);
  27.  
  28. die('<meta http-equiv="refresh" content="0;URL=parser.php" />');
  29.  
  30. }
  31.  
  32. $result = $mysqli->query("SELECT * FROM links WHERE categoryid = '" . $cat . "' LIMIT 100") or sqlerr(__FILE__, __LINE__, $mysqli->error);
  33.  
  34. $urls = array();
  35.    while($row = $result->fetch_assoc()) {
  36.         $urls[] = $row['link'];
  37. }
  38.  
  39.  
  40. $multi = curl_multi_init();
  41. $channels = array();
  42.  
  43. foreach ($urls as $url) {
  44.         $url = "http://studopedia.net" . $url;
  45.     $ch = curl_init();
  46.     curl_setopt($ch, CURLOPT_URL, $url);
  47.     curl_setopt($ch, CURLOPT_HEADER, false);
  48.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  49.     curl_multi_add_handle($multi, $ch);
  50.  
  51.     $channels[$url] = $ch;
  52. }
  53.  
  54. $active = null;
  55. do {
  56.     $mrc = curl_multi_exec($multi, $active);
  57. } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  58.  
  59. while ($active && $mrc == CURLM_OK) {
  60.     if (curl_multi_select($multi) == -1) {
  61.         continue;
  62.     }
  63.  
  64.     do {
  65.         $mrc = curl_multi_exec($multi, $active);
  66.     } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  67. }
  68.  
  69. foreach ($channels as $value => $channel ) {   
  70.  
  71. $st = curl_multi_getcontent($channel);
  72. $value = str_replace("http://studopedia.net", "", $value);
  73.  
  74.  
  75. $site = curl_multi_getcontent($channel);
  76.  
  77. preg_match('#<h1>(.+?)</h1>#i', $site, $name);
  78.  
  79. $name = strip_tags($name[1]);
  80.  
  81. $name = iconv("WINDOWS-1251","UTF-8", $name);
  82.  
  83. preg_match("#</noindex>\s+</td></tr></table>(.*?)</center><hr>#si", $site, $tmp);
  84.      
  85. $result = preg_replace('#<noindex.*?</noindex>|<script.*?</script>|<ins.*?</ins>|<!--.*?-->#si', '', $tmp[1]);
  86.      
  87. $text = trim($result);
  88. $text = str_replace("<p>&nbsp;</p>", "", $text);
  89. $text = str_replace("<p>&nbsp;</p>", "", $text);
  90. $text = str_replace("<br>", "", $text);
  91. $text = str_replace("<center>", "", $text);
  92.  
  93. $text = iconv("WINDOWS-1251","UTF-8", $text);
  94.  
  95. preg_match_all('#<img.*src="(.*)".*>#isU', $text, $urlsex);
  96.  
  97. foreach($urlsex[1] as $val) {
  98.         $urlsex_end .= $val . "\n";
  99. }
  100.  
  101. $value = trim($value);
  102.  
  103. $result = $mysqli->query("INSERT INTO texts (name, text, image_urls, categoryid, link) VALUES (" . implode(", ", array_map("sqlesc", array($name, trim($text), trim($urlsex_end), $cat, $value))) . ")") or sqlerr(__FILE__, __LINE__, $mysqli->error);
  104.  
  105. $mysqli->query("DELETE FROM links WHERE link = " . sqlesc(trim($value))) or sqlerr(__FILE__, __LINE__, $mysqli->error);
  106.  
  107. curl_multi_remove_handle($multi, $channel);
  108.  
  109. }
  110.  
  111.  
  112. #echo "Осталось обработать: " . $ccc . " записей " . $cat . " категории.";
  113.  
  114. #echo '<br /><br />Время выполнения скрипта: '.(microtime(true) - $start).' сек.';
  115.  
  116. sleep(1);
  117.  
  118. ?>
  119.  
  120. <meta http-equiv="refresh" content="0;URL=parser.php" />


Может где-то присутен говно-код? и т.д., тыкните что может решать на скорость
 
 Top
RickMan
Отправлено: 02 Февраля, 2015 - 17:14:33
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




http://www.php.su/file_get_contents
http://www.php.su/functions/?file-put-contents

- они кажется работабт быстрее чем fopen + fputs + fclose.
(Добавление)
В таблице links посмотреть является ли ключом categoryid. Для более быстрого поиска.

(Отредактировано автором: 02 Февраля, 2015 - 17:17:56)

 
 Top
event
Отправлено: 03 Февраля, 2015 - 19:28:40
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




RickMan пишет:
В таблице links посмотреть является ли ключом categoryid. Для более быстрого поиска.


А как призначить этот ключ?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB