Bonjour,

Je suis désolée si l'intitulé parait redondant avec d'autres sujets du forum. j'ai fouiné et je n'ai pas trouvé la solution à mon problème. Je travaille donc sur un serveur distant sur lequel sont stocké des fichiers. Première étape, je me connecte en ssh2 et je copie les fichiers et dossiers qui m'intéressent dans un répertoire que je crée exprès sur ce serveur distant. Pour cette partie là pas de problème.

Ce que je cherche ensuite à faire, c'est à zipper ce dossier pour le proposer en téléchargement. Je sais que certains vont me parler de ZipArchive, mais toujours est-il que avec ce système là je peux effectivement télécharger une archive mais j'ai le message d'erreur suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Archive:  /home/maryvonne/Téléchargements/plop/Archive_test.zip
[/home/maryvonne/Téléchargements/plop/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.
zipinfo:  cannot find zipfile directory in one of /home/maryvonne/Téléchargements/plop/Archive_test.zip or
          /home/maryvonne/Téléchargements/plop/Archive_test.zip.zip, and cannot find /home/maryvonne/Téléchargements/plop/Archive_test.zip.ZIP, period.
je suppose qu'en fait l'archive doit être vide. Pour contourner ce problème (et étant un peu pressée) je me suis dit " Et bien, tentons de zipper directement sur ce serveur distant!"
Pour cela si j'ai bien compris je peux utiliser ssh2_exec(ressource,commande). Malheureusement "rien ne se passe": sur le serveur distant l'action n'est pas réalisée et dans le même temps je n'ai pas de messages d'erreur affichés. J'ai fait un var_dump(ssh2_exec(resource,commande)) qui me renvoie juste "resource(23) of type (stream) "
Je vous met mon code quand même ( ^^ )
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
try{
	$server='Adresse_serveur';
        $conn = ssh2_connect($server);
}catch (Exception $e){
	die('Erreur : ' . $e->getMessage());
}
 
 
 
if(false===ssh2_auth_password($conn,'user','mot_de_passe')){
	echo 'echec authentification<br/>';
}else{
	echo 'authentification réussie <br/>';
}
$sftp=ssh2_sftp($conn);
$complete_chemin="ssh2.sftp://$sftp/var/www/html/Bi2G/".$_SESSION['orga_ssh']."/tr_ok/";
$chemin="Bi2G/".$_SESSION['orga_ssh']."/tr_ok/";
$dossiers_coches=array();
$fichiers_coches=array();
foreach($_SESSION['dossiers'] as $cle => $element){
	if(isset($_POST[$element])){
		$dossiers_coches[]=$element;
	}
}
 
foreach($_SESSION['fichiers'] as $cle => $element){
	$transfo=str_lreplace('.',"_",$element);
	if(isset($_POST[$transfo])){
		foreach($dossiers_coches as $a => $present){
			if(!strpos($element,$present) && $element!=$present){
				$fichiers_coches[]=$element;
			}
		}
	}
}
 
for($i=0;$i<count($dossiers_coches);$i++){
	echo " dossier : ".$dossiers_coches[$i]." a été coché <br/>";
}
for ($j=0;$j<count($fichiers_coches);$j++){
	echo " fichier : ".$fichiers_coches[$j]." a été coché<br/>";
}
 
if($ouvre=opendir($complete_chemin)){
	mkdir($complete_chemin.$_SESSION['id_gse'],0777);
	foreach($dossiers_coches as $a => $rep){
		$dir=strrchr($rep,"/");
		mkdir($complete_chemin.$_SESSION['id_gse'].$dir,0777);
		if($ouvre_rep=opendir($complete_chemin."/".$rep)){
			while ($fichier=readdir($ouvre_rep)){
				if($fichier !='.' && $fichier !='..'){
					copy($complete_chemin.$rep."/".$fichier,$complete_chemin.$_SESSION['id_gse'].$dir."/".$fichier);
				}
			}
		}				
	}
	foreach($fichiers_coches as $b => $file){
		$file_copy=str_replace("/","_",$file);
		copy($complete_chemin.$file,$complete_chemin.$_SESSION['id_gse']."/".$file_copy);
	}
 
$commande="zip -r /var/www/html/Bi2G/".$_SESSION['orga_ssh']."/tr_ok/".$_SESSION['id_gse'].".zip /var/www/html/Bi2G/".$_SESSION['orga_ssh']."/tr_ok/".$_SESSION['id_gse'];
/* zip -r /var/www/html/Bi2G/Homo_sapiens/tr_ok/GSE60124.zip /var/www/html/Bi2G/Homo_sapiens/tr_ok/GSE60124 */
ssh2_exec($conn,$commande);
J'ai mis le chemin complet pour le moment. Il est possible que j'ai du coup des problèmes de droits (notamment pour les répertoire /var, /www et /html) mais ça m'embête de changer ces droits là. Et je me demande également comment faire pour se positionner dans le répertoire qui m'intéresse et dans lequel j'ai les droits qu'il faut (Bi2G) et être sur de pouvoir y exécuter la commande.

Voilà, si quelqu'un a une idée pour m'aider ça serait super. Je débute un peu en php donc vraiment désolée d'avance si l'erreur est évidente et que je ne l'ai pas vue ^^

EDIT:

Je suis repartie un peu en arrière testant des fonctions simples comme mkdir avec ssh_2. Je ne comprends pas d'où venait l'erreur dans mon code précédent. Toujours est-il que maintenant j'arrive à lancer l'exécution de la comande:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$command='cd /var/www/html/Bi2G ; zip GSE_test.zip Homo_sapiens/tr_ok/GSE60124/';
$stream=ssh2_exec($conn, $command);
Il me reste cependant un problème c'est qu'en faitavec l'option "-r" j'ai un fichier sans extension qui se créé. A priori un fichier intermédiaire de compression. Bref, ce problème là ne rentre plus dans le cadre de ce post, je vais donc en créer un autre.
Désolée pour le dérangement