Jump to content

Featured Replies

Posted
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

Есть ли инструмент восстановления аттачей?

 

 

 

 

  • 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 ?

заранее спасибо. просто ну дофига аттачей править иначе.

 

  • 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.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.