Forum Webscript.Ru

Программирование => Perl => Тема начата: micolo от 29 Января 2007, 07:27:20

Название: загрузка через Net::FTP
Отправлено: micolo от 29 Января 2007, 07:27:20
У меня такая проблема. Мне нужно сформировать из базы .xls файл и сразу загрузить его по ФТП. Файл формируется, но загружаться по фтп не хочет, т.е. появляется на фтп файл, с нужным название но абсолютно пустой. Думал проблема в том что файл не успевает сфорироваться и начинает закачиваться - ставивил sleep после формировании файла, не помогает. Доступ везде стоит. Дебаг через консоль ошибок не даёт.

Net::FTP>>> Net::FTP(2.75)
Net::FTP>>>   Exporter(5.58)
Net::FTP>>>   Net::Cmd(2.26)
Net::FTP>>>   IO::Socket::INET(1.29)
Net::FTP>>>     IO::Socket(1.29)
Net::FTP>>>       IO::Handle(1.25)
Net::FTP=GLOB(0x8590880)<<< 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
Net::FTP=GLOB(0x8590880)<<< 220-You are user number 4 of 10 allowed.
Net::FTP=GLOB(0x8590880)<<< 220-Local time is now 22:32. Server port: 21.
Net::FTP=GLOB(0x8590880)<<< 220-IPv6 connections are also welcome on this server.
Net::FTP=GLOB(0x8590880)<<< 220 You will be disconnected after 15 minutes of inactivity.
Net::FTP=GLOB(0x8590880)>>> user test
Net::FTP=GLOB(0x8590880)<<< 331 User alserftp OK. Password required
Net::FTP=GLOB(0x8590880)>>> PASS ....
Net::FTP=GLOB(0x8590880)<<< 230-User alserftp has group access to:  80
Net::FTP=GLOB(0x8590880)<<< 230 OK. Current directory is /
Net::FTP=GLOB(0x8590880)>>> CWD out
Net::FTP=GLOB(0x8590880)<<< 250 OK. Current directory is /out
Net::FTP=GLOB(0x8590880)>>> CWD code
Net::FTP=GLOB(0x8590880)<<< 250 OK. Current directory is /out/code
Net::FTP=GLOB(0x8590880)>>> TYPE I
Net::FTP=GLOB(0x8590880)<<< 200 TYPE is now 8-bit binary
Net::FTP=GLOB(0x8590880)>>> PASV
Net::FTP=GLOB(0x8590880)<<< 227 Entering Passive Mode (192,168,0,2,44,241)
Net::FTP=GLOB(0x8590880)>>> STOR TEST_REPORT280107.xls
Net::FTP=GLOB(0x8590880)<<< 150 Accepted data connection
Net::FTP=GLOB(0x8590880)<<< 226 File successfully transferred
Net::FTP=GLOB(0x8590880)>>> QUIT
Net::FTP=GLOB(0x8590880)<<< 221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
Net::FTP=GLOB(0x8590880)<<< 221 Logout.

 

Уже всё перепробывал - в чём моя ошибка?
Название: загрузка через Net::FTP
Отправлено: NeoNox от 29 Января 2007, 11:43:42
Скрипт, а именно часть отсылки, в студию.
Название: загрузка через Net::FTP
Отправлено: micolo от 29 Января 2007, 13:13:06


$::dbs = DBI->connect("dbi:Pg:dbname=test","test","test",{PrintError => 0});

if ($DBI::err != 0)
{  print $DBI::errstr . "\\n";
exit($DBI::err);
}

my $workbook = Spreadsheet::WriteExcel->new("/home/test/REPORT".$curr.".xls");
$worksheet   = $workbook->addworksheet();
$format      = $workbook->addformat();

$format->set_bold();
$format->set_align(\'center\');

$worksheet->set_column(0, 0,  30);
$worksheet->set_column(0, 1,  30);
$worksheet->set_column(0, 2,  30);

$worksheet->write(0, 0, decode(\'cp1251\', \'Поле1\'), $format);
$worksheet->write(0, 1, decode(\'cp1251\', \'Поле2\'), $format);
$worksheet->write(0, 2, decode(\'cp1251\', \'Поле3\'), $format);

$query = "Select distinct code_product from report where time_create>".$time1." and time_create<".$time2."";
$sth = $dbs->prepare($query);
$rv = $sth->execute();


my $fo=1;
while ($ref = $sth->fetchrow_hashref())
{

($tablename) = ($ref->{\'code_product\'});


$querys = "Select count(*) from report where code_product=".$tablename." and time_create>".$time1." and time_create<".$time2."";
$sths = $dbs->prepare($querys);
$rv = $sths->execute();
@refs = $sths->fetchrow_array();

$worksheet->write($fo, 0, "$tablename");
$worksheet->write($fo, 1, $refs[0]);

$fo++;
}
$sths->finish();
$::dbs->disconnect();

$ftp = Net::FTP->new("192.168.0.1",Timeout => 30, Debug => 1, Passive =>1) ||  die "Can\'t connect to ftp server.\\n";

$ftp->login(\'test\',\'test\') || "error.\\n";

 $ftp->cwd("out");
 $ftp->cwd("code");

#set the mode to ascii
#$ftp->ascii();
   #закачка на фтп
$ftp->binary();
$ftp->put(\'/home/test/REPORT\'.$curr.\'.xls\')  or die "get failed ", $ftp->message;

#отключение от фтп
$ftp->quit();


Название: загрузка через Net::FTP
Отправлено: NeoNox от 29 Января 2007, 13:20:51
print -s \'/home/test/REPORT\'.$curr.\'.xls\';
перед
$ftp->put(\'/home/test/REPORT\'.$curr.\'.xls\')  or die "get failed ", $ftp->message;
выставь, какой размер?
Неплохо также закрыть workbook после оканчания создания документа перед отправкой на фтп
$workbook->close();
Название: загрузка через Net::FTP
Отправлено: micolo от 29 Января 2007, 13:32:38
спасибо большое
$workbook->close(); - помог :)