PHP.SU

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

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

> Найдено сообщений: 16
seowin Отправлено: 15 Марта, 2016 - 06:50:28 • Тема: Быстрая выборка и создание новой базы sql • Форум: Работа с СУБД

Ответов: 0
Просмотров: 615
Имеется база данных размером 10 млн. строк под управлением mySQL.
Необходимо на основании текущей базы создать новую базу размером от 500 тыс. до 1 млн. (рандомное значение в этом интервале) строк с рандомными строками первичной базы.

Структура первичной базы:
1. Id
2. Varchar(500)

Во втором столбце содержится текст.

Структура новой базы:
1. Id
2. Varchar(500)
3. Varchar(500)
Первых два столбца идентичны столбцам из первичной базы. В третьем столбце содержится строка из второго столбца в транслите.

Т.е. например, во втором столбце содержится текст: "купить пластиковые окна", то в третий столбец попадет значение: "kupit-plastikovie-okna" после обработкой скрипта.

Каким образом можно максимально быстро реализовать подобное, при этом не положив сервер?

Задача - именно максимально быстро ускорить данный процесс.

Заранее спасибо за советы.
seowin Отправлено: 08 Февраля, 2016 - 16:05:37 • Тема: Проблема с отправкой реффера через курл • Форум: Вопросы новичков

Ответов: 1
Просмотров: 118
Такая проблема.
Использую следующий код для парсинга сайта:
PHP:
скопировать код в буфер обмена
  1.         <?PHP
  2.         @set_time_limit(0);
  3.  
  4.         $user_agent_array = file('proxy.txt');
  5.  
  6.         $reffer_array = array(
  7.         'http://yandex.ru',
  8.         'http://google.com'
  9.         );
  10.  
  11.         $proxy_array = file('proxy.txt');
  12.  
  13.         function arrayRand($array) {
  14.                 return $array[mt_rand(0, count($array))];
  15.         }
  16.  
  17.         function getContent($url) {
  18.         GLOBAL $user_agent_array;
  19.         GLOBAL $reffer_array;
  20.         GLOBAL $proxy_array;
  21.         $user_agent = trim(arrayRand($user_agent_array));
  22.         $reffer = arrayRand($reffer_array);
  23.         $proxy = trim(arrayRand($proxy_array));
  24.                
  25.         $ch = curl_init();
  26.         curl_setopt($ch, CURLOPT_URL, $url);
  27.         curl_setopt($ch, CURLOPT_REFERER, $reffer);
  28.         curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); //сохранить куки в файл    
  29.         curl_setopt ($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); //считать куки из файла                
  30.         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 7); //тайм-аут соединения
  31.         curl_setopt($ch, CURLOPT_TIMEOUT, 7);
  32.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); //возврат необработанного ответа
  33.         curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
  34.         curl_setopt($ch, CURLOPT_PROXY, $proxy);
  35.         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //переходить по редиректам
  36.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);// не проверять SSL сертификат
  37.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);// не проверять Host SSL сертификата
  38.         $content = curl_exec($ch);
  39.         }
  40.  
  41.         echo getContent('http://gadarutym.ru/3/good.php');
  42.  
  43.  


Если подключаться напрямую, не через прокси, то реффер передается корректно - http://clip2net.com/s/3u1L9WK.

Если же работа идет через прокси, то реффер не передается и в HTTP_CONNECTION находится значения close: http://clip2net[dot]com/s/3u1Lxdf

Подскажите, в чем может быть проблема?
seowin Отправлено: 19 Декабря, 2015 - 07:45:45 • Тема: Семантическая разбивка web-документа на блоки • Форум: Вопросы новичков

Ответов: 1
Просмотров: 142
Доброго времени суток!

Подскажите, кто сталкивался с подобным, каким образом с помощью php можно разбить html-страницу на блоки: выделить основную часть с контентом, меню, футер и т.д., не зная структуру DOM?

Интересует в большей степени определение основного контента страницы.

В сети есть материалы на эту тему, но что-то я не совсем понял алгоритм реализации.

Например:
http://habrahabr[dot]ru/post/210824/
http://www[dot]vestnik[dot]vsu[dot]ru/pdf/an[dot][dot][dot]2/2008_02_20[dot]pdf
seowin Отправлено: 27 Ноября, 2015 - 10:39:02 • Тема: Как лучше делать выборку? • Форум: Вопросы новичков

Ответов: 5
Просмотров: 228
В общем, задача сейчас больше свелась к тому, как ускорить процесс генерации.

Понял, что создавать 100500 html файлов на сервере не очень хорошая затея, решил, что лучше помещать все в SQLLite базу. И потом уже генерировать страницу на лету на основе шаблона.

Вообще, цель всего этого - генерация страниц для сайтов. Т.е. каждый сайт будет иметь 250к - 1кк страниц.

Встает вопрос, как ускорить процесс записи в SQLLite базу (для каждого сайта база своя) и не положить сервер, если за раз мы генерим, скажем, 50 сайтов.

Как я предполагаю, поочередно производить запись в лайт-базу для каждого сайта будет очень долго.

Т.е. получается такая схема:
Есть SQL база под управлением MySQL. В ней несколько таблиц. В каждой таблице 1кк-3кк строк.

Необходимо сгенерировать 50 сайтов за раз, в каждом сайте по 250к - 1 кк страниц.

Для каждой страницы идет выборка из нескольких таблиц SQL базы, текст обрабатывается и записывается в SQlLite базу каждого сайта.

Как лучше оптимизировать все это дело, чтобы и скорость была максимально возможной, и в тоже время сервер не падал?
seowin Отправлено: 26 Ноября, 2015 - 18:58:17 • Тема: Как лучше делать выборку? • Форум: Вопросы новичков

Ответов: 5
Просмотров: 228
А что конкретно интересует?
seowin Отправлено: 26 Ноября, 2015 - 17:42:11 • Тема: Как лучше делать выборку? • Форум: Вопросы новичков

Ответов: 5
Просмотров: 228
Задача следующая - нужно максимально быстро и безопасно в плане нагрузки генерировать большое количество (около 1 млн.) html файлов на лету и сохранять их на диск.

Файлы генерируются на основе шаблона и строк текста. По 30-50 строк на файл.

Вопрос: откуда лучше делать выборку этих строк (можно подряд идущих) из БД или же из txt файла, чтобы скорость выборки и генерации была наиболее высокой и от нагрузки не падал сервер?

При генерации каждого файла - идет новая выборка этих 30-50 строк.
seowin Отправлено: 12 Ноября, 2015 - 17:21:49 • Тема: Как можно реализовать такой парсинг? • Форум: Вопросы новичков

Ответов: 1
Просмотров: 165
Доброго времени суток!

Возникла необходимость написать своеобразный шаблонизатор для одной CMS на основе существующих страниц.

Суть идеи:
1. Указываем скрипту ссылку на страницу существующего сайта, на основе которой нужно сделать шаблон
2. Скрипт обрабатывает эту страницу следующим образом:
- Удаляет весь контент (текст, картинки, таблицы и т.п.)
- Заместо этого контента вставляет макрос (к примеру: [TEXT])
- Заменяет все ссылки на макрос (к примеру, на [LINK])
- Заменяет мета-теги (title, description)
- Подключаемые файлы (css, js и прочее) не трогает, пути остаются такими же.

Проблема в том, как определить, в каком именно месте выводить макрос [TEXT]. Так как текст на странице может выводиться и в футере, и в сайдбаре.
Нужно как-то определить место, где выводится основной контент страницы, и заместо него вставить этот макрос.

Также сложность возникает в удалении картинок. Могут быть картинки из контента, а могут быть те, которые прописаны в шаблоне (элемет дизайна).

Помогите, пожалуйста, придумать алгоритм.
seowin Отправлено: 01 Октября, 2015 - 14:06:33 • Тема: Удалить повторы слов в файле • Форум: Вопросы новичков

Ответов: 14
Просмотров: 697
Интересный способ. Большое спасибо!

Работает, как надо!

Deonis пишет:
seowin, т.к. файл большой и его структура такая же, как у csv-файлов, то я бы сделал так:
PHP:
скопировать код в буфер обмена
  1. $output = [];
  2. $voc = [];
  3. if (($fp = fopen('input_file.csv', 'r')) !== false) {
  4.     while (($data = fgetcsv($fp, 1000, '|')) !== false) {
  5.         $tmp = array_diff($data, $voc);
  6.         $voc = array_merge($voc,$tmp);                         
  7.         $output[] = $tmp;
  8.     }
  9.     fclose($fp);
  10. }
  11. // записываем обработанные данные в новый файл
  12. $fp = fopen('output_file.csv', 'w');
  13. foreach ($output as $fields) {
  14.     fputcsv($fp, $fields, '|');
  15. }
  16. fclose($fp);
P.S. Расширение файла не обязательно должно быть csv
seowin Отправлено: 01 Октября, 2015 - 08:24:51 • Тема: Удалить повторы слов в файле • Форум: Вопросы новичков

Ответов: 14
Просмотров: 697
Спасибо за помощь.

Проверил, результат получился таким:
абдикация|отречение
абзац|часть|отрывок|кусок|рождать
абитуриент|ученик|институтка|академист
абонировать|нанимать|рядить
абордаж|столкновение|сцепка|свалка
абориген|житель|туземец
абортировать
абракадабра|бессмыслица|отречение|белиберда|нелепость|ахинея|нелепица|чепуха
абсолютно|полностью|вполне|бесспорно|безусловно|непременно|совершенно
абстрактный|духовный|отвлеченный
абсурд|бред|бреда|вздор

Т.е. не удалился повтор слова "отречение".

Полный файл имеет около 15 тыс. строк.

Нужно, чтобы каждое слово в файле встречалось всего 1 раз.
Т.е. алгоритм следующий:
1. разбиваем строку на слова
2. ищем вхождение каждого слова в каждой строке последующей строке
3. если вхождение найдено, заменяем его на ""

На выходе должен быть файл, в котором:
а) строки имеют такой же вид, как в первоначальном файле
б) заменены все повторы слов на ""

Ничего страшного, если будут строки такого вида:
абордаж||сцепка|свалка

Т.е. будут рядом две вертикальные черты "||". Главное, чтобы в пределах разных строк не было повторов слов.

Зачем это все надо:
Далее этот файл поместится в БД. При выборке какого-то конкретного одного слова, база должна возвращаться одну строку.

Сейчас же из-за повторов слов в разных строках база возвращает несколько строк, в которых находит вхождение заданного слова.
seowin Отправлено: 30 Сентября, 2015 - 17:12:48 • Тема: Удалить повторы слов в файле • Форум: Вопросы новичков

Ответов: 14
Просмотров: 697
neokiev пишет:
Если слов не очень много, то простой способ:


Нужно, чтобы строки имели точно такой же вид, как в исходном файле, так как это база синонимов. Каждая строка отвечает за свой синонимичный ряд
seowin Отправлено: 30 Сентября, 2015 - 14:06:25 • Тема: Удалить повторы слов в файле • Форум: Вопросы новичков

Ответов: 14
Просмотров: 697
Помогите, пожалуйста, написать скрипт.

Задача следующая.
Есть txt файл, в котором строки формата:

абдикация|отречение
абзац|часть|отрывок|кусок|рождать
абитуриент|ученик|институтка|академист
абонировать|нанимать|рядить
абордаж|столкновение|сцепка|свалка
абориген|житель|туземец
абортировать|рождать
абракадабра|бессмыслица|отречение|белиберда|нелепость|ахинея|нелепица|чепуха
абсолютно|полностью|вполне|бесспорно|безусловно|непременно|совершенно
абстрактный|духовный|бессмыслица|отвлеченный
абсурд|бред|бреда|вздор|абордаж

Иногда слова в пределах разных строк повторяюся.

Задача - удалить повторы слов.

Т.е. не выходе должно быть:
абдикация|отречение
абзац|часть|отрывок|кусок|рождать
абитуриент|ученик|институтка|академист
абонировать|нанимать|рядить
абордаж|столкновение|сцепка|свалка
абориген|житель|туземец
абортировать
абракадабра|бессмыслица|белиберда|нелепость|ахинея|нелепица|чепуха
абсолютно|полностью|вполне|бесспорно|безусловно|непременно|совершенно
абстрактный|духовный|отвлеченный
абсурд|бред|бреда|вздор

Ломал голову, так и не смог написать рабочий вариант скритпа.

Не доходит, как пересохранить строку в файле.

Накидал пока вот что:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $file = file('1.txt');
  4.  
  5. for($a = 0; $a < count($file); $a++) {
  6.  
  7.         $file[$a] = trim($file[$a]);
  8.        
  9.         $ex = explode('|', $file[$a]);
  10.        
  11.         foreach($ex as $val) {
  12.        
  13.         for($i = 0; $i < count($ex); $i++) {
  14.        
  15.                 for($j = $a + 1; $j < count($file); $j++) {
  16.                         if(strpos($file[$j], $ex[$i])) {
  17.                         str_replace($ex[$i], "", $file[$j]) . "<br/>";
  18.                         }
  19.                 }
  20.  
  21.         }
  22.  
  23. }
  24.  
  25. ?>
seowin Отправлено: 12 Сентября, 2015 - 15:32:20 • Тема: Сравнение строки с остальными строками файла • Форум: Вопросы новичков

Ответов: 1
Просмотров: 133
Задача следующая. Есть txt файл формата:
красивый|быстрый|смелый
хорошой|пестрый|длинный
бледный|красныцй|ярый|беглый
смелый|настоящий|кран
бледный|красныцй|ярый|беглый
румяный|пестрый|яростный

Нужно сравнивать слова из каждой строчки со всем файлом и в случае нахождения слова в другой строке, добавить эту строку(строки) к текущей проверяемой. Далее сохранить эту строку в новый файл.

Т.е. как мы видим, некоторые слова могут встречаться в других строках. Например, вот 2 строки:
красивый|быстрый|смелый
смелый|настоящий|кран

Здесь, как мы видим, встречается одинаковое слово "смелый".
Скрипт должен соединить эти строки так: "красивый|быстрый|смелый|смелый|настоящий|кран" и записать в новый файл.

Слова в новом файле в разных строках повторяться не должны.

Т.е. релузьтатом работы скрипта в данном случае был бы файл с таким содержанием:

красивый|быстрый|смелый|смелый|настоящий|кран
хорошой|пестрый|длинный|румяный|пестрый|яростный
бледный|красныцй|ярый|беглый
грустный|веселый|большой

Пробовал и так и сяк. Не доходит, как это реализовать.

Остановился на таком варианте, но он тоже неверно работает:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.  
  4. $file = file("1.txt"); // Открываем первый файл и заносим из него все строки в массив
  5. $file3 = "3.txt";
  6. $proverka = file_get_contents("3.txt");
  7.  
  8.  
  9. //Запись в файл
  10. function add_to_file($string)
  11. {
  12.         global $file3;
  13.         $res = fopen($file3,'a');
  14.         $try = fwrite($res, $string);
  15.         if (!$try) {echo 'Ошибка! Не могу записать в файл: '.$file3."\n";}
  16. }
  17.  
  18. $line_pattern = "";
  19.    
  20.     foreach ($file as $line)
  21.     {
  22.  
  23.                 $line = trim($line);
  24.                 $pattern = "/" . $line . "/i";                 
  25.        
  26.         //Проверяем, есть ли в файле результата вхождение одного из слова
  27.         if(!preg_match($pattern, $proverka)) {
  28.        
  29.         for($i = 1; $i < count($file); $i++)
  30.         {
  31.                 if(preg_match($pattern, $file[$i])) {
  32.                         $arr_vibor = array_slice($file, $i, 1);
  33.                         $line .= "|" . $arr_vibor[0];
  34.                 }      
  35.         }
  36.        
  37.                 add_to_file($line);
  38.        
  39.         }
  40.         }
  41.  
  42.        
  43. ?>
  44.  

Буду очень благодарен за помощь!
seowin Отправлено: 30 Июля, 2015 - 12:44:19 • Тема: Проблема с отправкой данных • Форум: JavaScript & VBScript

Ответов: 3
Просмотров: 544
Вся проблема в том, что этот код писал не я, а программист, с которым я сотрудничал. Программист пропал, и теперь мне приходится самостоятельно дорабатывать этот код.

К сожалению, в JS я полный нуль.

Panoptik, не могли бы вы доработать этот код так, как надо?

Готов заплатить за работу.
seowin Отправлено: 30 Июля, 2015 - 11:20:24 • Тема: Проблема с отправкой данных • Форум: JavaScript & VBScript

Ответов: 3
Просмотров: 544
Есть JS скрипт:

CODE (javascript):
скопировать код в буфер обмена
  1.   var availableTags = [];
  2.   //var template_dir = $("#template_dir").text();
  3.     $.ajax({
  4.       url: '/get_clinics.php',
  5.       type: 'POST',
  6.       //dataType : "json",
  7.       async   : false,  
  8.       data: {},
  9.       beforeSend: function(){
  10.         $('#ajax_preloader').fadeIn('fast');
  11.       },
  12.       success: function(data){
  13.         var return_arr = data.split(',');
  14.         for(var k in return_arr){
  15.           if(return_arr[k] != ''){
  16.              console.log(return_arr[k]);
  17.             var clinic_arr = return_arr[k].split(';');
  18.             obj = {value:clinic_arr[1], label : clinic_arr[0]};
  19.             availableTags.push(obj);
  20.           }
  21.         }
  22.        
  23.         return availableTags;
  24.         $('#ajax_preloader').fadeOut('fast');
  25.       },
  26.       error: function(){
  27.        
  28.         $('#ajax_preloader').fadeOut('fast');
  29.       }
  30.     });


И есть php скрипт (get_clinics.php):

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         header('Access-Control-Allow-Origin: *');
  3.         $path = $_SERVER['DOCUMENT_ROOT'];
  4.  
  5.         include_once $_SERVER['DOCUMENT_ROOT'] . '/wp-config.php';
  6.         include_once $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php';
  7.  
  8.         $args = array(
  9.       'posts_per_page'   => 100000,
  10.       'offset'           => 0,
  11.       //'category'         => 15,
  12.       'post_type' => 'clinic',
  13.       'orderby'          => 'post_date',
  14.       'order'            => 'DESC',
  15.     );
  16.     $posts_array = get_posts( $args );
  17.     $clinics = '';
  18.     foreach($posts_array as $inter){
  19.         $clinics .= $inter -> post_title . ';' . $inter -> ID . ',';
  20.     }
  21.  
  22.         echo ($clinics);       


С помощью этих двух скриптов реализуется поиск по базе в поле на сайте.
Т.е. когда вводишь в поле какое-либо слово, находятся значения из базы, в которых есть вхождения этого слова и предлагаются для выбора: http://clip2net[dot]com/s/3lrHX3d

Как видно из php скрипта, выводится 2 значения: title ($inter -> post_title) и ID записи ($inter -> ID)

Проблема в том, что при отправки формы, отправляется только первая часть ($inter -> post_title), а ID не отправляется.

Но если посмотреть через консоль браузера это поле в форме, то там выводятся помимо тайтла также и значения ID: http://clip2net[dot]com/s/3lrIryy

Подскажите, пожалуйста, что нужно исправить, чтобы вместе с заголовком на сервер отправялся ID записи, но при этом в поле при поиске ID не выводился: http://clip2net[dot]com/s/3lrIygO

Т.е. все так как сейчас, но чтобы ID отправлялся на сервер для дальнейшей обработки.
seowin Отправлено: 11 Апреля, 2015 - 13:23:50 • Тема: Алгоритм рандомного вывода контента • Форум: Вопросы новичков

Ответов: 1
Просмотров: 154
Всем привет!

Задача стоит такая.
Есть:
Массив предложений
Массив картинок
Массив заголовков

Нужно, чтобы при каждом обновлении страницы выводилась мешанка из всего этого. Т.е. структура страницы постоянно менялась.

К примеру, берем от и до предложений из массива.
Предложения разбиваем на абзацы (также указываем от и до предложений на абзац и сколько делать абзацев (от и до)).
Берем от и до картинок из массива.
Берем от и до заголовков из массива.

Скрипт это все перемешивает и выводит в рандомном порядке.

К примеру, при первом обновлении страницы выдаст:
Абзац
Картинки
Заголовок
Абзац
Абзац

При втором обновлении выдаст:
Картинка
Заголовок
Абзац
Картинка

И т.д.

Заранее спасибо всем, кто откликнется на мою просьбу!

Страниц (2): [1] 2 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB