Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Опять про работу с архивами


Автор: igorold 6.5.2006, 07:03
Я вычислил, что если архив не находится в каталоге скрипта, то он не разархивируется (линукс, мозилла)
я передаю имя файла из формы :
Код

<form name="import" method="POST" action="/ComplexDB/index.pl" enctype="multipart/form-data">
<input type="file" name="importarc">

в скрипте:
Код

my $UpArhiv = $self->query()->upload('importarc');
my $tarf = "$UpArhiv";

Код

если имя файла без кавычек:
my $tarf = $UpArhiv;  
то выдается ошибка: 
Error Undefined subroutine Fh::read at /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/Archive/Tar.pm line 251

Как сделать, чтобы я мог работать с архивом, выбранным в любом каталоге?
Один из вариантов, конечно - закачать архив на сервер и там с ним проработать, если других советов не будет,
я так и сделаю, а нельзя проще сделать? 

Автор: nitr 6.5.2006, 12:53
покумекай с правами на папки chmod 755

Добавлено @ 12:53 
вот протестил... создал папочку 111 положил туды архив и...
Код
#!/usr/bin/perl
use Archive::Tar;

my $tarf = './111/k-30.03.06_07.00.tgz';
my $tar = Archive::Tar->new();
$tar->read($tarf, 1);
my @fl = $tar->list_files();
foreach my $nfile (@fl) {
  print "\t", $nfile,"\n";
}


Цитата
D:\>1.pl
        dbreport
        fm-errors
        fm-reports
        linux-log/
        linux-log/syslog
        linux-log/messages
        linux-log/kernel_err
        linux-log/daemons_err
        linux-log/apcupsd
        pap_err
        pilot/
        pilot/pilot.log
        sys-stat


Добавлено @ 12:54 
тоже проверил во фряхе smile chmod 755 поставил и заработало... может у тя тоже ;) 

Автор: igorold 6.5.2006, 13:08
смысл не совсем в том, что архив не берется из подкаталога.
Смысл в том, что, когда я открываю файл и задаю подкаталог:
Код

my $tarf = './unzipped/kazan-30.03.06_07.00.tgz';

то он прекрасно открывается, а когда я выбираю этот архив через форму HTML(в данном примере $UpArhiv), то 
для открытия передается только имя и архив не открывается!
Если я также выбираю просто файл (в данном примере $ImportText), то я его могу закачать на сервер:
Код

    my $ImportText  = $self->query()->upload('importfile');
    my $UpArhiv = $self->query()->upload('importarc');
......................
                open (FILE2, "> $AbsolutePath/attached$Path/$NewFilename") or die $!;
                binmode $ImportText;
                binmode FILE2;
                while (<$ImportText>) {
                    print FILE2;
                }
                close FILE2;

в данном примере FILE2 - появляется на сервере .... а с архивом аналогично не могу проработать ... може я неправильно передаю имя файла ? 

Автор: nitr 6.5.2006, 14:07
т.е.? у тебя архив передаётся пролсто имя? без путей? тогда естественно неверно передаёшь этот параметр... а замем тебе подкаталоги?

Добавлено @ 14:08 
обдумай свой алгоритм, может чего нового придумаешь... я не понимаю зачем используешь такие пути smile 

Автор: igorold 6.5.2006, 14:55
мне нужно, чтобы архив можно было закачать с разных компьютеров сети, без привязки к каталогу.
Когда мы выбираем файл для закачки на сервер, то нам не важно где он находится, мы нажимаем на
HTML-форме кнопочку "файл", появляется форма выбора файла и все ... качаем его ...
но то же самое не проходит для архивов ... вот в чем для меня загадка .... 
может это свойство пакета, тогда остается только качать его на сервер и там делать с ним чего хош ....   

вообще, если я делаю выбор файла в линуксе с использованием Мозиллы, то если я выведу на печать то, что выбрал из переменной:
Код

my $UpArhiv = $self->query()->upload('importarc');

то выведется ТОЛЬКО имя файла, если то же самое сделаю с win-машины из EI, то выдается полное имя с подкаталогами! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)