Посоветуйте какие лучше параметры в таблице выбрать?
Посоветуйте какие лучше параметры в таблице выбрать?
# Chifty (10.09.2018 / 10:23)Зачем тебе еще таблица? Добавь поле для хеша, и достаточно, я те вроде выше понятный пример привел))
ну так накидайте набросок кода для 7го джона, пожалуйста
// вычисляем хеш файла
$file_hash = md5_file($_FILES["fail"]["tmp_name"]);
if ((move_uploaded_file($_FILES["fail"]["tmp_name"], "$load_cat/$fname")) == true) {
echo '<div class="phdr"><b>' . _t('Upload File') . ': ' . htmlspecialchars($res['rus_name']) . '</b></div>';
@chmod("$fname", 0755);
@chmod("$load_cat/$fname", 0755);
echo '<div class="gmenu">' . _t('File attached');
if ($set_down['mod'] && ($systemUser->rights < 6 && $systemUser->rights != 4)) {
echo _t('If you pass moderation, it will be added to the Downloads');
$type = 3;
} else {
$type = 2;
}
echo '</div>';
$stmt = $db->prepare("
INSERT INTO `download__files`
(`refid`, `dir`, `time`, `name`, `text`, `rus_name`, `type`, `user_id`, `about`, `desc`)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, '')
");
// add file_hash new column
// ALTER TABLE `download__files`
// ADD COLUMN `file_hash` VARCHAR(32) NULL AFTER `name`;
$res_double = $db->query(
'SELECT `name`, `dir` FROM `download__files` WHERE `file_hash`="' . $file_hash . '"'
)->fetchAll();
if (!empty($res_double)) {
// удаляем загруженый дубликат
unlink($load_cat . '/' . $fname);
// здесь собираем нужный массив для экзекуции из массива $double
// меняем путь на существующий файл, что надо изменяем и т д.
foreach($res_double as $double);
$load_cat = $double['dir'];
$fname = $double['name'];
// при удалении файла тоже надо предусмотреть ньюансы
}# kantry (08.09.2018 / 19:59)И вот с этим бы не помешала помощь
Хеш существующих файлов можно записать в таблицу как то так
select `name` /* или ай-ди в зависимости как у тебя файлы на диске названы */ from tbl
while () {
// тут пройти по файлам с $hash = md5_f
$dir_files2 = $db->query("SELECT * FROM `download__files`");
while ($res_down2 = $dir_files2->fetch()) {
$jar_file = $res_down2['name'];
$javadir = $res_down2['dir'];
$javadir = preg_replace('/\..\//', '/', $javadir);
$md5_hash2 = md5_file($config['homeurl'] . $javadir . '/' . $jar_file, $raw_output = true);
$db->exec("UPDATE `download__files` SET `md5` = '$md5_hash2' WHERE `id` = '" . $res_down2['id'] . "'");
}Chifty, А ошибка то какая? Их тысячи существует![]()
Путь к файлу у тебя не верный, нужен или полный url(что не желательно, жрать ресурсов много будет), или нормальный человеческий, понятный для файловой системы![]()
$dir_files2 = $db->query("SELECT `id`, `dir`, `name` FROM `download__files` WHERE `md5` IS NULL");
$stmt = $db->prepare('UPDATE `download__files` SET `md5` = ? WHERE id = ?');
while ($res_down2 = $dir_files2->fetch()) {
$jar_file = $res_down2['name'];
$javadir = $res_down2['dir'];
$javadir = preg_replace('/\..\//', '/', $javadir);
$md5_hash2 = md5_file(__dir__ . '/..' . $javadir . '/' . $jar_file, $raw_output = true);
$stmt->execute([$md5_hash2, $res_down2['id']]);
} kantry, почему-то все хэши 0х000000000000000000
Наверное ошибка в пути файла
А ещё бы для дополнительных файлов надо
# Chifty (11.09.2018 / 08:03)А как ты их увидеть умудрился?
kantry, почему-то все хэши 0х000000000000000000
$dir_files2 = $db->query("SELECT * FROM `download__files` ");
$stmt = $db->prepare('UPDATE `download__files` SET `md5` = ? WHERE id = ?');
$stmt2 = $db->prepare('UPDATE `download__more` SET `md5` = ? WHERE refid = ?');
while ($res_down2 = $dir_files2->fetch()) {
$jar_file = $res_down2['name'];
$javadir = $res_down2['dir'];
$javadir = preg_replace('/\..\//', '/', $javadir);
$test = __dir__ . $javadir . '/' . $jar_file;
$md5_hash2 = md5_file(__dir__ . $javadir . '/' . $jar_file, $raw_output = true);
$stmt->execute([$md5_hash2, $res_down2['id']]);
$dir_files3 = $db->query("SELECT * FROM `download__more` WHERE `refid` = '" .
$res_down2['id'] . "'");
while ($res_down3 = $dir_files3->fetch()) {
$jar_file2 = $res_down3['name'];
$md5_hash3 = md5_file(__dir__ . $javadir . '/' . $jar_file2, $raw_output = true);
$stmt2->execute([$md5_hash3, $res_down2['id']]);
}
echo $test;$name = explode(" ", $fname);
SELECT * FROM `download__files` WHERE `rus_name` = '" . $name[] . "' //не знаю как сделать перебор слов из массива прямо в запросе SQL.if (copy('http://' . $url, "$load_cat/$fname")) { Chifty, Не оптимально, но тебе какая разница, это один раз надо сделать.
При импорте там еще проще в общем то,
if (isset($_POST['submit'])) {var_dump(md5_file($_POST['fail'])); это хеш, дальше уже проверка в таблице и т д. Правда неплохо бы сам url сначала проверить, а то любители все что угодно могут в $_POST передать.
С дубликатами непонятно, если как у тебя написано, то where `name` in($array) можно использовать.
# kantry (11.09.2018 / 11:47)Один. Но хочу научиться как правильно.
Chifty, Не оптимально, но тебе какая разница, это один раз надо сделать.
При импорте там еще проще в общем то,
if (isset($_POST['submit'])) {var_dump(md5_file($_POST['fail'])); это хеш, дальше уж