2010-11-03 2 views
0

Parfois, lorsque je lance ce code, j'obtiens un processus et un identifiant et parfois la commande s'exécute mais le retour de données reste vide? Est-ce que quelqu'un sait comment attraper le flux correctement?ssh2_exec rand retourne l'identifiant du processus?

/** 
* Run command in background and returns the process id 
* 
* @param string $cmd 
* @return int process id 
*/ 
public function runBackground($cmd) 
{ 
    $cmd = $cmd." > /dev/null & echo $!"; 

    if (!($stream = ssh2_exec($this->_connection, $cmd))) { 
     return "fail: unable to execute command\n"; 
    } else { 
     // collect returning data from command 
     stream_set_blocking($stream, true); 
     $data = ""; 

     while ($buf = fread($stream,4096)) { 
      $data .= $buf; 
     } 

     fclose($stream); 
     return (int)$data; 
    }  
} 
+0

Un patch a été publié il y a 2 jours, voir mon montage ci-dessous. – netcoder

Répondre

1

J'ai eu des problèmes similaires avec ma dernière utilisation de l'extension PSSC ssh2. Il semble être lié à libssh2 d'une manière ou d'une autre: je n'avais aucun problème avec ça auparavant, puis j'ai mis à jour libssh2 et j'ai commencé à recevoir des réponses vides sporadiquement sans raison apparente. ssh2_exec exécuterait toujours la commande, mais parfois j'obtiendrais la sortie, parfois je ne le ferais pas.

Malheureusement, cette extension n'est pas maintenue depuis 2008 et est toujours en état Bêta (0.11.0). Vous voudrez peut-être regarder quelques bibliothèques tierces SSH2 (certaines d'entre elles sont LGPL ou GPL). Je n'ai jamais été capable de résoudre ce problème.

EDIT:

il y a 2 jours (le 3 Novembre, 2010), le responsable a publié un correctif qui fonctionne apparemment avec la dernière libssh2, bien que je ne l'ai pas testé moi-même. Vous souhaiterez peut-être passer à la version 0.11.2.

+0

Ah ok merci pour la réponse :) Je pense que je vais juste laisser tel quel .. car je ne suis pas vraiment intéressé par la compilation par moi-même, mais merci pour l'info. – Chris