Zipper un répertoire, fichier sur un serveur distant

Zipper un répertoire, fichier sur un serveur distant - Perl - Programmation

Marsh Posté le 21-04-2010 à 18:08:30    

salut à tous,
 
Je voudrais savoir si ce bout de code est correct  
 

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use Net::SSH2;
  5. use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
  6. my $ssh2 = Net::SSH2->new();
  7. $ssh2->connect('host') or die "Erreur de connexion :$!";
  8. #Authetification
  9. if ($ssh2->auth_password('truc','machin'))
  10. {
  11.   my $sftp = $ssh2->sftp();
  12.   my $zip = Archive::Zip->new();
  13.   my $dir = '/dir';
  14.   my $fic = '/fichier.txt';
  15.  
  16.   # archiver répertoire
  17.   my $dir_member = $zip->addDirectory( "$dir" );
  18.   # archiver un fichier
  19.   my $file_member = $zip->addFile( "$fic" );
  20.   unless ( $zip->writeToFileNamed("res.zip" ) == AZ_OK )
  21.   {
  22.     die 'write error';
  23.   }
  24. }
  25. $ssh2->disconnect();
  26. exit;


 
J'ai les messages d'erreurs suivant :
1- Can't open "/res.zip" :No such file or directory at C:/Perl/lib/Archive/Zip/Archive.pm line 369
2- Write error at ... sur la ligne unless ( $zip->writeToFileNamed("res.zip" ) == AZ_OK )
3- Can't call method "desiredCompressionLevel" on an undefined value at ...
 
Je pense que c'est un problème de chemin car à mon avis ceci cherche les dossiers et fichiers localement mais pas sur le serveur.
Y a t-il un moyen pour avoir le dossier courant ou avez vous d'autres idées ?
 
Merci pour votre aide

Reply

Marsh Posté le 21-04-2010 à 18:08:30   

Reply

Marsh Posté le 22-04-2010 à 15:01:23    

Je comprends rien à ton histoire: Tu peux pas zipper à distance comme ça avec un programme qui s'exécute en local :pt1cable:  
Il faut que tu récupères le fichier distant avec sftp, tu le zippe en local, et tu envoies a distance le fichier avec sftp.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-04-2010 à 15:39:50    

OK gilou, donc y a pas moyen de zipper un répertoire à distant ?
même en utilisant d'autre méthode (module perl) genre Net::SFTP::Foreign ou autre ? ou bien autre format d'archivage ?

Reply

Marsh Posté le 22-04-2010 à 17:35:53    

Le pb est au niveau de addFile( $fileName [, $newName ] ) qui attends vraiment quelque chose de local. Je vois pas de fonction qui fasse addFile avec un filehandle en paramètre, sinon ça serait sans doute faisable.

 

La solution de récupérer depuis le serveur via $sftp, compresser, puis expédier sur le serveur via $sftp ne te convient pas? pourquoi? elle doit pas être moins efficace, parce que dans tous les cas, il faudra bien que les données soient récupérées depuis le serveur puis expédiées sur le serveur, puisque leur compression est effectuée en par le CPU local.
A+,


Message édité par gilou le 22-04-2010 à 17:36:27

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 26-04-2010 à 12:18:15    

OK, gilou merci pour ton aide je vais faire ce que tu propose. Mais ma question est toujours à l'ordre du jour et si c'est vraiment pas possible bon tant pis

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed