Forum Webscript.Ru
Программирование => Perl => Тема начата: 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.
Уже всё перепробывал - в чём моя ошибка?
-
Скрипт, а именно часть отсылки, в студию.
-
$::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();
-
print -s \'/home/test/REPORT\'.$curr.\'.xls\';
перед
$ftp->put(\'/home/test/REPORT\'.$curr.\'.xls\') or die "get failed ", $ftp->message;
выставь, какой размер?
Неплохо также закрыть workbook после оканчания создания документа перед отправкой на фтп
$workbook->close();
-
спасибо большое
$workbook->close(); - помог :)