За последние 24 часа нас посетили 21539 программистов и 1027 роботов. Сейчас ищут 707 программистов ...

Проблема с разбивкой папок: 10000 папок разбить на 100 папок

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

  1. bogdan_titomir

    bogdan_titomir Новичок

    С нами с:
    7 окт 2017
    Сообщения:
    159
    Симпатии:
    2
    Написал на pdo парсер теперь проблема с сортировкой так как в 1 папку залезает 10000 папок нужно разбить 100x100 папок.

    PHP:
    1. <?php
    2.  
    3.     $host = '127.0.0.1';
    4.     $db   = 'gigal';
    5.     $user = 'root';
    6.     $pass = '';
    7.     $charset = 'utf8';
    8.     $objectId = '';
    9.     $image = '';
    10.     $row = '';
    11.     $id = '';
    12.  
    13.     $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    14.  
    15.     $opt = [
    16.         PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    17.         PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    18.         PDO::ATTR_EMULATE_PREPARES   => false,
    19.     ];
    20.     $pdo = new PDO($dsn, $user, $pass, $opt);
    21.  
    22.     $stmt = $pdo->query('SELECT * FROM id_images');
    23.  
    24.         /* TODO
    25.         header("Content-Type: image/jpeg");
    26.         */
    27.         $number_catalog = 1;
    28.     while ($row = $stmt->fetch(PDO::FETCH_LAZY))
    29.     {
    30.         $row_object = $row['objectId'];
    31.         $row_image = $row['image'];
    32.         $id_image = $row['id'];
    33.         $type_image = $row['ext'];
    34.         $count_dir = count(glob("../uploads/image/{$number_catalog}/*.*"));
    35.  
    36.         if($count_dir = 0 || $count_dir = 100) {
    37.         $strukture = "../uploads/image/{$number_catalog}/";
    38.         $path = $strukture.$row_object;
    39.         mkdir($path,true);
    40.         file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image);
    41.         } elseif ($count_dir = 101) {
    42.             $number_catalog++; // Понимаю что это бред но как увеличить переменную на единицу?
    43.             mkdir($path,true);
    44.             file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image);
    45.         }
    46.     }
    47. ?>
    Выручайте камрады, заранее Вам спасибо!
     
    #1 bogdan_titomir, 21 окт 2017
    Последнее редактирование: 21 окт 2017
  2. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Весь код не читал, но здесь чет не так. Во-первых почему в условии одинарное равно? Почему && а не || ? Одновременно одна переменная не может быть равна двум значениям. И почему в переменной нет $ ?
     
    Fell-x27 и bogdan_titomir нравится это.
  3. bogdan_titomir

    bogdan_titomir Новичок

    С нами с:
    7 окт 2017
    Сообщения:
    159
    Симпатии:
    2
    Исправил, спасибо!
     
  4. bogdan_titomir

    bogdan_titomir Новичок

    С нами с:
    7 окт 2017
    Сообщения:
    159
    Симпатии:
    2
    Изменил код но все равно в 1 папку свыше 1000 элементов идет что делать подскажите?
    PHP:
    1. <?php
    2.  
    3.     $host = '127.0.0.1';
    4.     $db   = 'gigal';
    5.     $user = 'root';
    6.     $pass = '';
    7.     $charset = 'utf8';
    8.     $objectId = '';
    9.     $image = '';
    10.     $row = '';
    11.     $id = '';
    12.     $number_catalog = 1;
    13.  
    14.     $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    15.     /*
    16.     $opt = [
    17.         PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    18.         PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    19.         PDO::ATTR_EMULATE_PREPARES   => false,
    20.     ];
    21.     */ // TODO
    22.  
    23.     $pdo = new PDO($dsn, $user, $pass);
    24.  
    25.     $stmt = $pdo->query('SELECT * FROM id_images');
    26.  
    27.     while ($row = $stmt->fetch(PDO::FETCH_LAZY))
    28.     {
    29.         $row_object = $row['objectId'];
    30.         $row_image = $row['image'];
    31.         $id_image = $row['id'];
    32.         $type_image = $row['ext'];
    33.  
    34.         $count_dir = count(glob("../uploads/image/{$number_catalog}/*.*"));
    35.  
    36.         if($count_dir < 100) {
    37.         $strukture = "../uploads/image/{$number_catalog}/";
    38.         $path = $strukture.$row_object;
    39.         mkdir($path,true);
    40.         file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image);
    41.         } else if ($count_dir > 100) {
    42.             $number_catalog = $number_catalog + 1;
    43.             mkdir($path,true);
    44.             file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image);
    45.         }
    46.      
    47.     }
    48. ?>
     
  5. bogdan_titomir

    bogdan_titomir Новичок

    С нами с:
    7 окт 2017
    Сообщения:
    159
    Симпатии:
    2
    Всем спасибо! Справился сам кому интересно или у кого похожие проблемы выкладываю код.

    PHP:
    1. <?php
    2.  
    3.     $host = '127.0.0.1';
    4.     $db   = 'gigal';
    5.     $user = 'root';
    6.     $pass = '';
    7.     $charset = 'utf8';
    8.     $objectId = '';
    9.     $image = '';
    10.     $row = '';
    11.     $id = '';
    12.     $number_catalog = 1;
    13.  
    14.     $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    15.     /*
    16.     $opt = [
    17.         PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    18.         PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    19.         PDO::ATTR_EMULATE_PREPARES   => false,
    20.     ];
    21.     */ // TODO
    22.    
    23.     $pdo = new PDO($dsn, $user, $pass);
    24.  
    25.     $stmt = $pdo->query('SELECT * FROM id_images');
    26.  
    27.     while ($row = $stmt->fetch(PDO::FETCH_LAZY))
    28.     {
    29.         $row_object = $row['objectId'];
    30.         $row_image = $row['image'];
    31.         $id_image = $row['id'];
    32.         $type_image = $row['ext'];
    33.  
    34.         $count_dir = count(glob("../uploads/image/{$number_catalog}/*"));
    35.  
    36.         if($count_dir < 100) {
    37.         $strukture = "../uploads/image/{$number_catalog}/";
    38.         $path = $strukture.$row_object;
    39.         mkdir($strukture,true);
    40.         mkdir($path,true);
    41.         file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image);
    42.         } else {
    43.             $number_catalog++;
    44.             mkdir($strukture,true);
    45.             mkdir($path,true);
    46.             file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image);
    47.         }
    48.        
    49.     }
    50. ?>
    Единственный вопрос у меня картинки не открываются но понятно там ширины и высоты у них нет но в базе данных есть таблицы с шириной и высотой можно же при выводе передавать из таблицы в файл ширину и высоту и при выводе они будут работать?
     
  6. bogdan_titomir

    bogdan_titomir Новичок

    С нами с:
    7 окт 2017
    Сообщения:
    159
    Симпатии:
    2
    Проблема решена, Модераторы закройте тему пожалуйста.
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Да ну, смысл ее закрывать? :)
    Может кому полезно будет, может кто отпишется, или предложит альтернативу.
     
  8. bogdan_titomir

    bogdan_titomir Новичок

    С нами с:
    7 окт 2017
    Сообщения:
    159
    Симпатии:
    2
    Ясно, будем знать ;)