Hatta stream_set_blocking ile boş PHP SSH2 akışı içeriği,?

3 Cevap php

Ben PECL SSH2 uzantısını kullanarak SSH2 üzerinden uzak bir ana bilgisayardan bir iptables yapılandırma okur bir araç üzerinde çalışıyorum. Ben başarılı host bağlantısı doğrulamak ve komutları çalıştırmak mümkün duyuyorum. Ben yaşıyorum sorun akışı herhangi bir veri içermiyor bazen.

 /**
  * Load the current firewall configuration
  * @return bool
  */
 public function loadRules() {
  $stream = ssh2_exec($this->connection,"~/iptsave;");
  stream_set_blocking($stream,true);
  $iptablesSave = stream_get_contents($stream);
  if(empty($iptablesSave)) {
   return false;
   }
  parent::restore($iptablesSave);
  return true;
  }

Zaman yaklaşık% 25, ​​loadRules() yerine uzak sistem locahost bağlanırken bile, false döndürür. Ben ssh2_exec çağrısı değiştirilerek soruna başardı

$stream = ssh2_exec($this->connection,"~/iptsave; sleep .5");

ama bir şeylerin yanlış olduğunu endişe duyuyorum.

3 Cevap

phpSecLib yardımcı olabilir:

this post göre, her zaman ssh2.so. farklı olarak, çıkış verir

Ben burada aynı sorunu var. Her nasılsa akışı sonucunu almak için bir gecikme ayarlamanız gerekir.

The way you've done it is possible, but you could also set a sleep(1) after the stream_set_block($stream, true) function. You could try the usleep() function. Haven't tried it yet

Bu sorunu çözmek olabilir:

$stream = ssh2_exec($this->connection,"~/iptsave;");
stream_set_blocking($stream,true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
$iptablesSave = stream_get_contents($stream);