Просмотр поста

.
Chifty
Срочно ищу чертёж машины времени ⏳
Добавлено: 15.05.2019 / 09:24
Обьясните мне пожалуйста для чего в загрузках сделан пункт Обновление файлов?
Я совсем не ожидал, что он все дополнительные файлы от загрузок сделает как отдельные загрузки.
Для чего вообще это надо?
Теперь у меня Кроме нормальных загрузок - ещё и поштучные дубли из files__more.

Добавлено: 15.05.2019 / 09:25
Хорошо хоть бэкап сделал несколько дней назад.

Добавлено: 15.05.2019 / 09:40
Вот код
if (isset($_GET['yes'])) {
                // Сканирование папок
                $array_dowm = [];
                $array_id = [];
                $array_more = [];
                $query = $db->query("SELECT `dir`, `name`, `id` FROM `download__files`");

                while ($result = $query->fetch()) {
                    $array_dowm[] = $result['dir'] . '/' . $result['name'];
                    $array_id[$result['dir'] . '/' . $result['name']] = $result['id'];
                }

                $queryCat = $db->query("SELECT `dir`, `id` FROM `download__category`");

                while ($resultCat = $queryCat->fetch()) {
                    $array_dowm[] = $resultCat['dir'];
                    $array_id[$resultCat['dir']] = $resultCat['id'];
                }

                $query_more = $db->query("SELECT `name` FROM `download__more`");

                while ($result_more = $query_more->fetch()) {
                    $array_more[] = $result_more['name'];
                }

                $array_scan = [];

                function scan_dir($dir = '')
                {
                    static $array_scan;
                    global $mod;
                    $arr_dir = glob($dir . '/*');

                    foreach ($arr_dir as $val) {
                        if (is_dir($val)) {
                            $array_scan[] = $val;
                            if (!$mod) {
                                scan_dir($val);
                            }
                        } else {
                            $file_name = basename($val);
                            if ($file_name != '.' && $file_name != '..' && $file_name != 'index.php' && $file_name != '.htaccess' && $file_name != '.svn') {
                                $array_scan[] = $val;
                            }
                        }
                    }

                    return $array_scan;
                }

                $i = 0;
                $i_two = 0;
                $i_three = 0;
                $arr_scan_dir = scan_dir($scan_dir);

                if ($arr_scan_dir) {
                    $stmt_c = $db->prepare("
                        INSERT INTO `download__category`
                        (`refid`, `dir`, `sort`, `name`, `field`, `rus_name`, `text`, `desc`)
                        VALUES (?, ?, ?, ?, 0, ?, '', '')
                    ");

                    $stmt_m = $db->prepare("
                        INSERT INTO `download__more`
                        (`refid`, `time`, `name`, `rus_name`, `size`)
                        VALUES (?, ?, ?, ?, ?)
                    ");

                    $stmt_f = $db->prepare("
                        INSERT INTO `download__files`
                        (`refid`, `dir`, `time`, `name`, `text`, `rus_name`, `type`, `user_id`, `about`, `desc`)
                        VALUES (?, ?, ?, ?, 'Download', ?, 2, ?, '', '')
                    ");

                    foreach ($arr_scan_dir as $val) {
                        if (!in_array($val, $array_dowm)) {
                            if (is_dir($val)) {
                                $name = basename($val);
                                $dir = dirname($val);
                                $refid = isset($array_id[$dir]) ? (int)$array_id[$dir] : 0;
                                $sort = isset($sort) ? ($sort + 1) : time();

                                $stmt_c->execute([
                                    $refid,
                                    $dir . "/" . $name,
                                    $sort,
                                    $name,
                                    $name,
                                ]);

                                $array_id[$dir . "/" . $name] = $db->lastInsertId();

                                ++$i;
                            } else {
                                $name = basename($val);
                                if (preg_match("/^file([0-9]+)_/", $name)) {
                                    if (!in_array($name, $array_more)) {
                                        $refid = (int)str_replace('file', '', $name);
                                        $name_link = htmlspecialchars(mb_substr(str_replace('file' . $refid . '_', _t('Download') . ' ', $name), 0, 200));
                                        $size = filesize($val);

                                        $stmt_m->execute([
                                            $refid,
                                            time(),
                                            $name,
                                            $name_link,
                                            $size,
                                        ]);

                                        ++$i_two;
                                    }
                                } else {
                                    $isFile = $start ? is_file($val) : true;
                                    if ($isFile) {
                                        $dir = dirname($val);
                                        $refid = (int)$array_id[$dir];

                                        $stmt_f->execute([
                                            $refid,
                                            $dir,
                                            time(),
                                            $name,
                                            $name,
                                            $systemUser->id,
                                        ]);

                                        if ($start) {
                                            $fileId = $db->lastInsertId();
                                            $screenFile = false;

                                            if (is_file($val . '.jpg')) {
                                                $screenFile = $val . '.jpg';
                                            } elseif (is_file($val . '.gif')) {
                                                $screenFile = $val . '.gif';
                                            } elseif (is_file($val . '.png')) {
                                                $screenFile = $val . '.png';
                                            }

                                            if ($screenFile) {
                                                $is_dir = mkdir($screens_path . '/' . $fileId, 0777);

                                                if ($is_dir == true) {
                                                    @chmod($screens_path . '/' . $fileId, 0777);
                                                }

                                                @copy($screenFile, $screens_path . '/' . $fileId . '/' . str_replace($val, $fileId, $screenFile));
                                                unlink($screenFile);
                                            }

                                            if (is_file($val . '.txt')) {
                                                @copy($val . '.txt', DOWNLOADS . 'about/' . $fileId . '.txt');
                                                unlink($val . '.txt');
                                            }
                                        }

                                        ++$i_three;
                                    }
                                }
                            }
                        }
                    }

                    $stmt_c = null;
                    $stmt_m = null;
                    $stmt_f = null;
                }

                if ($id) {
                    $dir_files = $db->query("SELECT COUNT(*) FROM `download__files` WHERE `type` = '2' AND `dir` LIKE '" . ($res_down_cat['dir'] . '/' . $res_down_cat['name']) . "%'")->fetchColumn();
                    $db->exec("UPDATE `download__category` SET `total` = '$dir_files' WHERE `id` = '" . $id . "'");
                } else {
                    $req_down = $db->query("SELECT `dir`, `name`, `id` FROM `download__files` WHERE `type` = 1");

                    while ($res_down = $req_down->fetch()) {
                        $dir_files = $db->query("SELECT COUNT(*) FROM `download__files` WHERE `type` = '2' AND `dir` LIKE '" . ($res_down['dir'] . '/' . $res_down['name']) . "%'")->fetchColumn();
                        $db->exec("UPDATE `download__category` SET `total` = '$dir_files' WHERE `id` = '" . $res_down['id'] . "'");
                    }
                }

                echo '<div class="menu"><b>' . _t('Added') . ':</b><br>' .
                    _t('Categories') . ': ' . $i . '<br>' .
                    _t('Files') . ': ' . $i_three . '<br>' .
                    _t('Additional Files') . ': ' . $i_two . '</div>';

                echo '<div class="rmenu">' .
                    '<a href="?act=scan_dir&amp;do=clean&amp;id=' . $id . '">' . _t('Remove missing files') . '</a><br>' .
                    '<a href="?act=recount&amp;do=clean&amp;id=' . $id . '">' . _t('Update counters') . '</a></div>';
            } else {
                // Выбор режима обновления
                echo '<div class="menu"><p><h3>' . _t('Update') . '</h3><ul>';

                if ($id) {
                    echo '<li><a href="?act=scan_dir&amp;yes&amp;id=' . $id . '&amp;mod=1">' . _t('Current folder') . '</a></li>'
                        . '<li><a href="?act=scan_dir&amp;yes&amp;id=' . $id . '">' . _t('Current folder and all subfolders') . '</a></li>';
                }

                echo '<li><a href="?act=scan_dir&amp;yes">' . _t('Entire Downloads') . '</a></li>'
                    . '</ul></p></div>';
            }


Добавлено: 15.05.2019 / 09:57
Как эту байду переделать чтобы она наоборот, удаляла файлы, которые нигде не прописаны в БД?