За последние 24 часа нас посетили 40765 программистов и 1725 роботов. Сейчас ищет 641 программист ...

Можно ли создать парсер на PHP?

Тема в разделе "PHP для новичков", создана пользователем bogdan_titomir, 9 окт 2017.

  1. bogdan_titomir

    bogdan_titomir Новичок

    С нами с:
    7 окт 2017
    Сообщения:
    159
    Симпатии:
    2
    Можно ли создать парсер который вытащит строки из базы данных каждая строка BLOB их порядка 66000.

    Причем 10000 объектов (компаний) у каждой компании есть (логотип, схема проезда, и карта сайта).

    Получается надо создать 10000 папок и в каждой папке должны быть свои картинки схемы проезда и логотипы.

    В базе данных все это прописано просто нагружает сильно серв и надо использовать это в файловой системе.

    Написал код не судите строго только встал на этот путь. Заранее спасибо.



    PHP:
    1. <?php
    2.  
    3. $serverMySQL="localhost"; // сервер MySQLi
    4. $db="mydb"; // база данных
    5. $dblog="root"; // логин
    6. $dbpass=""; // пароль
    7.  
    8. $mi=new mysqli($serverMySQL, $dblog, $dbpass, $db);
    9. $mi->set_charset("utf8");
    10. if($mi->connect_errno):
    11.     die($mi->connect_error);
    12. endif;
    13. // Подключение к базе
    14.  
    15. $PublicationID;
    16.  
    17. header('Content-type: image/jpeg; charset=utf-8');
    18.  
    19. $SQLRequest = "SELECT image FROM id_images WHERE objectId=".$PublicationID.""; // objectid id компании(объекта)
    20.  
    21. $query = mysqli_query($SQLRequest) or die (mysqli_error());
    22.  
    23. $row = mysqli_fetch_array($query, MYSQLI_ASSOC);
    24.  
    25. $rows = mysqli_num_rows($row); // количество полученных строк
    26.  
    27. for ($i = 0 ; $i < $rows; $i++) {
    28.  
    29. $SQLRequest = "SELECT image FROM id_images WHERE objectId=".$PublicationID."";
    30.  
    31. $query = mysqli_query($SQLRequest) or die (mysqli_error());
    32.  
    33. $row = mysqli_fetch_array($query, MYSQLI_ASSOC);
    34.  
    35.     $strukture = "../gigal/templates/gigal/images/gallery/'.$PublicationID.'";
    36.     if (mkdir($structure, 0777, true)) {
    37.         echo "Папка '.$PublicationID.' создана";
    38.     }else {
    39.         echo "Папка не создана";
    40.     }
    41. }
    42.  
    43. // Отключение базы
    44.  
    45. ?>
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @bogdan_titomir, а что ты хочешь парсить? Ну вытащи данные из бд и разложи по папкам. А дальше в чем проблема?
     
  3. bogdan_titomir

    bogdan_titomir Новичок

    С нами с:
    7 окт 2017
    Сообщения:
    159
    Симпатии:
    2
    Данных свыше 66000 автоматизировать хотел этот процесс, справится ли с этим php? В коде не могу ошибку найти...

    Изменил код выглядит сейчас так.
    Пока что цель стоит хотябы папки создать с id а уже потом думать как туда запихать картинки логотипы и остальное.

    PHP:
    1. <?php
    2.  
    3.             'localhost',  /* Хост, к которому мы подключаемся */
    4.             'root',       /* Имя пользователя */
    5.             '',           /* Используемый пароль */
    6.             'mydb');     /* База данных для запросов по умолчанию */
    7.  
    8. if (!$link) {
    9.    printf("Невозможно подключиться к базе данных. Код ошибки: %s\n", mysqli_connect_error());
    10.    exit;
    11. }
    12. // Подключение к базе
    13.  
    14. $PublicationID;
    15.  
    16. header('Content-type: image/jpeg; charset=utf-8');
    17.  
    18.  
    19. for ($i = 0 ; $i < $rows; $i++) {
    20.  
    21. $SQLRequest = "SELECT image FROM id_images WHERE objectId=".$PublicationID."";
    22.  
    23. $query = mysqli_query($SQLRequest) or die (mysqli_error());
    24.  
    25. $row = mysqli_fetch_array($query, MYSQLI_ASSOC);
    26.  
    27. $strukture = "../gigal/templates/gigal/images/gallery/'.$PublicationID.'";
    28.  
    29. $rows = mysqli_num_rows($query); // количество полученных строк
    30.  
    31. mkdir($structure, 0777, true);
    32. }
    33.  
    34. // Отключение базы
    35. ?>
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
  5. bogdan_titomir

    bogdan_titomir Новичок

    С нами с:
    7 окт 2017
    Сообщения:
    159
    Симпатии:
    2
  6. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    Строка 15: а чему равно $PublicationID ?
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Написать CLI-скрипт (т.е. запускаемый из командной строки), один раз всё вытащить, разложить куда надо и т.п., потом пользоваться. Т.е. один раз пройтись по всей базе скриптом, сколько бы это времени не заняло
     
  8. bogdan_titomir

    bogdan_titomir Новичок

    С нами с:
    7 окт 2017
    Сообщения:
    159
    Симпатии:
    2
    Обязательно писать CLI скрипт? Я расчитывал что циклом пройдется по каждой строке и в конце отключит соединение с бд.
     
  9. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    php справится. Просто нужно скрипт запустить через консоль, а не http запросом.
    Если всё это происходит на хостинге, то подключиться можно по SSH. Для этого нужен SSH клиент. Например, PuTTY для винды.
    http запрос вылетит по тайм ауту.
     
  10. bogdan_titomir

    bogdan_titomir Новичок

    С нами с:
    7 окт 2017
    Сообщения:
    159
    Симпатии:
    2
    Спасибо, будем копать в этом направлении.
     
  11. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Команда будет выглядеть примерно так:
    Код (Text):
    1. cd /var/www/имя_пользователя/data/www/имя_сайта.ru/путь/к/скрипту/ && php имя_скрипта.php
    Путь, конечно, может отличаться в зависимости от хостинга.
     
    bogdan_titomir нравится это.
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @bogdan_titomir имей ввиду, что при таком количестве файлом могут запросто кончиться inodes файловой системы. Тогда получишь ошибку, что на диске нет места (даже если есть свободные гигабайты).
    --- Добавлено ---
    И не создавай в одной папке 10.000 папок. Создай 100 папок, по 100 в каждой.
     
  13. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    Я на крон вешал задачи и посерьезней, скрипт выполнялся по часу, правда ночью (анализ gps-инфы). А вообще разовые ресурсоемкие операции с базами данных я на делфи пишу - намного шустрее экзешка отрабатывает, нежели пхп-скрипт)
     
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ну так через cron скрипты обычно и запускаются в CLI.
     
  15. bogdan_titomir

    bogdan_titomir Новичок

    С нами с:
    7 окт 2017
    Сообщения:
    159
    Симпатии:
    2
    Большое спасибо!
    --- Добавлено ---
    Будет сильно тормозить при открытии файла? А повлияет ли на нагрузку серва?
     
  16. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Будет тормозить получение списка файлов, свойств файлов. А открывать такую папку в файловом менеджере по FTP или SFTP это страдания.
     
    bogdan_titomir нравится это.