Schrift
[thread]7276[/thread]

Probleme beim Überprüfen von Net::FTP



<< >> 4 Einträge, 1 Seite
Gast Gast
 2005-09-14 22:07
#58007 #58007
Ich versuche folgendes (als Teil eines Scriptes):

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
sub checkips
{
foreach $line(@IPLIST)
{
$CURRENTIP = "$line";
my $ftp = "";
$ftp = Net::FTP->new("$CURRENTIP", Debug => 1);
$ftp->login("anonymous",'-anonymous@') || do {$FTPCODE = "nologin"};

foreach(@FOLDERS)
{
$CURRENTFOLDER = "$_";
print "* Now scanning $CURRENTIP with folder $CURRENTFOLDER:";
if ($FTPCODE ne 'nologin')
{
$ftp->cwd("$CURRENTFOLDER") || do {$FTPCODE = "nocwd"};
if ($FTPCODE ne 'nocwd')
{
$ftp->put("$TESTFILE") || do {$FTPCODE = "noput"};

if ($FTPCODE ne 'noput')
{
push(@OPENIPS, "IP: $CURRENTIP with Folder: $CURRENTFOLDER");
}
}

}

print "\n\n";
}
$ftp->quit();
}
}


Wie Ihr seht möchte ich nach jeder Net::FTP Aktion überprüfen, ob diese fehlgeschlagen ist, und nur dann weiter machen, wenn sie ok war. Meine Lösung funktioniert aber nicht, er mach lediglich das Login. Was habe ich falsch gemacht? Gibt es ev. einen besseren Weg?

Bin für jeden Hinweis dankbar...

mfg

Thomas
svenXY
 2005-09-15 13:17
#58008 #58008
User since
2005-09-15
33 Artikel
BenutzerIn
[default_avatar]
--geändert--
siehe unten
Gruss,
svenXY\n\n

<!--EDIT|svenXY|1126781807-->
renee
 2005-09-15 13:28
#58009 #58009
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wie hast Du sichergestellt, dass der Login funktioniert?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
svenXY
 2005-09-15 14:32
#58010 #58010
User since
2005-09-15
33 Artikel
BenutzerIn
[default_avatar]
Hi,

ich bin mir nicht sicher, warum es bei Deinem Code nicht klappt, ich habe ihn aber mal etwas umgeschrieben. Bei mir funktioniert es so.

Ein paar Anregungen zu deinem Code:

Du weist oft Variablen so etwas zu:
Code: (dl )
1
2
my $var1;
$var1 = "$var_old";

das Quotinng macht den code langsam und ist unnötig. Ausserdem kann man beides auf eine Zeile reduzieren:
Code: (dl )
my $var1 = $var_old;


Es ist auch nicht notwendig, die FTPCODE Variable mitzuschleifen und dann mit if zu überprüfen. Es reicht hier, einfach zu testen, ob etwas geklappt hat und wenn nicht mit "next;" zum nächsten Schleifendurchlauf zu springen.

Weiterhin ist es besser, Parameter beim Funktionsaufruf explizit zu übergeben (arrays und hashes allerdings nur als Referenz)

Als Überlegung: Was soll passieren, wenn man erfolgreich in das Verzeichnis wechseln kann, aber keine Schreibrechte hat?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use strict;
use Net::FTP;

my $ftp_user = 'anonymous';
my $ftp_pwd = 'anonymous';

my @FOLDERS = ('folder1' , 'folder2');
my @IPLIST = ('xxx.xxx.xxx.xxx');
my $TESTFILE = 'testfile.txt';


my @open_ips = checkips(\@FOLDERS, \@IPLIST, $TESTFILE, $ftp_user, $ftp_pwd);
print join("\n", @open_ips);

sub checkips
{
my ($ref_FOLDERS, $ref_IPLIST, $TESTFILE, $user, $pwd) = @_;
my @OPENIPS;
foreach my $CURRENTIP (@{$ref_IPLIST}) {
print "Trying $CURRENTIP\n";
my $ftp = Net::FTP->new($CURRENTIP, Debug => 0) or ( print "Cannot connect to $CURRENTIP: $@" and next );
$ftp->login($user,"-$pwd\@") or ( print "Cannot login " , $ftp->message and next );
foreach my $CURRENTFOLDER (@{$ref_FOLDERS}) {
print "* Now scanning $CURRENTIP with folder $CURRENTFOLDER:\n";
$ftp->cwd("/$CURRENTFOLDER") or ( print "Cannot change working directory to $CURRENTFOLDER: ", $ftp->message and next );
#print "PWD: " . $ftp->pwd . "\n";
$ftp->put("$TESTFILE") || ( print "Cannot put $TESTFILE to $CURRENTFOLDER: ", $ftp->message and next);
push(@OPENIPS, "IP: $CURRENTIP with Folder: $CURRENTFOLDER");
print "\n\n";
}
$ftp->quit();
}
return @OPENIPS;
}


Gruss,
svenXY
<< >> 4 Einträge, 1 Seite



View all threads created 2005-09-14 22:07.