Обьясните мне пожалуйста для чего в загрузках сделан пункт Обновление файлов?
Я совсем не ожидал, что он все дополнительные файлы от загрузок сделает как отдельные загрузки.
Для чего вообще это надо?
Теперь у меня Кроме нормальных загрузок - ещё и поштучные дубли из 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&do=clean&id=' . $id . '">' . _t('Remove missing files') . '</a><br>' .
'<a href="?act=recount&do=clean&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&yes&id=' . $id . '&mod=1">' . _t('Current folder') . '</a></li>'
. '<li><a href="?act=scan_dir&yes&id=' . $id . '">' . _t('Current folder and all subfolders') . '</a></li>';
}
echo '<li><a href="?act=scan_dir&yes">' . _t('Entire Downloads') . '</a></li>'
. '</ul></p></div>';
}
Добавлено: 15.05.2019 / 09:57
Как эту байду переделать чтобы она наоборот, удаляла файлы, которые нигде не прописаны в БД?