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

2.18K
.
kantry
Hey guys! Finally I'm gonna change status!?
Chifty,
хочу научиться как правильно

Надо в цикле собрать запрос(или данные для запроса) а сам запрос делать после выхода из цикла. Опримизировать внутри цикла не вижу смысла, что так, что эдак таблица блокируется.
$string = 'Не обязательно чере IN делать, можешь LIKE использовать.';
$arr = explode(' ', $string);
if (count($arr)) {
    $res = $db->query('SELECT * FROM `download__files` WHERE `name` IN("'. join('","', $arr) . '")')->fetchAll();
}
.
Добавлено: 11.09.2018 / 14:23
Это у вас для чего?
$javadir = preg_replace('/\..\//', '/', $javadir);
Любите стрелять по воробьям из пушки?

Добавлено: 11.09.2018 / 14:28
* (+/-)
.
Срочно ищу чертёж машины времени ⏳
kantry, Fatal error: Uncaught PDOException: SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s) in /srv/disk2/2498365/www/oldfag.cf/downloads/includes/files_upload.php:118 Stack trace: #0 /srv/disk2/2498365/www/oldfag.cf/downloads/includes/files_upload.php(118): PDO->query('SELECT * FROM `...') #1 /srv/disk2/2498365/www/oldfag.cf/downloads/index.php(141): require_once('/srv/disk2/2498...') #2 {main} thrown in /srv/disk2/2498365/www/oldfag.cf/downloads/includes/files_upload.php on line 118
.
Срочно ищу чертёж машины времени ⏳
# ДоХтор (11.09.2018 / 14:28)
Это у вас для чего? $javadir = preg_replace('/\..\//', '/', $javadir); Любите стрелять по воробьям из пушки?
Это мне надо было в генерации jad-файла убрать двоеточие из пути к файлу
Там на стыке $homeurl и $res_down['dir'] получалось oldfag.cf/../files/downloads/files.........
.
Срочно ищу чертёж машины времени ⏳
# kantry (11.09.2018 / 13:27)
$res = $db->query('SELECT * FROM `download__files` WHERE `name` IN("'. join('","', $arr) . '")')->fetchAll();
Вот на эту строку ругается. Видимо нельзя массив в запрос совать
.
ДоХтор
# Chifty (11.09.2018 / 14:38)
Это мне надо было в генерации jad-файла убрать двоеточие из пути к файлу
Там на стыке $homeurl и $res_down['dir'] получалось oldfag.cf/../files/downloads/files.........
Это понятно. Просто для подобных замен существуют более универсальные методы, которые предпочтительнее в использовании из-за скорости их обработки. А регулярные выражения использовать нужно по назначению.
PS:Примеры я написал в предыдущем посту.
.
kantry
Hey guys! Finally I'm gonna change status!?
# Chifty (11.09.2018 / 14:40)
Вот на эту строку ругается. Видимо нельзя массив в запрос совать
Там и не должно быть массива Ты что то не так сделал, попробуй вместо query prepare сделать, и после него вывести подготовленный запрос var_dump($stmp);
-- запрос должен быть такого типа
SELECT * FROM `download__files` WHERE `name` IN("Не","обязательно","чере","IN","делать,","можешь","LIKE","использовать.");
.
Chifty
Срочно ищу чертёж машины времени ⏳
$arr = explode(' ', $name);
if (count($arr)) {
   $similar = $db->query('SELECT `rus_name` FROM `download__files` WHERE `name` LIKE "%SMS%"')->fetchAll();
   $error[] = '<div class="rmenu">Возможно выпытаетесь загрузить один из следующих файлов:.<br><b>' . $similar[0]['rus_name'] .'</b></div>';
   }


Вот так работает, но показывает только первый элемент массива (ну и поиск только по одномуслову).
Подредактируйте плс чтобы искало весь массив и выводило все элементы.
.
Hey guys! Finally I'm gonna change status!?
Chifty, С подготовленым запросом, на стеке откопал, чем мне ПДО и не нравится, вроде бульдозер, а ямку под рассаду выкопать не может
$arr = explode(' ', $name);
    if (!empty($arr)) {
        $sth = $db->prepare('SELECT `rus_name` FROM `download__files` WHERE `name` IN('. join(',', array_fill(0, count($arr), '?')) . ')');
        $sth->execute($arr);
        $row = $sth->fetchAll();
        if (!empty($row)) {
            foreach($row as $val) {
                $error[] = '<div class="rmenu">Возможно выпытаетесь загрузить один из следующих файлов:.<br><b>' . $val['rus_name'] .'</b></div>';
            }
        }
    }
.
# Simba (09.09.2018 / 21:06)
Просто md5 не рекомендовал бы использовать. Сталкивался с пересечениями даже при количестве файлов в 4к штук.
Комбо вариант используйте. храните 2 хэша md5_file и sha1_file. Так вероятность пересечен
в целях экономии ресурсов (все таки вычисление хеша прилично отжирает) можно использовать md5_file+filetype+filesize
кстати при 430к файлов ни одной коллизии не случилось) так до сих пор не встретил этого ни разу)
надо про мд5+ша1 запомнить)
Всего: 59