Probleme perl Net::FTPSSL
drogba7213
Messages postés
1550
Statut
Membre
-
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
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
- .Net runtime optimization service ✓ - Forum Windows 8 / 8.1
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ésultatlami20j@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.