PHP.SU

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

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

> Найдено сообщений: 538
event Отправлено: 31 Января, 2015 - 01:55:29 • Тема: Вопрос • Форум: Вопросы новичков

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

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

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

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

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

Ответов: 3
Просмотров: 91
Привет.
Написал скрипт - парсер, на 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
Просмотров: 61
Забыл указать то что может быть в поле categoryid - неизвестно. Там может быть любая цифра.
event Отправлено: 29 Января, 2015 - 01:18:23 • Тема: Запрос • Форум: Вопросы новичков

Ответов: 4
Просмотров: 61
Привет.
Есть таблица в базе данных под названием - 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
Просмотров: 133
Sail, работает, спасибо! Подмигивание Подмигивание
(Добавление)
Кстати, а можно например еще как-то одно значение передать из запроса, например ID?
event Отправлено: 23 Января, 2015 - 15:30:27 • Тема: Запрос, массив • Форум: Вопросы новичков

Ответов: 9
Просмотров: 133
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
Просмотров: 133
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
Просмотров: 133
skiphog, спасибо - работает.

Еще такую вопрос, как в этом массиве можно привязать к ссылке номер категории (он хранится в ячейке categoryid в таблице links)?
event Отправлено: 23 Января, 2015 - 14:48:49 • Тема: Работа cURL • Форум: Вопросы новичков

Ответов: 4
Просмотров: 125
Ch_chov, делаю как раз многопоточность... надо сформировать массив $urls

не подскажите? - http://forum.php.su/topic.php?fo...mp;v=#1422016689
event Отправлено: 23 Января, 2015 - 14:36:43 • Тема: Запрос, массив • Форум: Вопросы новичков

Ответов: 9
Просмотров: 133
Всем привет.
Есть такой запрос:
CODE (SQL):
скопировать код в буфер обмена
  1. $result = $mysqli->query("SELECT * FROM links WHERE used = 'no' LIMIT 5") OR sqlerr(__FILE__, __LINE__, $mysqli->error);


Как можно все с ячейки link (из таблицы links, та что в запросе) загнать в массив, чтобы получилось

$urls = array("1 ссылка", "2 ссылка)...; и т.д.
(Добавление)
Попробовал как-то так, по дурацкому, но не пашет:

PHP:
скопировать код в буфер обмена
  1. $result = $mysqli->query("SELECT * FROM links WHERE used = 'no' LIMIT 2") or sqlerr(__FILE__, __LINE__, $mysqli->error);
  2.  
  3. while($row = $result->fetch_array()) {
  4.         $url_z .= '"link' . $row['link'] . '", ';
  5. }
  6.  
  7. $urls = array($url_z);
event Отправлено: 23 Января, 2015 - 13:26:25 • Тема: Работа cURL • Форум: Вопросы новичков

Ответов: 4
Просмотров: 125
Ch_chov, о втором слышал, а вот о 1 и 3 ничего, можно поподробнее?
(Добавление)
Разделить парсер и загрузчик - то есть, сперва скачать все html страницы к себе, а потом уже с ними работать?
event Отправлено: 23 Января, 2015 - 03:06:25 • Тема: Работа cURL • Форум: Вопросы новичков

Ответов: 4
Просмотров: 125
Ситуация такая, написал парсер, работает, нужно спарсит ним более миллиона статей, скрипт работает через curl, но медленно, примерно 1 сек/одная спарсеная статья.

Есть идеи как ускорить этот curl?

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

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.  
  4. function get_row_count($table, $suffix = "") {
  5.         global $mysqli;
  6. if ($suffix)
  7.         $suffix = " $suffix";
  8.         ($r = $mysqli->query("SELECT COUNT(*) FROM $table$suffix"));
  9.         ($a = $r->fetch_row());
  10.                 return $a[0];
  11. }
  12.  
  13. function sqlesc($value) {
  14.         global $mysqli;
  15.    if (!is_numeric($value)) {
  16.            $value = "'" . $mysqli->real_escape_string($value) . "'";
  17.    }
  18.    return $value;
  19. }
  20.  
  21. function sqlerr($file = "", $line = "", $error = "") {
  22.                 global $USER;
  23.                
  24.         die("<b>MySQL Error:</b><br /><b>File:</b> ". $file ." <b>Line:</b> ". $line ."<br /><b>Error:</b> ". $error);
  25. }
  26.  
  27. $mysql = array(
  28.         "host" => "localhost",
  29.         "user" => "root",
  30.         "password" => "123456",
  31.         "database" => "site",
  32.         "charset" => "utf8"
  33. );
  34.  
  35. $mysqli = @ new mysqli($mysql['host'], $mysql['user'], $mysql['password'], $mysql['database']);
  36.  
  37. @ $mysqli->query("SET NAMES " . $mysql['charset']);
  38.        
  39.         die("MySQLi connect error: " . mysqli_connect_error());
  40. }
  41.  
  42. function curl($url = ""){
  43.  
  44. $cl = curl_init();
  45. curl_setopt($cl, CURLOPT_URL, $url);
  46.  
  47. curl_setopt($cl, CURLOPT_RETURNTRANSFER,1);
  48.  
  49. curl_setopt($cl, CURLOPT_HEADER,1);
  50. curl_setopt($cl, CURLOPT_TIMEOUT, 5);
  51.  
  52. curl_setopt($cl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0");
  53.  
  54. $ex = curl_exec($cl);
  55.  
  56.  
  57. return $ex;
  58.  
  59. }
  60.  
  61. $result = $mysqli->query("SELECT * FROM links WHERE used = 'no'") or sqlerr(__FILE__, __LINE__, $mysqli->error);
  62. $row = $result->fetch_array();
  63.  
  64. $site = curl("...url..." . $row['link']);
  65.  
  66. preg_match('#<h1>(.+?)</h1>#i', $site, $name);
  67.  
  68. $name = strip_tags($name[1]);
  69.  
  70. $name =iconv("WINDOWS-1251","UTF-8", $name);
  71.  
  72. preg_match("#</noindex>\s+</td></tr></table>(.*?)</center><hr>#si", $site, $tmp);
  73.      
  74. $result = preg_replace('#<noindex.*?</noindex>|<script.*?</script>|<ins.*?</ins>|<!--.*?-->#si', '', $tmp[1]);
  75.      
  76. $text = trim($result);
  77. $text = str_replace("<p>&nbsp;</p>", "", $text);
  78. $text = str_replace("<p>&nbsp;</p>", "", $text);
  79. $text = str_replace("<br>", "", $text);
  80. $text = str_replace("<center>", "", $text);
  81.  
  82. $text = iconv("WINDOWS-1251","UTF-8", $text);
  83.  
  84. preg_match_all('#<img.*src="(.*)".*>#isU', $text, $urls);
  85.  
  86. foreach($urls[1] as $val) {
  87.         $urls_end .= $val . "\n";
  88. }
  89.  
  90. $result = $mysqli->query("INSERT INTO texts (name, text, image_urls, categoryid, link) VALUES (" . implode(", ", array_map("sqlesc", array($name, trim($text), trim($urls_end), $row['categoryid'], $row['link']))) . ")") or sqlerr(__FILE__, __LINE__, $mysqli->error);
  91.  
  92. $mysqli->query("UPDATE links SET used = 'yes' WHERE id = " . $row['id']) or sqlerr(__FILE__, __LINE__, $mysqli->error);
  93.  
  94. $a = get_row_count("links");
  95. $b = get_row_count("texts");
  96.  
  97. $number1 = $a;
  98. $number2 = $b;
  99. $result = ($number2 / $number1) * 100;
  100.  
  101. echo "Обработано: " . $b . " / " . $a . " (" . round($result) . "%).";
  102.  
  103. ?>
  104.  
  105. <meta http-equiv="refresh" content="0;URL=2.php" />

Страниц (36): В начало « ... 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