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 :
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 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; } } }
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.
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; } } }
L'erreur est :
J'ai fait un test en recopiant le fichier manuellement sur le serveur, puis en le décompressant via la commande unzip, ça fonctionne.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.
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
Partager