Php 如何连续捕获telnet会话/客户端输出(fread)?

Php 如何连续捕获telnet会话/客户端输出(fread)?,php,sockets,Php,Sockets,我正在socket/telnet控制台上执行命令(fputs),并通过下面的代码获得输出/结果(fread),它工作得非常好 //open socket let's say ip = 192.168.10.5 and port = 21 $this->socketResource = fsockopen($this->nodeIp,$this->portNumber); //execute some commands, for example "ipconfig" fputs(

我正在socket/telnet控制台上执行命令(
fputs
),并通过下面的代码获得输出/结果(
fread
),它工作得非常好

//open socket let's say ip = 192.168.10.5 and port = 21
$this->socketResource = fsockopen($this->nodeIp,$this->portNumber);
//execute some commands, for example "ipconfig"
fputs($this->socketResource,$command);
//get output string
$output = fread($this->socketResource,30000);
现在,我的要求是在不通过FPUT执行任何命令的情况下获得所有控制台/套接字输出。例如,Cisco路由器在telnet控制台/套接字上提供连续的调试消息/打印,而无需FPUT执行任何命令

如何在不执行任何命令(
fputs
)的情况下连续捕获(
fread
)任何telnet会话输出一段时间


如果我以每x秒一次的离散方式捕捉,我肯定会错过一些控制台输出。

为此,我会切换到家庭。当试图通过性能和扩展来实现上述目标时,会有巨大的改进

$stream = stream_socket_client("tcp://10.1.1.1:23", $errno, $errstr, 30);
if (!$stream ) {
    echo "$errstr ($errno)<br />\n";
} else {
    fwrite($stream , "sh run" . PHP_EOL);

    // Set Blocking Mode - Wait For A Response On The Stream
    stream_set_blocking( $stream , true );
    while( true ){

        // This is your response
        echo stream_get_contents( $stream );
    }

}
$stream=stream\u socket\u客户端(“tcp://10.1.1.1:23“,$errno,$errstr,30);
如果(!$stream){
回显“$errstr($errno)
\n”; }否则{ fwrite($stream,“sh run”.PHP_EOL); //设置阻塞模式-等待流上的响应 流\设置\阻塞($stream,true); while(true){ //这是你的回答 回声流\u获取\u内容($stream); } }

您需要在上面添加一些内容来中断
while(true)
循环,否则脚本将永远运行,但我使用这种方法来执行类似的操作

非常感谢你。阻塞意味着tcp流将永久保持打开状态。我写了吗?在设置块模式后,一次调用echo stream\u get\u contents($stream)花费了太多时间,对于小的缓冲区内容需要一分钟以上的时间。您知道如何最小化这一点,以便多次调用不会花费太多时间。。