Posted 23 июля, 20168 yr comment_110467 Коллеги, заметил что в старых темах где были прикреплены к посту файлы в виде pdf,rar,txt то при попытке скачать их ведет на 404 сами файлы существуют в папке uploads/месяц_год/.... подобные файлы лежат в виде: Matrix_RS232_Manual_ENG_VTIRS3.pdf.cf246f74331cd75f994067c0c279b1bf я могу их ручками восстановить, но это весьма утомительно с аттачами которые JPG,PNG проблем нет. с ними все ок. и лежать они в таком виде в этих же папках: post-10273-0-08805000-1327258729.jpg и post-10273-0-08805000-1327258729_thumb.jpg Есть ли инструмент восстановления аттачей?
23 июля, 20168 yr Author comment_110468 полез в базу и стал ковырять на преимере вот такого файла: G250A09.BIN в таблице все *_attachments у него в поле location записан левый путь - monthly_01_2012/post-8076-0-20623400-1327727423.ipb а сам файл лежит вот с таким именем monthly_01_2012/G250A09.BIN.8ba01e8a337afbd623bfbd245cc64d3b заменив в таблице на правильный естественно все скачивается как и положено. Господа - поясните в какой момент такое произошло? может я забыл чего сделать при переходе с одной ветки IPB3.3 на IPB3.4 ? заранее спасибо. просто ну дофига аттачей править иначе.
25 июля, 20168 yr Author comment_110541 В общем почин эту хрень. Случилось такое пару недель назад как оказалось. Что предшествовало - ХЗ. скриптом все файлы переименовал все работает Кому надо прикладываю скрипт: #!/usr/bin/perl use strict; use DBI; my $path = '/______ваш путь____/forum/uploads/'; my $dbh = DBI->connect("dbi:mysql:ИМЯБД:127.0.0.1:3306", "ЮЗЕР", "ПАЗЗЗЗ", {RaiseError => 1}) || die "Unable to connect"; process(); $dbh->disconnect() || "Unable to disconnect"; exit; sub process() { my %used = {}; my $sth = $dbh->prepare( <<SQL select attach_file, attach_location, attach_filesize from ipb_attachments SQL ) || die "Unable to prepare"; $sth->execute() || die "Unable to execute"; while (my $row = $sth->fetchrow_hashref) { my $fname = $row->{'attach_file'}; my $fpath = $row->{'attach_location'}; my $fsize = $row->{'attach_filesize'}; my @stat = stat($path . $fpath); if (@stat) { next; } my $dir; if ($fpath =~ /^(.*\/)/) { $dir = $1; } else { print STDERR "Error: No path in '", $fpath, "'\n"; next; } my @list = glob('"' . $path . $dir . $fname . '.*"'); my $n = scalar(@list); if ($n == 0) { print STDERR "Error: No file '", $dir . $fname, ".*'\n"; next; } if ($n == 1) { @stat = stat($list[0]); if ($stat[7] != $fsize) { print STDERR "Error: File '", $dir . $fname, "' size mismatch (", $fsize, " <> ", $stat[7], ")\n"; next; } make_cmd($list[0], $path . $fpath); next; } if ($n > 1) { my $done = 0; foreach my $fn (@list) { @stat = stat($fn); if (($stat[7] == $fsize) && (!defined($used{$fn}))) { $used{$fn} = 1; make_cmd($fn, $path . $fpath); $done = 1; } if ($done) { last; } } if (!$done) { print STDERR "Error: no files matches name = '", $dir . $fname, "', size = ", $fsize, "\n"; next; } } } $sth->finish(); } sub make_cmd() { my ($src, $dst) = @_; print 'mv "', $src, '" "', $dst, '"', "\n"; }
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.