Bon le sujet à l'air un tantinet compliqué alors je vais vous expliquer en détail.
Premièrement, depuis peu, les serveurs de OVH en Gentoo release 2 ont réimplenté la règle 'on a pas le droit de faire la commande emerge' ce qui pourrait ('Ô mon dieu') casser leur configuration Bref, du coup, quand mon script php connecté en SSH à mon serveur VPS tente un emerge de quoi que ce soit, il boucle infini, puisque la commande lui demande si on veut continuer ou non.
Jusque là ca va encore ! Ensuite, j'ai donc appris qu'un fwrite suffisait à lui transmettre ce 'y' tant attendu qui execute la commande (bon quand on voit comment réagi emerge on à pas vraiment envie de dire qu'elle s'exécute mais on est pas la pour troller ) On en arrive donc à atteindre le sujet du post, auriez vous l'extrême obligeance de voir mon code de me dire pourquoi quand j'active stream_set_blocking($stream, true), il part en boucle infinie (alors que sans il marche mais impossible de savoir si la commande a bien finie de s'exécuter ).
Voila mon code
Je suis légèrement désespéré...
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 $server_ip = '46.105.XXX.XXX'; $login = 'xxxxx'; $pwd = 'xxxxx'; echo 'Connexion...'; $connect = ssh2_connect($server_ip,22); if (!$connect) { echo '<br><span style="color:red;">----Connexion échouée</span>'; die; }; echo '<span style="color:green;"> réussie</span><br>'; echo 'Authentification...'; if (!ssh2_auth_password($connect,$login,$pwd)) { echo '<span style="color:red;">----Authentification échouée</span>'; }; echo '<span style="color:green;"> réussie</span><br><hr>'; $stream = ssh2_exec($connect,'emerge --unmerge bind'); // Lecture du premier caractère (initie la lecture) $return = stream_get_contents($stream,1); var_dump($return); $return = stream_get_contents($stream); var_dump($return); // En cas de demande de confirmation if (preg_match('#([yon])[\-\\\/\|]([yon])#', $return, $match)) { if (in_array($match[1].$match[2], array('yn','ny'))) { fwrite ($stream, 'y'); } else if (in_array($match[1].$match[2], array('on','no'))) { fwrite ($stream, 'o'); } } //stream_set_blocking($stream, true); $return = stream_get_contents($stream); var_dump($return);
Partager