# kantry (14.09.2018 / 03:13)
ramzes, Это не я так проектирую, это математика, которая имеет такую величину как бесконечность, так вот эта величина - отнюдь не математическая, всю математику множит на ноль
Да это надо дела
в фоне можно делать чем угодно. выбор за тем кто реализует.
про математико ШО? и к чему вообще?
ramzes, Про математику ты просто не хочешь сосредоточиться
Любая хеш функция с переменной длинной входящих, и постоянной длинной выходящих данных,
обязана иметь пересечения. Поэтому нет смысла городить в некритичных случаях, что то лишнее.
Кстати выше пример с одинаковыми файлами(в принципе), но с разными хешами, один из примеров бесполезной проверки.
kantry, Вот поэтому я делаю ещё и список похожих по имени загрузок
kantry, моя твоя не понимать. извлечение хеша файла само по себе подразумевает наиболее точное определение уникальности файла, если тебе это не критично, то нафига ты вообще будешь это делать? противоречит логики, и математика как то вообще не при чем
Добавлено: 28.09.2018 / 16:10
люди, помогите переделать функцию под Prepared Statement.
$res_double = $db->query('SELECT * FROM `download__files` WHERE `md5hash`="' . $md5_hash . '"')->fetch();
$res_double2 = $db->query('SELECT * FROM `download__more` WHERE `md5hash`="' . $md5_hash . '"')->fetch();
ибо из-за $md5_hash = md5_file($_FILES["fail"]["tmp_name"],
$raw_output = true); иногда крашится скрипт.
# Chifty (01.10.2018 / 16:05)
люди, помогите переделать функцию под Prepared Statement.
Может запрос?
$sth = $dbh->prepare('SELECT * FROM `download__files` WHERE `md5hash`= ?');
$sth->execute([$md5_hash]);
$res_double = $sth->fetch();
Апгрейд
Переехал на Джон9.
Пока работает так:
modules/downloads/includes/files_upload.php:
//где-то после 57 строки вставляем это
$md5_hash = md5_file($_FILES["fail"]["tmp_name"], true);
$stmt = $db->prepare('SELECT * FROM download__files WHERE md5hash = :md5hash');
$stmt->execute(['md5hash' => $md5_hash]);
$res_double = $stmt->fetch();
$stmt = $db->prepare('SELECT * FROM download__more WHERE md5hash = :md5hash');
$stmt->execute(['md5hash' => $md5_hash]);
$res_double2 = $stmt->fetch();
if (!empty($res_double)) {
$error[] = '<div class="rmenu">Такой файл уже есть! <br> Загрузка: <b>' . $res_double['rus_name'] .'</b><br> Файл: <b>' . $res_double['name'] . '</b><br> Название ссылки: <b>' . $res_double['text'] .'</b></div><div class="phdr"><button><a href="?act=view&id=' . $res_double['id'] . '">Перейти к файлу</a></button></div>';
} else if (!empty($res_double2)) {
$error[] = '<div class="rmenu">Такой файл уже есть! Он находится среди дополнительных файлов к загрузке.<br> Имя ссылки: <b>' . $res_double2['rus_name'] .'</b><br> Имя файла: <b>' . $res_double2['name'] . '</b></div><div class="phdr"><button><a href="?act=view&id=' . $res_double2['refid'] . '">Перейти к загрузке</a></button></div>';
}
//дизайн оповещения у меня под шаблон от 7 Джона. переделаете под себя.
в БД в таблицах
download__files и
download__more добавляем поле
md5hash
BINARY, длинна - 16, NULL, по умолчанию - NULL. (screenshot)
Если кто-то может лучше - перепишите код и выложите сюда.
если накатывать на живой сайт где могут быть несколько файлов с одинаковым хэш - надо как-то впихнуть foreach($res_double) и вывести весь список дубликатов. но не могу сделать. помогите.
Chifty, Ну так в рендер и передай массив
echo $view->render(
'downloads::file_upload_result',
[
'title' => __('Upload File'),
'page_title' => __('Upload File'),
'id' => $id,
'urls' => $urls,
'moderation' => $moderation ?? null,
'screen_attached' => $screen_attached ?? null,
'screen_attached_error' => $screen_attached_error ?? null,
/* как то так */ 'res_double' => $res_double,
]
);
а в шаблоне foreach