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


Автор: bamper 24.7.2008, 16:37
Ребята, подскажите что не так с скриптом. Скрипт возращает только один файл, а не все. 

Код

    use Net::FTPSSL;
    my $ftps = Net::FTPSSL->new('ftpssl.blablabla.net', 
                              Port => 21,
                              Encryption => 'E',
                              Debug => 1) 
    or die "Can't open connection to FTP Server";

    $ftps->login('login', 'password') or die "Can't login: ", $ftps->$last_message();

    my $file;
    my @filelist =  $ftps->nlst("folder") or die "Can't get filelist ", $ftps->last_message;
    my $fileCount =  $ftps->nlst("folder");
    $ftps->cwd("/folder") or die "Can't change directory: ", 

    $ftps->binary;
    foreach $file (@filelist)
    {    
        $file =~ s#folder/##g;
        $ftps->get($file,$file) or die "Can't get file: ", $ftps->last_message;
    }
    $ftps->quit();


мдя... полсотни просмотров - ни одного ответа... хоть бы кто-то посочувствовал...

Автор: shamber 25.7.2008, 10:11
 smile посочувствовал

ЗЫ по коду
зачем  
Код

my $fileCount =  $ftps->nlst("folder");
 если можно просто 
Код

 my @filelist =  $ftps->nlst("folder") or die "Can't get filelist ", $ftps->last_message;
   my $fileCount =  @filelist;


Автор: bamper 25.7.2008, 21:22
та count роли не играет. это мелочь...

Автор: korob2001 25.7.2008, 22:33
Цитата

$ftps->login('login', 'password') or die "Can't login: ", $ftps->$last_message();

Global symbol "$last_message" requires explicit package name at Untitled line 10.

Автор: bamper 25.7.2008, 23:28
Цитата(korob2001 @ 25.7.2008,  22:33)
Цитата

$ftps->login('login', 'password') or die "Can't login: ", $ftps->$last_message();

Global symbol "$last_message" requires explicit package name at Untitled line 10.

с last message проблем у меня нету. да и убрать их совсем можно. вот что мое возращает: 
 
Код

>>> PROT P
<<< 200 PROT P successful. Data channel will be protected.
>>> PASV
<<< 227 Entering Passive Mode (150,105,62,17,190,236)
>>> RETR file.txt
<<< 150 Opening BINARY mode data connection.
<<< 226 Transfer complete.
>>> TYPE I
Use of uninitialized value in substr at C:/Perl/site/lib/Net/FTPSSL.pm line 685.
Argument "" isn't numeric in numeric eq (==) at C:/Perl/site/lib/Net/FTPSSL.pm line 573.
>>> PBSZ 0
Use of uninitialized value in substr at C:/Perl/site/lib/Net/FTPSSL.pm line 685.
Argument "" isn't numeric in numeric eq (==) at C:/Perl/site/lib/Net/FTPSSL.pm line 555.
>>> PROT P
Use of uninitialized value in substr at C:/Perl/site/lib/Net/FTPSSL.pm line 685.
Argument "" isn't numeric in numeric eq (==) at C:/Perl/site/lib/Net/FTPSSL.pm line 549.
>>> PASV
Use of uninitialized value in concatenation (.) or string at C:/Perl/site/lib/Net/FTPSSL.pm line 13
.
Use of uninitialized value in substr at C:/Perl/site/lib/Net/FTPSSL.pm line 136.
Argument "" isn't numeric in numeric eq (==) at C:/Perl/site/lib/Net/FTPSSL.pm line 136.
Can't set passive mode! at FTPSSL.pl line 28


line 28 - это:
    $ftps->get($file,$file) or die "Can't get file: ", $ftps->last_message;

Автор: korob2001 26.7.2008, 11:45
Посмотри что содержит массив @filelist после этой строки:
Код

my @filelist =  $ftps->nlst("folder") or die "Can't get filelist ", $ftps->last_message;

т.е.
Код

print qq[\"@{[join("\",\"",@filelist)]}\"\n];

Убедись, что в нём содержится именно то, что ты ожидал. Кавычки вокруг элементов я создал, для того, что бы было видно невидимые символы, такие как пробелы.

PS: Если знаешь какой-нить открытый сервер FTP, работающий по защищённому каналу, дай ссылку. Просто тестировать мне негде.

Автор: bamper 26.7.2008, 19:30
Цитата(korob2001 @ 26.7.2008,  11:45)
Код

print qq[\"@{[join("\",\"",@filelist)]}\"\n];


выводит следующее:
Код

","folder/file.txt

следующий код выводит список всех файлов:
Код

    foreach $file (@filelist)
    {    
    print "$file \n";
    }

список правильный и как бы все должно работать...

ps: фришного ftp ssl сервера незнаю :(

Автор: Egik2 29.7.2008, 16:50
А этот ftpssl нормально работает? А то я не могу разобраться с sftp, как разорвать соединение.Вот подумываю перейти на ftpssl. С ним таких проблем нет? И что нужно на серверной стороне, чтобы он работал, какие установки, а то для sftp нужен только sshd.

Автор: bamper 29.7.2008, 17:40
Цитата(Egik2 @ 29.7.2008,  16:50)
А этот ftpssl нормально работает? А то я не могу разобраться с sftp, как разорвать соединение.Вот подумываю перейти на ftpssl. С ним таких проблем нет? И что нужно на серверной стороне, чтобы он работал, какие установки, а то для sftp нужен только sshd.

работает нормально. файлы тянет. связь рвет. только вот списком у меня не получаеться - ну может у Вас получиться. со стороны сервера незнаю что должно быть. 
дополнительную информацию можна найти на cpan http://search.cpan.org/~kral/Net-FTPSSL-0.04/FTPSSL.pm. 

Автор: Egik2 30.7.2008, 08:42
Советую посмотреть на модуль Net::SFTP::Foreign, если что то не получается, а надо организовать пересылку файлов. Пока в cpan про него написано то что надо. Пытаюсь разобраться.

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