Проверка файла на уникальность

2.18K
.
# kantry (14.09.2018 / 03:13)
ramzes, Это не я так проектирую, это математика, которая имеет такую величину как бесконечность, так вот эта величина - отнюдь не математическая, всю математику множит на ноль
Да это надо дела
в фоне можно делать чем угодно. выбор за тем кто реализует.
про математико ШО? и к чему вообще?
.
Hey guys! Finally I'm gonna change status!?
ramzes, Про математику ты просто не хочешь сосредоточиться
Любая хеш функция с переменной длинной входящих, и постоянной длинной выходящих данных, обязана иметь пересечения. Поэтому нет смысла городить в некритичных случаях, что то лишнее.
Кстати выше пример с одинаковыми файлами(в принципе), но с разными хешами, один из примеров бесполезной проверки.
.
Срочно ищу чертёж машины времени ⏳
kantry, Вот поэтому я делаю ещё и список похожих по имени загрузок
.
kantry, моя твоя не понимать. извлечение хеша файла само по себе подразумевает наиболее точное определение уникальности файла, если тебе это не критично, то нафига ты вообще будешь это делать? противоречит логики, и математика как то вообще не при чем
.
Chifty
Срочно ищу чертёж машины времени ⏳
Добавлено: 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); иногда крашится скрипт.
.
Hey guys! Finally I'm gonna change status!?
# 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();
.
Chifty
Срочно ищу чертёж машины времени ⏳
Апгрейд
Переехал на Джон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) и вывести весь список дубликатов. но не могу сделать. помогите.
.
Hey guys! Finally I'm gonna change status!?
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
Всего: 59