Probleme perl Net::FTPSSL
drogba7213
Messages postés
1524
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
Voila je suis entrain de réaliser un petit progrmamme qui remplace filezilla pour des gens pas doué en informatique bref.
J'ai réalisé cette application en perl tk objet.
Voila je n'arrive pas a envoyé le fichier précédemment sélectionné je vosu met le code pour que vous puissiez m'aider je suis conscient qu'il y a beaucoup a regarder mais c'est important pour moi car c'est pour passer mon BTS mardi svp aidez moi merci d'avance
Donc le fichier Interface.pl
Le fichier Transferts.pm
le fichier Connexion.pm
et le fichier de configuration
Voila donc je t'explique le problème il s'avère que comme tu peut le voir je tente de mettre un fichier sur un ftp.
Hélas l'envoi ne fonctionne pas et je ne comprend pas pourquoi ca me met une erreur a la ligne
de Connexion.pm
Et voici l'erreur
<<+ 555 Host undefined
Tk::Error: Can't call method "login" on an undefined value at /home/seb/workspace/Islo_People/Connexion.pm line 86.
Tk callback for .frame1.button1
Tk::__ANON__ at /usr/lib/perl5/Tk.pm line 250
Tk::Button::butUp at /usr/lib/perl5/Tk/Button.pm line 175
<ButtonRelease-1>
(command bound to event)
Donc voila je sais que c'est un peu lourd a regardez mais tu ma demandé de bien situé le problème voila qu'y est fait je pense
Aide moi stp je suis vraiment bloqué stp
merci d'avance
Voila je suis entrain de réaliser un petit progrmamme qui remplace filezilla pour des gens pas doué en informatique bref.
J'ai réalisé cette application en perl tk objet.
Voila je n'arrive pas a envoyé le fichier précédemment sélectionné je vosu met le code pour que vous puissiez m'aider je suis conscient qu'il y a beaucoup a regarder mais c'est important pour moi car c'est pour passer mon BTS mardi svp aidez moi merci d'avance
Donc le fichier Interface.pl
#!/usr/bin/perl use strict; use Tk; use warnings; use Tk::Photo; use Tk::PNG; use Transferts; #Création de la fenêtre principale my $fenetre = MainWindow->new(); #Définition de la taille min de la fenêtre $fenetre->minsize('500','300'); #Définition du title de la fenêtre $fenetre->title("Islo People"); #Création de la barre de menu my $barre_menu = $fenetre->Frame(-relief => 'groove' , -borderwidth => 2); #Création de la barre du menu général my $menu_gen = $barre_menu->Menubutton( -text => 'Menu' , -font => '{Garamond} 10', -tearoff => 0 , -menuitems => [ [ 'command' => 'Quitter' , -font => '{Garamond} 10', -command => \&Quitter ] ] ); # Création d'un cadre my $frame1 = $fenetre->Frame()->pack(-side => "bottom",-padx => 0, -pady => 0); #Affichage du menu général à gauche $menu_gen->pack(-side => 'left'); #Affichage de la barre de menu en haut de la fenêtre $barre_menu->pack(-side => 'top', -anchor => 'n', -fill => 'x'); my $ObjImage = $fenetre->Photo( -format => "png", -file => "/home/seb/Desktop/Islo_people/logo.png" ); my $bouton2 = $fenetre -> Button ( -image => $ObjImage )->pack(); #parcourir $frame1 ->Button ( -text => 'Parcourir' , -command => \&Chemin ) ->pack () ; sub new { my $t=new transferts; $t->transfert(my $chemin); } # Envoyer $frame1 ->Button ( -text => 'Envoyer' , -command =>sub{Transferts::Transfert()} ) ->pack(); #my $status_var =0; #$frame1->ProgressBar( # -borderwidth => 10, # -relief => 'sunken', # -width => 35, # -length => 500, # -padx => 0, # -pady => 0, # -variable => \$status_var, # -colors => [0, 'green'], # -resolution => 0, # -blocks => 50, # -anchor => 'w', # -from =>'0', # -to => '100' # )->pack( # -padx => 10, # -pady => 10, ## -fill => 'both' # ); # La boucle dans laquelle la variable de ProgressBar change #for (my $lostime = 0 ; $lostime < 101 ; $lostime += 5) #{ # sleep 1 ; # $status_var=$lostime ; # l'instruction suivante permet la prise en compte # des changements de valeurs de $status_var dans Perl/Tk, # ici le widget Progressbar # $fenetre->update; # } # sleep 5; #print "Fin de l'exemple update \n"; # $fenetre->destroy; #Création de notre barre de statut à l'aide d'un Label #my $barre_statut = $fenetre->Label(-relief => 'groove', -text => "Islo people", -font => '{Garamond} 10'); #On l'ajoute en bas de la fenêtre afin de lui donner l'effet barre de statut #$barre_statut->pack( -side => 'bottom', -fill => 'both'); #Définition de la fonction de fermeture de l'application sub Quitter { exit(0); } sub Chemin() { my $chemin = $fenetre -> getOpenFile ( -initialdir => '/home') ; return $chemin; } MainLoop;
Le fichier Transferts.pm
#!/usr/bin/perl use strict; use warnings; use Net::FTPSSL; use Connexion; package Transferts; my $photo; my $connexion; my $conn; sub new { #$_[0] etant le premier parametre lors de l'appel de la fonction my $picture=$_[0]; $photo = $picture; $conn = new ConnectionFTP(); $connexion = $conn -> ConnectionFTP(); } sub Transfert() { my $verify; my $ftps; $conn = Connexion::ConnectionFTP(); $verify = VerifierExtension(); if($verify == "Connecté") { $ftps->put($_[0]); } else { print "Mauvaise extension\nAutorise : jpeg, raw\n"; } } sub VerifierExtension() { my $TonFichier = $_[0]; my $extension = "correct"; # Verification de l'extension unless ( -e $TonFichier and $TonFichier =~ m{(?:jpe?g|raw)$} ) { die($extension = "incorrect"); } return $extension; } 1;
le fichier Connexion.pm
#!/usr/bin/perl use strict; use warnings; use Net::FTPSSL; package Connexion; # $file correspond au fichier de configuration du FTP my $file = '/home/seb/workspace/Islo_People/Configuration'; my $user; my $mdp; my $server; my $port; # Constructeur sub new { my @parametre = Recherche_parametre(); $user = $parametre[0]; $mdp = $parametre[1]; $server = $parametre[2]; $port = $parametre[3]; } # Fonction qui parcours le fichier de configuration et qui les retournent sub Recherche_parametre() { #Déclaration des variables my $lignes; my @config; my @parametre; #Ouverture du fichier de configuration open(CONF, "<".$file); # $lignes prend la valeur du fichier de configuration while(defined($lignes = <CONF>)) { #Séparation des attributs de $lignes @config = split("=", $lignes); if($config[0] == 'user') { # Si la première valeur du tableau config est égale #à user alors $user prend la valeur de la deuxième valeur du tableau $user=$config[1]; } if($config[2] == 'mdp') { $mdp=$config[3]; } if($config[4] == 'server') { $server=$config[5]; } if($config[6] == 'port') { $port=$config[7]; } #Construction du tableau parametre avec les valeurs nécessaires à la connection du FTP @parametre=($user,$mdp,$server,$port); } #Fermeture du fichier close(CONF); #On retourne le tableau return @parametre; } # Fonction Connection qui retourne la valeur de l'état de la connection au FTP sub ConnectionFTP { # Initialisation de $etat à vrai my $etat = "vrai"; #my $parametre = Recherche_parametre(); #$user = $parametre[0]; #$mdp = $parametre[1]; #$server = $parametre[2]; #Connection au FTP my $ftps = Net::FTPSSL->new($server, Port=> $port, Debug => 1) or $etat = "faux"; # Si la connection n'est pas effectué $etat prend la valeur faux $ftps-> login('$user', '$mdp') or $etat = "faux"; # Si la connection n'est pas effectué $etat prend la valeur faux # On retourne $etat return $etat; } # Fonction Connection au FTP sub VerifierConnection { my $connexion = ConnectionFTP(); if($connexion == 'vrai') { $connexion = "Connecté"; } else { $connexion = "Non Connecté"; } return $connexion; } 1;
et le fichier de configuration
user=photographe mdp=passe server=10.0.2.69 port=21
Voila donc je t'explique le problème il s'avère que comme tu peut le voir je tente de mettre un fichier sur un ftp.
Hélas l'envoi ne fonctionne pas et je ne comprend pas pourquoi ca me met une erreur a la ligne
$ftps-> login('$user', '$mdp')
de Connexion.pm
Et voici l'erreur
<<+ 555 Host undefined
Tk::Error: Can't call method "login" on an undefined value at /home/seb/workspace/Islo_People/Connexion.pm line 86.
Tk callback for .frame1.button1
Tk::__ANON__ at /usr/lib/perl5/Tk.pm line 250
Tk::Button::butUp at /usr/lib/perl5/Tk/Button.pm line 175
<ButtonRelease-1>
(command bound to event)
Donc voila je sais que c'est un peu lourd a regardez mais tu ma demandé de bien situé le problème voila qu'y est fait je pense
Aide moi stp je suis vraiment bloqué stp
merci d'avance
A voir également:
- Probleme perl Net::FTPSSL
- Net framework 2.0 - Télécharger - Divers Utilitaires
- Paint net - Télécharger - Dessin & Illustration
- Logo .net - Télécharger - Études & Formations
- Net framework 4.0 - Télécharger - Divers Utilitaires
- Onoffapp net - Forum Vos droits sur internet
3 réponses
Salut,
mais tu ma demandé de bien situé le problème voila qu'y est fait je pense
Je ne sais pas à qui tu t'adresses mais je vais essayer de te répondre.
En fait c'est la lecture de ton fichier de configuration qui n'est pas bon.
J'ai extrait juste la partie en question pour te montrer les erreurs
Voici la partie en question (j'ai supprimer le reste de fichier pour te montrer le test que j'ai fait)
J'ai testé sur le fichier de config
Donc le code que j'ai testé
Et voici le résultat
En fait @config ne contiendra jamais tous les éléments.
A chaque lecture de $lignes le tableau est vidé.
Bref il contiendra toujours seulement deux éléments.
Pour ne pas dire que == est l'opérateur d'égalité numérique.
Pour les chaînes c'est eq
Mais ça n'a pas trop d'importance vu que ton tableau est mal rempli.
Bref, quand tu essaie la connexion, comme $user,$mdp, etc. ne contiennent rien, c'est normal que tu as erreur de connexion.
Le message suivant je vais te donner une version que tu dois adapter à ton code.
Si je peux me permettre, ton code est aussi mal écrit de point de vue visibilité.
N'oublie pas aussi que ton constructeur va renvoyé le résultat de la dernière expression.
Donc tu dois plutôt faire un return de la liste contenant tes paramètres de connexion.
mais tu ma demandé de bien situé le problème voila qu'y est fait je pense
Je ne sais pas à qui tu t'adresses mais je vais essayer de te répondre.
En fait c'est la lecture de ton fichier de configuration qui n'est pas bon.
J'ai extrait juste la partie en question pour te montrer les erreurs
Voici la partie en question (j'ai supprimer le reste de fichier pour te montrer le test que j'ai fait)
J'ai testé sur le fichier de config
lami20j@debian:~/trash/ccm_perl/drogba7213$ cat Configuration user=lami20j mdp=a server=10.0.0.3 port=21
Donc le code que j'ai testé
lami20j@debian:~/trash/ccm_perl/drogba7213$ cat Connexion2.pm #!/usr/bin/perl use strict; use warnings; # $file correspond au fichier de configuration du FTP my $file = '/home/lami20j/trash/ccm_perl/drogba7213/Configuration'; my $user; my $mdp; my $server; my $port; # Constructeur my @parametre = &Recherche_parametre(); $user = $parametre[0]; $mdp = $parametre[1]; $server = $parametre[2]; $port = $parametre[3]; print "@parametre\n"; # Fonction qui parcours le fichier de configuration et qui les retournent sub Recherche_parametre() { #Déclaration des variables my $lignes; my @config; my @parametre; #Ouverture du fichier de configuration open CONF, "$file" or die "E/S : $!\n"; # $lignes prend la valeur du fichier de configuration while(defined($lignes = <CONF>)) { #Séparation des attributs de $lignes @config = split("=", $lignes); if($config[0] == 'user') { # Si la première valeur du tableau config est égale #à user alors $user prend la valeur de la deuxième valeur du tableau $user=$config[1]; } if($config[2] == 'mdp') { $mdp=$config[3]; } if($config[4] == 'server') { $server=$config[5]; } if($config[6] == 'port') { $port=$config[7]; } #Construction du tableau parametre avec les valeurs nécessaires à la connection du FTP @parametre=($user,$mdp,$server,$port); } #Fermeture du fichier close(CONF); #On retourne le tableau return @parametre; } __END__
Et voici le résultat
lami20j@debian:~/trash/ccm_perl/drogba7213$ perl Connexion2.pm Argument "user" isn't numeric in numeric eq (==) at Connexion2.pm line 38, <CONF> line 1. Argument "user" isn't numeric in numeric eq (==) at Connexion2.pm line 38, <CONF> line 1. Argument "mdp" isn't numeric in numeric eq (==) at Connexion2.pm line 44, <CONF> line 1. Use of uninitialized value $config[2] in numeric eq (==) at Connexion2.pm line 44, <CONF> line 1. Argument "server" isn't numeric in numeric eq (==) at Connexion2.pm line 48, <CONF> line 1. Use of uninitialized value $config[4] in numeric eq (==) at Connexion2.pm line 48, <CONF> line 1. Argument "port" isn't numeric in numeric eq (==) at Connexion2.pm line 52, <CONF> line 1. Use of uninitialized value $config[6] in numeric eq (==) at Connexion2.pm line 52, <CONF> line 1. Argument "mdp" isn't numeric in numeric eq (==) at Connexion2.pm line 38, <CONF> line 2. Use of uninitialized value $config[2] in numeric eq (==) at Connexion2.pm line 44, <CONF> line 2. Use of uninitialized value $config[4] in numeric eq (==) at Connexion2.pm line 48, <CONF> line 2. Use of uninitialized value $config[6] in numeric eq (==) at Connexion2.pm line 52, <CONF> line 2. Argument "server" isn't numeric in numeric eq (==) at Connexion2.pm line 38, <CONF> line 3. Use of uninitialized value $config[2] in numeric eq (==) at Connexion2.pm line 44, <CONF> line 3. Use of uninitialized value $config[4] in numeric eq (==) at Connexion2.pm line 48, <CONF> line 3. Use of uninitialized value $config[6] in numeric eq (==) at Connexion2.pm line 52, <CONF> line 3. Argument "port" isn't numeric in numeric eq (==) at Connexion2.pm line 38, <CONF> line 4. Use of uninitialized value $config[2] in numeric eq (==) at Connexion2.pm line 44, <CONF> line 4. Use of uninitialized value $config[4] in numeric eq (==) at Connexion2.pm line 48, <CONF> line 4. Use of uninitialized value $config[6] in numeric eq (==) at Connexion2.pm line 52, <CONF> line 4. Use of uninitialized value $parametre[1] in join or string at Connexion2.pm line 20. Use of uninitialized value $parametre[2] in join or string at Connexion2.pm line 20. Use of uninitialized value $parametre[3] in join or string at Connexion2.pm line 20. 21
En fait @config ne contiendra jamais tous les éléments.
A chaque lecture de $lignes le tableau est vidé.
Bref il contiendra toujours seulement deux éléments.
Pour ne pas dire que == est l'opérateur d'égalité numérique.
Pour les chaînes c'est eq
Mais ça n'a pas trop d'importance vu que ton tableau est mal rempli.
Bref, quand tu essaie la connexion, comme $user,$mdp, etc. ne contiennent rien, c'est normal que tu as erreur de connexion.
Le message suivant je vais te donner une version que tu dois adapter à ton code.
Si je peux me permettre, ton code est aussi mal écrit de point de vue visibilité.
N'oublie pas aussi que ton constructeur va renvoyé le résultat de la dernière expression.
Donc tu dois plutôt faire un return de la liste contenant tes paramètres de connexion.
Re,
Voici un test qui rempli les paramètres des connexion depuis le fichier de configuration
Le fichier de configuration
Voici un test qui rempli les paramètres des connexion depuis le fichier de configuration
Le fichier de configuration
lami20j@debian:~/trash/ccm_perl/drogba7213$ cat Configuration user=lami20j mdp=a server=10.0.0.3 port=21Le script
lami20j@debian:~/trash/ccm_perl/drogba7213$ cat Connexion3.pm #!/usr/bin/perl use strict;use warnings; # $file correspond au fichier de configuration du FTP my $file = '/home/lami20j/trash/ccm_perl/drogba7213/Configuration'; my ($user,$mdp,$server,$port); # Juste pour te montrer ce que contiendroit tes paramètres # Vu que tu utilises les variables, sub new() n'as pas de sens selon moi ($user,$mdp,$server,$port) = &Recherche_parametre; print "$user\n$mdp\n$server\n$port\n"; # Fonction qui parcours le fichier de configuration et qui les retournent sub Recherche_parametre() { #Déclaration des variables my $lignes; my @parametre; #Ouverture du fichier de configuration open CONF, "$file" or die "E/S : $!\n"; # $lignes prend la valeur du fichier de configuration while(defined($lignes = <CONF>)){ chomp ($lignes); #Séparation des attributs de $lignes push @parametre,(split /=/, $lignes)[1]; } #Fermeture du fichier close(CONF); #On retourne le tableau return @parametre; } __END__L'exécution et le résultat
lami20j@debian:~/trash/ccm_perl/drogba7213$ perl Connexion3.pm lami20j a 10.0.0.3 21Il te reste qu'à modifier ton fichier Connexion.pm avec la fonction qui va bien.