[PHP & SSH] Caractère étrange

Bonjour,

Je m'en remet à vous, car je suis dans l'impasse.

Je souhaite ouvrir des fichiers (un par un xD ) bash depuis PHP
J'y arrive, installation complète, mais il m'affiche ceci

 ~ sc_serv  
v  
D#J"¢II5%>¨äZb--QIJ'í_  
 ~ ~Ì  
sc_serv.conf  
f  
D#J"¢I5%>¨äZb--QQJ'í_  
 ~  
sc_serv.conf


Une idée ? Voici le code

<?php  
$connection = ssh2_connect('127.0.0.1', 22);  
ssh2_auth_password($connection, 'test', 'test');  

$stream = ssh2_shell($connection, 'vt102', null, 80, 24, SSH2_TERM_UNIT_CHARS);  
fwrite( $stream, 'ls');  
while($o=fgets($stream)){  
echo $o.'<br>';  
}  
?>  


3 réponses

  1. C'est pas des données pour le rendu du shell ça ? Genre des couleurs ou d'autres meta données ?

    Tu va peut-être devoir les virer toi même. Ou alors il faut passer par l'argument term_type de la fonction ssh2_shell, et indiquer un type qui soit en text/plain.
    0
    1. Les terminaux que je connais, me renvois la même erreur:
      j'ai essayé vanilla, vt102, xterm

      PS : J'ai update ma librairie

      que je joint

      <?php 
      class SSH {
      private $conn; // Connection 
      private $log=array(); // Event log
      private $stream;
      private $debug=false;
      
      public function __construct($user, $pass, $host, $port=22) {
      	if ($this->connect($host,$port)) {
      		if (@$this->auth_pwd($user,$pass)){
      			return true;
      		} else {
      			return false;
      		}
      	} else {
      		return false;
      	}
      }
      /*** Connection SSH ***/
      public function connect($host,$port=22) {
      	if ($this->conn = ssh2_connect($host, $port)) {
      	$this->log[] = 'Connection succes to '.$host.':'.$port;
      		return true;
      	} else {
      	$this->log[] = 'Connection faild to '.$host.':'.$port;
      		return false;
      	}
      }
      /*** Login SSH ***/
      public function auth_pwd($user,$pass) {
      	if (ssh2_auth_password($this->conn, $user, $pass)) {
      	$this->log[] = 'Login succces by '.$user;
      		return true;
      	} else {
      	$this->log[] = 'Login faild by '.$user;
      		return false;
      	}
      }
      
      /*** Open shell ***/
      public function shell($term_type='vt102', $env=NULL, $width=80, $height=24)
      {
      $this->stream = ssh2_shell($this->conn, $term_type, $env, $width, $height, SSH2_TERM_UNIT_CHARS);
      $this->log[] = 'Open shell with PARAM ' . $term_type . ' ' .$env . ' ' .$width . ' ' .$height;
      }
      
      /*** Run a command ***/
      public function cmd($cmd)
      {
      if (!empty($this->stream))
      {
      $this->log[] = 'Run cmd : ' . $cmd;
      fwrite($this->stream, $cmd . PHP_EOL);
      sleep(1);
      }
      else
      {
      $this->log[] = 'Shell not run : exit';
      $this->disconnect();
      }
      
      
      }
      
      
      /*** Return log debuging ***/
      function log($print=false)
      {
      	if ($print == false)
      	{
      	return $this->log;
      	}	
      	else
      	{
      	echo '<pre>';
      		foreach ($this->log as $key => $value)
      		{
      		echo $key . ' : ' . $value . PHP_EOL;
      		}
      	echo '</pre>';
      	}
      }
      
      
      /*** Print terminal return ***/
      public function get()
      {
      $stderr_stream = ssh2_fetch_stream($this->stream, SSH2_STREAM_STDERR);
        while (!feof($stdout_stream)) {
              echo fgets($stdout_stream, 128);
          }
      }
      
      
      /***
      Debug switch 
      for call log() after disconnection
      ***/
      public function debug()
      {
      $this->debug = true;
      }
      
      /*** Deconnexion ***/
      public function disconnect() {
      	// if disconnect function is available call it..
      	if ( function_exists('ssh2_disconnect') ) {
      	$this->log[] = 'Disconnect by funct ssh2_disconnect';
      		ssh2_disconnect($this->conn);
      	} else { // if no disconnect func is available, close conn, unset var
      	$this->log[] = 'Disconnect by fclose';
      		@fclose($this->conn);
      		unset($this->conn);
      	}
      	if ($this->debug == true){$this->log(true);}
      	// return null always 
      	return NULL;
      }
      
      /*** Destruction de class ***/
      public function __destruct(){
      $this->disconnect();
      }
      
      }
      
      
      
      $ssh = new SSH('user', 'pass', '127.0.0.1');
      $ssh->debug();
      $ssh->shell();
      $ssh->cmd('ps');
      $ssh->get();
      $ssh->cmd('ls');
      $ssh->get();
      ?>
      
      
      0