PHP.SU

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

Страниц (37): В начало « ... 4 5 6 7 [8] 9 10 11 12 ... » В конец

> Найдено сообщений: 542
event Отправлено: 03 Февраля, 2015 - 13:44:35 • Тема: Таблица MySQL • Форум: Вопросы новичков

Ответов: 6
Просмотров: 292
GoDr, все, получилось. Спасибо!

Такой вопрос, как обслуживать базу когда много записей? У меня 400к и никак не могу добавить еще одну ячейку...
event Отправлено: 03 Февраля, 2015 - 00:41:30 • Тема: Таблица MySQL • Форум: Вопросы новичков

Ответов: 6
Просмотров: 292
Мелкий, скрипт сломал.

#144 - Table '.\site\texts' is marked as crashed and last (automatic?) repair failed

Вот ошибка... чего делать....... Растерялся
(Добавление)
GoDr, поставил, подключился. Все функции вижу, а от как отремонтировать?
event Отправлено: 02 Февраля, 2015 - 15:43:17 • Тема: Как ускорить/оптимизировать код? • Форум: Вопросы новичков

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

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" />


Может где-то присутен говно-код? и т.д., тыкните что может решать на скорость
event Отправлено: 01 Февраля, 2015 - 23:06:09 • Тема: Таблица MySQL • Форум: Вопросы новичков

Ответов: 6
Просмотров: 292
Как починить таблицу с 400к записями? А то не хочет она через phpmyadmin чинится (REPAIR TABLE texts)?

Что делать? Какие варианты?
event Отправлено: 31 Января, 2015 - 01:55:29 • Тема: Вопрос • Форум: Вопросы новичков

Ответов: 16
Просмотров: 623
Никера не понял. Не понял
event Отправлено: 30 Января, 2015 - 14:46:22 • Тема: Вопрос • Форум: Вопросы новичков

Ответов: 16
Просмотров: 623
Привет.
Такой вопрос, поставил на самописный сайт визуальный редактор - CKEditor.

Такой вопрос, в базу он записывает html, туда записываю через htmlspecialchars. А как правильно выводить из базы? А то переживаю что какой-то пользователь введет туда javscript. Что подскажите?
event Отправлено: 29 Января, 2015 - 23:56:56 • Тема: Скрипт PHP • Форум: Вопросы новичков

Ответов: 3
Просмотров: 260
короче потестирова скрипт, всю малину портит что юзаю бд очень много.
(Добавление)
KingStar, точно не так, ответ очень-очень быстрый
(Добавление)
Все, сделал. Теперь работает как самолет. Хорошо
event Отправлено: 29 Января, 2015 - 22:52:49 • Тема: Скрипт PHP • Форум: Вопросы новичков

Ответов: 3
Просмотров: 260
Ну что никто не подкажет? Радость
event Отправлено: 29 Января, 2015 - 18:50:16 • Тема: Скрипт PHP • Форум: Вопросы новичков

Ответов: 3
Просмотров: 260
Привет.
Написал скрипт - парсер, на PHP. Парсер на cuRL с многопоточностью. Скриптом доволен, но как-то долго парсит, я думал с многопоточностью будет намного скорее.

Скрипт парсера:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $start = microtime(true);
  4.  
  5.  
  6. $categoryid = $_GET['cat'];
  7.  
  8. if(empty($categoryid)) {
  9.         die("Error Category ID!");
  10. }
  11.  
  12. function get_row_count($table, $suffix = "") {
  13.         global $mysqli;
  14. if ($suffix)
  15.         $suffix = " $suffix";
  16.         ($r = $mysqli->query("SELECT COUNT(*) FROM $table$suffix"));
  17.         ($a = $r->fetch_row());
  18.                 return $a[0];
  19. }
  20.  
  21. function sqlesc($value) {
  22.         global $mysqli;
  23.    if (!is_numeric($value)) {
  24.            $value = "'" . $mysqli->real_escape_string($value) . "'";
  25.    }
  26.    return $value;
  27. }
  28.  
  29. function sqlerr($file = "", $line = "", $error = "") {
  30.                 global $USER;
  31.                
  32.         die("<b>MySQL Error:</b><br /><b>File:</b> ". $file ." <b>Line:</b> ". $line ."<br /><b>Error:</b> ". $error);
  33. }
  34.  
  35. $mysql = array(
  36.         "host" => "localhost",
  37.         "user" => "root",
  38.         "password" => "123456",
  39.         "database" => "site",
  40.         "charset" => "utf8"
  41. );
  42.  
  43. $mysqli = @ new mysqli($mysql['host'], $mysql['user'], $mysql['password'], $mysql['database']);
  44.  
  45. @ $mysqli->query("SET NAMES " . $mysql['charset']);
  46.        
  47.         die("MySQLi connect error: " . mysqli_connect_error());
  48. }
  49.  
  50. $ccc = get_row_count("links WHERE categoryid = '" . $cat . "' AND used='no'");
  51.  
  52. $catnext = $cat + 1;
  53.  
  54. if($cat > 64) {
  55.         die("END!");
  56. }
  57.  
  58. if($ccc == 0) {
  59.         echo '<meta http-equiv="refresh" content="0;URL=3.php?cat=' . $catnext . '" />';
  60.         die;
  61. }
  62.  
  63. $result = $mysqli->query("SELECT * FROM links WHERE used = 'no' AND categoryid = '" . $categoryid . "' LIMIT 5") or sqlerr(__FILE__, __LINE__, $mysqli->error);
  64.  
  65.  
  66. $urls = array();
  67.    while($row = $result->fetch_assoc()) {
  68.         $urls[] = $row['link'];
  69. }
  70.  
  71.  
  72. $multi = curl_multi_init();
  73. $channels = array();
  74.  
  75. foreach ($urls as $url) {
  76.         $url = "http://URL_SITE" . $url;
  77.     $ch = curl_init();
  78.     curl_setopt($ch, CURLOPT_URL, $url);
  79.     curl_setopt($ch, CURLOPT_HEADER, false);
  80.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  81.     curl_multi_add_handle($multi, $ch);
  82.  
  83.     $channels[$url] = $ch;
  84. }
  85.  
  86. $active = null;
  87. do {
  88.     $mrc = curl_multi_exec($multi, $active);
  89. } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  90.  
  91. while ($active && $mrc == CURLM_OK) {
  92.     if (curl_multi_select($multi) == -1) {
  93.         continue;
  94.     }
  95.  
  96.     do {
  97.         $mrc = curl_multi_exec($multi, $active);
  98.     } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  99. }
  100.  
  101. foreach ($channels as $value => $channel ) {   
  102.  
  103. $site = curl_multi_getcontent($channel);
  104.  
  105. preg_match('#<h1>(.+?)</h1>#i', $site, $name);
  106.  
  107. $name = strip_tags($name[1]);
  108.  
  109. $name =iconv("WINDOWS-1251","UTF-8", $name);
  110.  
  111. preg_match("#</noindex>\s+</td></tr></table>(.*?)</center><hr>#si", $site, $tmp);
  112.      
  113. $result = preg_replace('#<noindex.*?</noindex>|<script.*?</script>|<ins.*?</ins>|<!--.*?-->#si', '', $tmp[1]);
  114.      
  115. $text = trim($result);
  116. $text = str_replace("<p>&nbsp;</p>", "", $text);
  117. $text = str_replace("<p>&nbsp;</p>", "", $text);
  118. $text = str_replace("<br>", "", $text);
  119. $text = str_replace("<center>", "", $text);
  120.  
  121. $text = iconv("WINDOWS-1251","UTF-8", $text);
  122.  
  123. preg_match_all('#<img.*src="(.*)".*>#isU', $text, $urlsex);
  124.  
  125. foreach($urlsex[1] as $val) {
  126.         $urlsex_end .= $val . "\n";
  127. }
  128.  
  129. $value = str_replace("http://URL_SITE", "", $value);
  130.  
  131. $value = trim($value);
  132.  
  133. $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);
  134.  
  135. $mysqli->query("UPDATE links SET used = 'yes' WHERE link = " . sqlesc($value)) or sqlerr(__FILE__, __LINE__, $mysqli->error);
  136.  
  137. curl_multi_remove_handle($multi, $channel);
  138.  
  139. }
  140.  
  141.  
  142. $a = get_row_count("links");
  143. $b = get_row_count("texts");
  144.  
  145. $number1 = $a;
  146. $number2 = $b;
  147. $result = ($number2 / $number1) * 100;
  148.  
  149. echo "Обработано: " . $b . " / " . $a . " (" . round($result) . "%).";
  150.  
  151. echo '<br /><br />Время выполнения скрипта: '.(microtime(true) - $start).' сек.';
  152.  
  153. ?>
  154.  
  155.  
  156. <meta http-equiv="refresh" content="0;URL=3.php?cat=<?=$cat;?>" />
  157.  


Подскажите, как можно ускорить работу? Может у меня есть где-то ошибка?

На выполнение одного раза выполнения скрипта (это парсинг 5 статей) уходит 5 секунд. Это нормально?

Прошлый парсер у меня был тоже на курл, но без многопоточности, и парсил 1 запись /2 сек.

В чем моя ошибка?
event Отправлено: 29 Января, 2015 - 01:39:31 • Тема: Запрос • Форум: Вопросы новичков

Ответов: 4
Просмотров: 166
Забыл указать то что может быть в поле categoryid - неизвестно. Там может быть любая цифра.
event Отправлено: 29 Января, 2015 - 01:18:23 • Тема: Запрос • Форум: Вопросы новичков

Ответов: 4
Просмотров: 166
Привет.
Есть таблица в базе данных под названием - links, ее ячейки

id link categoryid

Например там есть 3 записи

1 http://google[dot]com 7
2 http://yandex[dot]ru 4
3 http://yahoo[dot]com 7

Помогите составить запрос, чтобы можно было выбрать все записи с одинаковым значением в ячейке categoryid, то есть с этого примера запрос должен выбрать:

1 http://google[dot]com 7
3 http://yahoo[dot]com 7


Пробовал как-то так, но не получается - SELECT * FROM links GROUP BY categoryid HAVING count(*)> 1
event Отправлено: 23 Января, 2015 - 15:39:38 • Тема: Запрос, массив • Форум: Вопросы новичков

Ответов: 9
Просмотров: 306
Sail, работает, спасибо! Подмигивание Подмигивание
(Добавление)
Кстати, а можно например еще как-то одно значение передать из запроса, например ID?
event Отправлено: 23 Января, 2015 - 15:30:27 • Тема: Запрос, массив • Форум: Вопросы новичков

Ответов: 9
Просмотров: 306
skiphog, спасибо, заработало:

PHP:
скопировать код в буфер обмена
  1. $result = $mysqli->query("SELECT link, categoryid FROM links WHERE used = 'no' LIMIT 10") or sqlerr(__FILE__, __LINE__, $mysqli->error);
  2.  
  3. $urls = array();
  4.     while($row = $result->fetch_assoc()) {
  5.          $urls[] = $row;
  6. }
  7.  
  8. var_dump($urls);
  9.  


Не знаю как правильно сказать, если ссылка, и к ней должна привязываться ID из ячейки categoryid.

Потом такой foreach должен быть:

PHP:
скопировать код в буфер обмена
  1. foreach ($urls as $key => $value) {
  2.     echo "Ссылка: $key; Категория ссылки: $value<br />\n";
  3. }


Вот так задумано, но не получается(
event Отправлено: 23 Января, 2015 - 15:22:10 • Тема: Запрос, массив • Форум: Вопросы новичков

Ответов: 9
Просмотров: 306
PHP:
скопировать код в буфер обмена
  1. $result = $mysqli->query("SELECT link, categoryid FROM links WHERE used = 'no' LIMIT 10") or sqlerr(__FILE__, __LINE__, $mysqli->error);
  2.  
  3. $urls = array();
  4.     while($row = $result->fetch_assoc()) {
  5.          $urls = $row;
  6. }
  7.  
  8. var_dump($urls);
  9.  


Интересно почему выводит:

CODE (htmlphp):
скопировать код в буфер обмена
  1. array(2) { ["link"]=> string(60) "/11_14749_algoritm-bazovih-reanimatsionnih-meropriyatiy.html" ["categoryid"]=> string(1) "5" }
, должно вывести 10 таких записей...
event Отправлено: 23 Января, 2015 - 15:06:03 • Тема: Запрос, массив • Форум: Вопросы новичков

Ответов: 9
Просмотров: 306
skiphog, спасибо - работает.

Еще такую вопрос, как в этом массиве можно привязать к ссылке номер категории (он хранится в ячейке categoryid в таблице links)?

Страниц (37): В начало « ... 4 5 6 7 [8] 9 10 11 12 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB