Bonjour à tous !

J'ai un problème un peu particulier pour décompresser une archive zip sur un serveur distant. Le mécanisme est le suivant :

Une fois que l'utilisateur a choisi son fichier, il est d'abord uploadé sur le serveur web (sous Windows), puis recopié sur un ou plusieurs autres serveurs (sous linux) via la fonction suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
function copier_livrables_sur_serveur($nom_fichier_source, $nom_fichier_destination , $nom_serveur)
{
  // Définition des variables
  $serveur_ip = get_serveur_ip($nom_serveur);
  $user_ssh = "daffy";
  $mot_de_passe = "acme";
  $retour_copie = 1;
 
  // On vérifie le retour de la fonction
  if($serveur_ip == 1) {
    return $retour_copie;
    exit;
  }
 
  // Connexion au serveur
  if (!function_exists("ssh2_connect")) die("fonction ssh2_connect n'existe pas");
  if(!($con = ssh2_connect($serveur_ip, 22))){
    echo "erreur: Impossible d'établir une connexion\n";
  }
  else {
    // On essaie de s'authentifier avec les identifiants
    if(!ssh2_auth_password($con, $user_ssh, $mot_de_passe)) {
      echo "erreur: Impossible de s'authentifier\n";
    }
    else {
      // On copie le fichier sur le serveur
      ssh2_scp_send($con, $nom_fichier_source, '/appli/daffy/INST/'.$nom_fichier_destination, 0664);
      $retour_copie = 0;
    }
  }
}
Ensuite, je veux décompresser le fichier dans le même répertoire, via une autre fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
35
36
37
38
39
40
41
42
43
44
45
46
47
 
function decompresser_livrables_sur_serveur($nom_fichier, $rep_source, $nom_serveur)
{
  // Définition des variables
  $serveur_ip = get_serveur_ip($nom_serveur);
  $user_ssh = "daffy";
  $mot_de_passe = "acme";
  $requete = "cd ".$rep_source.";unzip ".$nom_fichier." 2>&1";
  //DEBUG - echo $requete;
  $retour_decomp = 1;
 
  // On vérifie le retour de la fonction
  if($serveur_ip == 1) {
    return $retour_decomp;
    exit;
  }
 
  // Connexion au serveur
  if (!function_exists("ssh2_connect")) die("fonction ssh2_connect n'existe pas");
  if(!($con = ssh2_connect($serveur_ip, 22))){
    echo "erreur: Impossible d'établir une connexion\n";
  }
  else {
    // On essaie de s'authentifier avec les identifiants
    if(!ssh2_auth_password($con, $user_ssh, $mot_de_passe)) {
      echo "erreur: Impossible de s'authentifier\n";
    }
    else {
      // On décompresse le fichier
     if(!($stream = ssh2_exec($con, $requete )) ){
       echo "erreur: Impossible de lancer la commande\n";
     } else{
         sleep(1);
         stream_set_blocking( $stream, true );
         $data = "";
         $data = stream_get_contents($stream);
         while( $buf = fread($stream,4096) ){
            $data .= $buf;
         }
         fclose($stream);
         //DEBUG
        // echo "<br><p>".$data."</p>";
        }
      $retour_decomp = 0;
    }
  }
}
Mon problème, c'est que le fichier n'est pas décompréssé, car il n'est plus reconnu comme un fichier zip valide.

L'erreur est :
Archive: test.zip
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of test.zip or
test.zip.zip, and cannot find test.zip.ZIP, period.
J'ai fait un test en recopiant le fichier manuellement sur le serveur, puis en le décompressant via la commande unzip, ça fonctionne.
Je ne comprends pas pourquoi l'archive n'est plus reconnu comme un zip valable, quelq'un aurait il une idée ?

Merci d'avance,
Michael